SARMAD TARAAZ / API GUIDE

The results you need.
Precisely defined.

Upload one recording, screen its artifacts, and request surface or source measurements. Select raw values, age-normalized Z-scores, or both—down to individual electrodes, region pairs and frequency columns.

  1. Create recording metadata and upload signal chunks.
  2. Seal the recording, then submit artifact screening.
  3. Submit exact output selections or "outputs": "all".
  4. Retrieve selected JSON values, individual result files, or one ZIP bundle.

Send Authorization: Bearer YOUR_API_KEY on recording, analysis, job and result requests. Create keys in your account dashboard and keep them in your server or protected recorder environment. The measurement catalog is public.

01 / THE COMPLETE CATALOG

Surface and source, clearly separated.

These are the measurements present in the bundled engines and normative tables. “Available” means a supported output exists; undefined numerical values can still be null. Each selectable ID is independent.

19 ELECTRODES · 171 ELECTRODE PAIRS

Surface measurements

Raw values & age-normalized Z-scores
MeasurementRawZ-scoreCoverage / reference
Absolute power · bandssurface.absolute_power.band

Integrated band power with the bundled 0.883 calibration gain.

AvailableµV²Available19 electrodes
10 bands · LE / AVE
Absolute power · 1 Hz intervalssurface.absolute_power.hz

Column k Hz integrates [k, k+1) Hz, including the two 0.5 Hz spectral bins.

AvailableµV²Available19 electrodes
30 frequencies · LE / AVE
Relative power · bandssurface.relative_power.band

100 × band power / total 1–50 Hz power, following the engine's 1–40 Hz prefilter.

Available%Available19 electrodes
10 bands · LE / AVE
Relative power · 1 Hz intervalssurface.relative_power.hz

100 × power in [k, k+1) Hz / total 1–50 Hz power after prefiltering.

Available%Available19 electrodes
30 frequencies · LE / AVE
Power ratiossurface.power_ratio.ratio

Absolute power in the first band divided by absolute power in the second band.

AvailableratioAvailable19 electrodes
10 ratios · LE / AVE
Peak frequency (spectral centroid)surface.peak_frequency.band

Power-weighted mean frequency within a band. This is not the maximum PSD bin and is not peak amplitude.

AvailableHzAvailable19 electrodes
10 bands · LE / AVE
Amplitude asymmetrysurface.amplitude_asymmetry.band

The inherited measure is power-based: 200 × (power A − power B) / (power A + power B). Pair order matters.

Available%Available171 pairs
10 bands · LE / AVE
Coherencesurface.coherence.band

Magnitude-squared coherence of pooled band cross-spectra × 100. Linked-ear reference only.

Available%Available171 pairs
10 bands · LE only
Phase lagsurface.phase_lag.band

Absolute cross-spectral phase angle, not signed phase or time delay. Linked-ear reference only.

AvailabledegreesAvailable171 pairs
10 bands · LE only

VOXELS · REGIONS · REGION PAIRS

Source measurements

Raw values & age-normalized Z-scores
MeasurementRawZ-scoreCoverage / reference
Voxel current-density powersource.current_density

LORETA voxel power at 2,394 atlas voxels × 30 frequency coordinates (1–30 Hz). Raw scale retains upstream calibration limits; this is not a vector time series.

Availablecalibrated source unitsAvailable2,394 voxels
30 frequencies · LE / AVE
LORETA regional absolute powersource.loreta.power

88 regions: 42 Brodmann areas plus amygdala and hippocampus in each hemisphere. Average-referenced internally. Reconstructed power norms.

Availablesource arbitrary unitsAvailable88 regions
8 bands · Average reference
LORETA regional coherencesource.loreta.coherence

Magnitude (not squared) coherence of Hilbert region signals × 100 across 1,936 catalogued pairs. Average-referenced internally. Z-scores use reconstructed norms; raw coherence is not calibrated to the reference export formula.

Available%Available1,936 pairs
8 bands · Average reference
eLORETA regional absolute powersource.eloreta.power

88 regions: 42 Brodmann areas plus amygdala and hippocampus in each hemisphere. Average-referenced internally. Z-scores use transferred power norms; no native normative cohort.

Availablesource arbitrary unitsAvailableTransferred norms88 regions
8 bands · Average reference
eLORETA regional coherencesource.eloreta.coherence

Magnitude (not squared) coherence of Hilbert region signals × 100 across 1,936 catalogued pairs. Average-referenced internally. Raw only. eLORETA coherence Z-score norms are not bundled.

Available%UnavailableNo bundled norms1,936 pairs
8 bands · Average reference
Peak frequency is not peak amplitude.

The existing peak_frequency measure is a power-weighted spectral centroid in Hz. No peak-amplitude measure or peak-amplitude Z-score table is bundled. Requesting an unknown metric returns 422.

Discover valid selectors

GET /v1/metrics?montage=LE
GET /v1/metrics/surface.coherence.band?montage=LE
GET /v1/metrics/source.loreta.coherence

The catalog lists id, available_values, units, columns, cell count, conditions and per-reference availability. A metric detail also returns its exact cells list. Select labels exactly as returned—including letter case and pair order. Catalog requests do not read EEG data.

02 / WHAT EACH NUMBER MEANS

Measurement definitions.

Absolute power · bandsSurfacesurface.absolute_power.band

Integrated band power with the bundled 0.883 calibration gain.

Raw: µV². Z-score: age- and condition-normalized standard deviations.

Selectable columns: Delta, Theta, Alpha, Beta, High Beta, Alpha 1, Alpha 2, Beta 1, Beta 2, Beta 3.

View exact cell labels and availability →
Absolute power · 1 Hz intervalsSurfacesurface.absolute_power.hz

Column k Hz integrates [k, k+1) Hz, including the two 0.5 Hz spectral bins.

Raw: µV². Z-score: age- and condition-normalized standard deviations.

Selectable columns: 1 Hz, 2 Hz, 3 Hz, 4 Hz, 5 Hz, 6 Hz, 7 Hz, 8 Hz, 9 Hz, 10 Hz, 11 Hz, 12 Hz, 13 Hz, 14 Hz, 15 Hz, 16 Hz, 17 Hz, 18 Hz, 19 Hz, 20 Hz, 21 Hz, 22 Hz, 23 Hz, 24 Hz, 25 Hz, 26 Hz, 27 Hz, 28 Hz, 29 Hz, 30 Hz.

View exact cell labels and availability →
Relative power · bandsSurfacesurface.relative_power.band

100 × band power / total 1–50 Hz power, following the engine's 1–40 Hz prefilter.

Raw: %. Z-score: age- and condition-normalized standard deviations.

Selectable columns: Delta, Theta, Alpha, Beta, High Beta, Alpha 1, Alpha 2, Beta 1, Beta 2, Beta 3.

View exact cell labels and availability →
Relative power · 1 Hz intervalsSurfacesurface.relative_power.hz

100 × power in [k, k+1) Hz / total 1–50 Hz power after prefiltering.

Raw: %. Z-score: age- and condition-normalized standard deviations.

Selectable columns: 1 Hz, 2 Hz, 3 Hz, 4 Hz, 5 Hz, 6 Hz, 7 Hz, 8 Hz, 9 Hz, 10 Hz, 11 Hz, 12 Hz, 13 Hz, 14 Hz, 15 Hz, 16 Hz, 17 Hz, 18 Hz, 19 Hz, 20 Hz, 21 Hz, 22 Hz, 23 Hz, 24 Hz, 25 Hz, 26 Hz, 27 Hz, 28 Hz, 29 Hz, 30 Hz.

View exact cell labels and availability →
Power ratiosSurfacesurface.power_ratio.ratio

Absolute power in the first band divided by absolute power in the second band.

Raw: ratio. Z-score: age- and condition-normalized standard deviations.

Selectable columns: Delta / Theta, Delta / Alpha, Delta / Beta, Delta / High Beta, Theta / Alpha, Theta / Beta, Theta / High Beta, Alpha / Beta, Alpha / High Beta, Beta / High Beta.

View exact cell labels and availability →
Peak frequency (spectral centroid)Surfacesurface.peak_frequency.band

Power-weighted mean frequency within a band. This is not the maximum PSD bin and is not peak amplitude.

Raw: Hz. Z-score: age- and condition-normalized standard deviations.

Selectable columns: Delta, Theta, Alpha, Beta, High Beta, Alpha 1, Alpha 2, Beta 1, Beta 2, Beta 3.

View exact cell labels and availability →
Amplitude asymmetrySurfacesurface.amplitude_asymmetry.band

The inherited measure is power-based: 200 × (power A − power B) / (power A + power B). Pair order matters.

Raw: %. Z-score: age- and condition-normalized standard deviations.

Selectable columns: Delta, Theta, Alpha, Beta, High Beta, Alpha 1, Alpha 2, Beta 1, Beta 2, Beta 3.

View exact cell labels and availability →
CoherenceSurfacesurface.coherence.band

Magnitude-squared coherence of pooled band cross-spectra × 100. Linked-ear reference only.

Raw: %. Z-score: age- and condition-normalized standard deviations.

Selectable columns: Delta, Theta, Alpha, Beta, High Beta, Alpha 1, Alpha 2, Beta 1, Beta 2, Beta 3.

View exact cell labels and availability →
Phase lagSurfacesurface.phase_lag.band

Absolute cross-spectral phase angle, not signed phase or time delay. Linked-ear reference only.

Raw: degrees. Z-score: age- and condition-normalized standard deviations.

Selectable columns: Delta, Theta, Alpha, Beta, High Beta, Alpha 1, Alpha 2, Beta 1, Beta 2, Beta 3.

View exact cell labels and availability →
Voxel current-density powerSourcesource.current_density

LORETA voxel power at 2,394 atlas voxels × 30 frequency coordinates (1–30 Hz). Raw scale retains upstream calibration limits; this is not a vector time series.

Raw: calibrated source units. Z-score: age- and condition-normalized standard deviations.

Selectable columns: 1 Hz, 2 Hz, 3 Hz, 4 Hz, 5 Hz, 6 Hz, 7 Hz, 8 Hz, 9 Hz, 10 Hz, 11 Hz, 12 Hz, 13 Hz, 14 Hz, 15 Hz, 16 Hz, 17 Hz, 18 Hz, 19 Hz, 20 Hz, 21 Hz, 22 Hz, 23 Hz, 24 Hz, 25 Hz, 26 Hz, 27 Hz, 28 Hz, 29 Hz, 30 Hz.

View exact cell labels and availability →
LORETA regional absolute powerSourcesource.loreta.power

88 regions: 42 Brodmann areas plus amygdala and hippocampus in each hemisphere. Average-referenced internally. Reconstructed power norms.

Raw: source arbitrary units. Z-score: age- and condition-normalized standard deviations.

Selectable columns: delta, theta, alpha_1, alpha_2, beta_1, beta_2, beta_3, high_beta.

View exact cell labels and availability →
LORETA regional coherenceSourcesource.loreta.coherence

Magnitude (not squared) coherence of Hilbert region signals × 100 across 1,936 catalogued pairs. Average-referenced internally. Z-scores use reconstructed norms; raw coherence is not calibrated to the reference export formula.

Raw: %. Z-score: age- and condition-normalized standard deviations.

Selectable columns: delta, theta, alpha_1, alpha_2, beta_1, beta_2, beta_3, high_beta.

View exact cell labels and availability →
eLORETA regional absolute powerSourcesource.eloreta.power

88 regions: 42 Brodmann areas plus amygdala and hippocampus in each hemisphere. Average-referenced internally. Z-scores use transferred power norms; no native normative cohort.

Raw: source arbitrary units. Z-score: age- and condition-normalized standard deviations.

Selectable columns: delta, theta, alpha_1, alpha_2, beta_1, beta_2, beta_3, high_beta.

View exact cell labels and availability →
eLORETA regional coherenceSourcesource.eloreta.coherence

Magnitude (not squared) coherence of Hilbert region signals × 100 across 1,936 catalogued pairs. Average-referenced internally. Raw only. eLORETA coherence Z-score norms are not bundled.

Raw: %. Z-score: unavailable; no normative table is bundled.

Selectable columns: delta, theta, alpha_1, alpha_2, beta_1, beta_2, beta_3, high_beta.

View exact cell labels and availability →

Frequency bands

Surface spectra use 2-second Hann windows with 75% overlap at 128 Hz after a 1–40 Hz prefilter. Complete windows stay inside retained signal runs. Band-power integration uses a lower-inclusive, upper-exclusive interval. Regional source outputs use their own band-pass filtering and the eight source bands below.

Surface: 10 bands

ColumnHz
Delta1–4
Theta4–8
Alpha8–12
Beta12–25
High Beta25–30
Alpha 18–10
Alpha 210–12
Beta 112–15
Beta 215–18
Beta 318–25

Regional source: 8 bands

ColumnHz
delta1–4
theta4–8
alpha_18–10
alpha_210–12
beta_112–15
beta_215–18
beta_318–25
high_beta25–30

Surface absolute and relative power also provide columns 1 Hz through 30 Hz; each covers [k, k+1) Hz. Voxel current density instead uses 30 frequency coordinates at 1–30 Hz. The ten power ratios are listed in the power-ratio definition above.

Spatial labels

Result labels preserve the normative table’s spelling: acquisition metadata uses Fp1, but its result label uses uppercase FP1. Surface single-electrode labels include their reference, such as FP1-LE or FP1-AVE. Pair labels such as FP1-FP2 retain their documented order. The source atlas contains 2,394 voxel indices; current-density output includes MNI and Talairach coordinates.

Regional source power covers 88 cells: Brodmann areas 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46 and 47, plus amygdala and hippocampus, in each hemisphere. Labels include 7 L, Amy L and Hip R. Source coherence provides the 1,936 pairs in its catalog; this is not every possible combination of 88 regions.

03 / RECORDING INPUT

Upload the signal once.

Create immutable acquisition metadata with a unique Idempotency-Key. Use a pseudonymous participant reference. Required fields and a complete valid example:

POST /v1/recordings
Authorization: Bearer YOUR_API_KEY
Idempotency-Key: recording-001
Content-Type: application/json

{
  "channels": ["Fp1", "Fp2", "F3", "F4", "C3", "C4", "P3", "P4",
    "O1", "O2", "F7", "F8", "T3", "T4", "T5", "T6", "Cz", "Fz", "Pz", "A1", "A2"],
  "sample_rate_hz": 250,
  "units": "uV",
  "dtype": "float32-le",
  "layout": "sample-major",
  "reference": "common",
  "reference_electrode": "CPz",
  "age_years": 30,
  "condition": "EC",
  "started_at": "2026-09-22T10:00:00Z",
  "subject_ref": "participant-042",
  "device_id": "recorder-03",
  "device_model": "your-device-model",
  "acquisition_version": "1.0",
  "line_frequency_hz": 50
}

All 19 scalp electrodes are required; A1/A2 are optional depending on the analysis reference. Map T7/T8/P7/P8 to T3/T4/T5/T6 before upload. Sampling rate is an integer from 128 to 2,000 Hz. Convert ADC values to µV on the client. reference is common, linked_ears or average; a common reference requires its electrode name. Conditions are EC (eyes closed) or EO (eyes open), and the timestamp needs a timezone. Mains frequency is 50 or 60 Hz.

Send binary chunks

PUT /v1/recordings/RECORDING_ID/chunks/0
Authorization: Bearer YOUR_API_KEY
Content-Type: application/octet-stream
X-Start-Sample: 0
X-Content-SHA256: SHA256_OF_DECODED_BYTES

<sample-major little-endian float32 bytes>

Each frame contains every channel in the declared order. Sequence starts at zero. Each encoded and decoded chunk may be at most 1 MiB; optional Content-Encoding: gzip compresses transfer. A recording is limited to 4,096 chunks, 256 MiB and one hour. Out-of-order chunks are accepted; overlaps are rejected.

POST /v1/recordings/RECORDING_ID/seal
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{ "total_chunks": 1, "total_samples": 4000 }

Use your actual totals. At least ten seconds are required. Sealing verifies contiguous sample coverage and makes the recording immutable. Signal upload may stream during acquisition; final screening and analysis begin after sealing.

04 / ARTIFACT SCREENING

One screening request. A shared mask.

POST /v1/artifact-rejection
Authorization: Bearer YOUR_API_KEY
Idempotency-Key: screening-001
Content-Type: application/json

{ "recording_id": "RECORDING_ID" }

The response is HTTP 202 with a job ID and recording ID. NG, Deep, amplitude guard and run hygiene inspect the original waveform and accumulate a union of rejected intervals. File-level amplitude validity can make a recording ineligible for downstream analysis. Poll the job and download artifacts.json from its result manifest.

The result includes original sample rate and length, per-pass rejected counts and retained duration, final retained/rejected intervals, an original-to-retained index map, validity findings and analysis_eligible. No waveform is returned.

{
  "coordinate_system": "original_recording",
  "interval_convention": "[start_sample, stop_sample)",
  "rejected_intervals": [
    { "start_sample": 1000, "stop_sample": 1250,
      "start_seconds": 4.0, "stop_seconds": 5.0 }
  ]
}

This illustrative interval removes samples 1000–1249 from a 250 Hz recording. Apply the final union once to your original local data. If you display successive shortened timelines, use original_to_retained; never reuse original indices directly against an already shortened signal.

For a complete signal no larger than 1 MiB, the same endpoint also accepts a binary body with X-Recording-Metadata containing the metadata JSON and X-Content-SHA256. It stores and seals that signal automatically. Larger or interrupted uploads should use chunks.

05 / REQUEST ONLY WHAT YOU NEED

Select measurements, values and dimensions.

POST /v1/recordings/{id}/analyses reuses the stored recording and its artifact mask. You may submit before screening completes; the job waits. An ineligible or failed screening prevents analysis.

FieldMeaning
artifact_job_idRequired. Screening job for this recording and engine version.
montageLE (default) or AVE for surface/current density. Regional source methods always use average reference internally.
outputsOne to fourteen selections, or "all". Each metric may appear once.
metricExact catalog ID, including surface axis.
values["raw"], ["z"] or ["raw", "z"]. Omit to include available variants.
cellsOptional exact labels from metric detail. Omit for all cells. Voxel indices are strings such as "0".
columnsOptional exact band, ratio or frequency labels. Omit for all columns.
deliveryfiles (default) or bundle to also create a single ZIP.

Example: Alpha absolute-power Z-scores at two electrodes

POST /v1/recordings/RECORDING_ID/analyses
Authorization: Bearer YOUR_API_KEY
Idempotency-Key: alpha-z-001
Content-Type: application/json

{
  "artifact_job_id": "ARTIFACT_JOB_ID",
  "montage": "LE",
  "outputs": [{
    "metric": "surface.absolute_power.band",
    "values": ["z"],
    "cells": ["FP1-LE", "FP2-LE"],
    "columns": ["Alpha"]
  }]
}

Example: Combine surface connectivity with source power

{
  "artifact_job_id": "ARTIFACT_JOB_ID",
  "montage": "LE",
  "outputs": [
    { "metric": "surface.coherence.band", "values": ["raw", "z"],
      "cells": ["FP1-FP2"], "columns": ["Theta", "Alpha"] },
    { "metric": "surface.amplitude_asymmetry.band", "values": ["raw", "z"] },
    { "metric": "source.loreta.power", "values": ["raw", "z"],
      "cells": ["7 L", "7 R"], "columns": ["alpha_1", "alpha_2"] },
    { "metric": "source.eloreta.coherence", "values": ["raw"] }
  ]
}

Example: All supported measurements in one bundle

{
  "artifact_job_id": "ARTIFACT_JOB_ID",
  "montage": "LE",
  "outputs": "all",
  "delivery": "bundle"
}

all includes every available variant for the chosen montage. With AVE, it excludes surface coherence and phase lag. It includes only raw eLORETA coherence. Explicitly asking for an unsupported combination returns 422 instead of silently omitting it.

Example: Only selected voxel Z-scores

{
  "artifact_job_id": "ARTIFACT_JOB_ID",
  "montage": "AVE",
  "outputs": [{
    "metric": "source.current_density",
    "values": ["z"],
    "cells": ["0", "1", "2"],
    "columns": ["8 Hz", "9 Hz", "10 Hz"]
  }]
}

The NPZ contains a 3 × 3 Z-score array and its voxel/frequency coordinates. It contains no raw-value array. Raw values may be calculated internally to derive Z-scores, but unrequested values are not returned.

06 / STRUCTURED OUTPUT

Read one metric or the complete result.

GET /v1/jobs/JOB_ID
GET /v1/jobs/JOB_ID/analytics?metric=surface.absolute_power.band&value=z
GET /v1/jobs/JOB_ID/analytics?metric=surface.coherence.band&metric=source.loreta.power
GET /v1/jobs/JOB_ID/analytics

These requests require your Bearer key. Repeat metric and value to choose several. Omit both to return every computed measurement in one JSON response, including voxel arrays. This endpoint only retrieves results already computed in that job. It does not rerun analysis; missing measurements or value variants return 422. Submit a new selection against the same recording when you need additional computations.

Values are split into surface.raw, surface.z, and each source method’s raw/z objects. Surface paths continue as measurement → axis → cell → column. Regional source paths continue as power/coherence → region/pair → band. Example structure with illustrative numbers:

{
  "schema_version": "2.0",
  "recording_id": "RECORDING_ID",
  "artifact_job_id": "ARTIFACT_JOB_ID",
  "job_id": "JOB_ID",
  "surface": {
    "raw": { "absolute_power": { "band": { "FP1-LE": { "Alpha": 12.4 } } } },
    "z":   { "absolute_power": { "band": { "FP1-LE": { "Alpha": 0.7 } } } }
  },
  "source": {
    "loreta": {
      "reference": "average",
      "calibration": "reconstructed",
      "raw": { "power": { "7 L": { "alpha_1": 8.2 } } },
      "z":   { "power": { "7 L": { "alpha_1": -0.3 } } }
    }
  }
}

Actual responses also include the normalized selection, age/bin, condition, reference, retained intervals, processing rate, pipeline and asset versions, and applicable method limitations. Raw-only responses omit z values; Z-score-only responses omit raw values. Unavailable numeric values are JSON null, never fabricated zeros.

File downloads and one-file delivery

FileContents
analytics.jsonSelected surface/regional tables and metadata. For current density, it contains a descriptor of the NPZ, dimensions and selected coordinates.
current_density.npzOnly requested raw/z arrays, plus frequency_hz, voxel_index, mni_xyz and talairach_xyz.
analytics.zipAvailable with delivery=bundle. Contains the finalized JSON and any selected NPZ arrays for a single resumable download.

Use the job manifest’s exact download URLs, SHA-256 and byte counts. For large voxel results, NPZ or ZIP is more compact than expanded JSON. Read NPZ with numpy.load(..., allow_pickle=False); binary arrays preserve NaN where values are undefined. ZIP JSON references its sibling NPZ. Selective JSON retrieval expands the requested voxel arrays into source.current_density.raw/z and includes coordinate arrays.

Python client

from taraaz.client import Client

client = Client(BASE_URL, API_KEY)
catalog = client.metrics(montage="LE")
job = client.analyze(
    recording_id, artifact_job_id,
    idempotency_key="alpha-z-001",
    outputs=[{"metric": "surface.absolute_power.band", "values": ["z"]}],
)
# Wait until client.job(job["id"])["state"] == "succeeded".
result = client.analytics(job["id"], metrics=["surface.absolute_power.band"], values=["z"])
client.close()

07 / CONNECTION RECOVERY

Resume from acknowledged work.

  • Persist the recording ID, original bytes and idempotency keys locally. Retry the same creation/submission payload with the same key after a timeout.
  • Use GET /v1/recordings/{id}?after=-1&limit=256 to inspect acknowledged chunks. Continue from the last sequence until a page is empty. Resend only missing chunks.
  • An identical chunk retry returns duplicate: true. A changed payload or offset under the same sequence returns 409.
  • Poll jobs with If-None-Match, honor Retry-After, or read event cursors with GET /v1/jobs/{id}/events?after=EVENT_ID.
  • Resume file downloads with Range: bytes=OFFSET- and If-Range set to the file’s quoted SHA-256 ETag. Verify the complete checksum afterward.
  • The selective JSON endpoint supports ETags and optional gzip. Its responses do not support byte-range resumption; use the immutable manifest files when resuming matters.

08 / REFERENCES & NORMS

Interpret each result in context.

Surface and voxel current density: choose LE or AVE. LE requires measured A1 and A2 channels, or input explicitly marked as already linked-ear referenced. Surface coherence and phase lag are exposed only for LE. Regional LORETA/eLORETA: internally average-referenced regardless of the requested montage; the result states reference: average.

Z-scores use the recording’s age and EC/EO condition. Ages must be at least 1 and below 100. Supported bins are 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15-16, 17-19, 20-24, 25-29, 30-34, 35-44, 45-99. Age is floored to whole years for bin selection. Ages 45–99 share one bin. A Z-score applies the stored metric-specific transform, subtracts its normative mean and divides by its normative standard deviation; it is not necessarily (raw − mean) / SD in untransformed units.

The bundled norms are reconstructed from reference exports. Regional source absolute scaling and LORETA coherence retain calibration limitations. eLORETA power uses transferred norms; eLORETA coherence has no Z-score norms. Current density reports calibrated source power, not physical vector currents. These distinctions apply to interpretation and comparison with other systems.

09 / ERRORS & COMPATIBILITY

Explicit failures, predictable selections.

StatusMeaning
401Missing, invalid, revoked or suspended-account key.
404Unknown recording/job/file, including another account’s data.
409Conflicting idempotency key, incomplete upload, unfinished analysis, incompatible mask, or legacy job without selective analytics.
413Signal/chunk/recording limits exceeded.
415Unsupported content type or content encoding.
422Invalid metadata, metric, variant, cell/column label or checksum; requested output not present in the completed job.
507Account recording or signal-storage capacity reached. Preserve the local signal and contact the administrator.
408 / 429 / 500 / 502 / 503 / 504Transient errors may be retried with bounded exponential backoff and jitter. A failed checksum on a stored result requires service investigation if persistent.

Jobs move through queued, running, succeeded or failed. Inspect the job error after failure. A failed or ineligible artifact dependency never falls back to unchecked EEG.

Existing clients may continue sending measures: ["surface", "current_density", "loreta", "eloreta"]. They keep their original separate files and {raw,z} cells. Do not combine measures with outputs. The new organized schema, selective retrieval and ZIP option require outputs. Unknown selectors are never ignored.