Skip to content
AmplifierDocs
Esc
↑↓navigate↵open⌘Jpreview
On this page

API Reference

Base URL, authentication, limits, and the endpoint map.

Resource What it does
Model API List named bundles, get one bundle, or submit audio to a bundle. When the job is done, result has summary, signals[], audio_quality, and extended_metrics.
Sign API List standalone signs, get one sign, or submit audio for one sign. When done, result has signal and audio_quality.
Jobs API List jobs on the account, or retrieve one job (including its completed result).
Audio Uploads Mint a signed PUT URL (upload_ref + required_headers), PUT the file, then pass that ref as audio_upload_ref on analyze instead of multipart audio.
Groups API Create, list, and delete groups; add or remove jobs. Does not run analysis.
Longitudinal API Analyze into a group (raw or vs history); read a subject’s trajectory; read a cohort aggregate.
Account API Set the account webhook; read remaining credits. API keys are created in the console, not via these endpoints.

Analyze calls are asynchronous: they return a job immediately. Read it from Jobs API or a webhook — Jobs, Polling, and Webhooks.

Base URL

https://api.amplifierhealth.com

Endpoints use the /v2 prefix — for example /v2/models/pulse/analyze.

Authentication

All requests require two headers.

Header Description
X-Account-ID Your account identifier
X-API-Key Your API key

Sign up at console.amplifierhealth.com, open the console, and create an API key: API Keys → Provide Name for Key → Create Key. Your account ID is shown in the console. See Quickstart for the full walkthrough.

curl -X GET "https://api.amplifierhealth.com/v2/account/credits" \
  -H "X-Account-ID: your-account-id" \
  -H "X-API-Key: your-api-key"
const response = await fetch("https://api.amplifierhealth.com/v2/account/credits", {
  headers: {
    "X-Account-ID": process.env.AMPLIFIER_ACCOUNT_ID,
    "X-API-Key": process.env.AMPLIFIER_API_KEY,
  },
});

const data = await response.json();
# Requires httpx: pip install httpx
import os
import httpx

response = httpx.get(
  "https://api.amplifierhealth.com/v2/account/credits",
  headers={
      "X-Account-ID": os.environ["AMPLIFIER_ACCOUNT_ID"],
      "X-API-Key": os.environ["AMPLIFIER_API_KEY"],
  },
)

data = response.json()

Request and response conventions

  • All endpoints return JSON.
  • Analyze endpoints accept Content-Type: multipart/form-data. JSON bodies: POST /v2/audio/uploads, Groups create/membership, and POST /v2/account/webhook. GET endpoints have no body.
  • Analyze submit and GET /v2/jobs/{job_id} return HTTP 200 with a job object. POST /v2/groups returns 201 Created. Trajectory and aggregate GETs return a running / done envelope, not a job — see Longitudinal API.
  • A job’s outcome is in status (queued, running, done, failed, timed-out), not only HTTP codes. See Jobs API.
  • Field definitions: Response Schema. Enumerated values: Enumerations.
  • Errors: HTTP status plus JSON code, message, and status. See Errors.

Model versions

Note The model_version parameter is available starting November 5, 2026.

A model version names the release of the analysis models that scores your audio. Versions are written X.Y.Z with digits only, for example 2.0.0. Two versions are available: 2.0.0 and 2.1.0. 2.0.0 is the default.

Pin a version

To pin a request (fix it to one version), send the optional model_version form field on an analyze call.

You send What happens
No model_version, or an empty value The current default version (2.0.0) runs. Requests you already send behave exactly as before.
model_version=2.0.0 That version runs.
Any other value The request is rejected with 400 and one of the error codes below. No job is created.

The value must be three numbers separated by dots. A v prefix (v2.0.0), two-part versions (2.0), and surrounding spaces are rejected.

The field is accepted on these analyze calls:

Read the version on a job

Every job response and webhook payload includes model_version: the version the job was submitted with. If you omitted the field, it holds the default version that ran. It is null for jobs created before model versions were introduced. See Response Schema.

Groups

A group’s model version is fixed when the group is created and never changes. Create a group with the optional model_version field on POST /v2/groups, or let the first analyze call into a new group_id create it: that call’s model_version, if sent, becomes the group’s version. If neither sends one, the group gets the current default version. Groups created before November 10, 2026 stay on 2.0.0.

On a group call, model_version is optional. Omitted means the group’s version. A different version returns 400 GROUP_VERSION_MISMATCH. Adding existing jobs with POST /v2/groups/{group_id}/jobs is rejected the same way if any listed job ran on a different version than the group. GET /v2/groups returns each group’s model_version.

Model version errors

All of these are 400 responses. They are not transient, so do not retry them unchanged. A rejected request creates no job.

Code Cause What to do
INVALID_MODEL_VERSION The value is not in X.Y.Z form. Send three dot-separated numbers, or omit the field.
UNKNOWN_MODEL_VERSION The value is well formed but is not an available version. The message lists the available versions. Use a version from the message, or omit the field.
GROUP_VERSION_MISMATCH A group call sent a model_version that is not the group’s version, or POST /v2/groups/{group_id}/jobs listed jobs that ran on a different version than the group. Omit model_version on group calls, or send the group’s version. Remove the listed jobs from the add request.
GROUP_UNSUPPORTED_MODEL_VERSION Deprecated. The API no longer returns this code. Group calls now return GROUP_VERSION_MISMATCH. The code name stays reserved for one more release. None.

Exact message text is on Errors.

Release 2.1.0

Note Release 2.1.0 is available now. Send model_version=2.1.0 on the single-audio analyze calls to use it. The default is still 2.0.0.

Date What happens
November 6, 2026 2.1.0 became available. Send model_version=2.1.0 to use it. The default stays 2.0.0.
November 6 to November 18, 2026 Requests that send no model_version run 2.0.0.
November 18, 2026 2.1.0 becomes the default. Requests that send no model_version run 2.1.0.

Results can differ between 2.0.0 and 2.1.0 for the same audio. From November 18, 2026, calls that send no model_version get 2.1.0. To stay on 2.0.0, send model_version=2.0.0 on every analyze call.

What changes in 2.1.0:

  • Two new optional form fields for the speaker’s age and sex. Requests without them still work.
  • No new use cases, conditions, models, or signs. The catalog is the same as in 2.0.0.
  • No response field or enumeration value changes.

Speaker age and sex

Field Type Values Meaning
provided_age number 0 to 130 The speaker’s age in years. A number outside that range returns 400.
provided_sex string female or male The speaker’s sex assigned at birth. Send exactly female or male, in lowercase — any other spelling returns 400.

Both fields are optional. Send either one, both, or neither. They are accepted on every analyze call:

They need model version 2.1.0 or later. A request that sends either field and runs 2.0.0 returns 400 and creates no job. For a group call, that means the group is on 2.0.0. Send model_version=2.1.0 with them on single-audio calls. provided_age and provided_sex work on groups pinned to 2.1.0 or later. A bad value returns 400 on any version. The codes are PARAM_REQUIRES_MODEL_VERSION, INVALID_PROVIDED_AGE, and INVALID_PROVIDED_SEX — see Errors.

Group calls follow the group’s version, so you do not need to send model_version with these fields. To use them in a group, create the group with model_version 2.1.0. Groups pinned to 2.0.0 reject them.

Compatibility

The parameter is additive. Requests that do not send model_version are unchanged. One case differs: if your client already sent a form field named model_version, the API ignored it before. It is now validated, so a value that is not an available version in X.Y.Z form returns 400.

Limits

Limit Value
Maximum audio file size 32 MB per upload
Maximum audio duration 20 minutes (1200 seconds)
Minimum audio duration 15 seconds
Supported formats WAV, FLAC, MP3, M4A

For longer recordings, MP3 or FLAC typically keep file size under the 32 MB limit. See Audio Requirements for recording guidance.

Rate limits

The API enforces per-account rate limits using a sliding 60-second window. Limits vary by rate limit plan:

Plan General endpoints Upload / analyze endpoints Job status polling
Standard (default) 10 requests/min 5 requests/min 30 requests/min
Enterprise 1,000 requests/min 500 requests/min 1,000 requests/min

Upload / analyze endpoints: POST /v2/audio/uploads; POST /v2/models/{model_name}/analyze; POST /v2/signs/{sign_name}/analyze; the four group-aware analyze routes on the Longitudinal API (.../analyze and .../analyze/longitudinal for models and signs).

Job status polling: GET /v2/jobs/{job_id} has its own limit, sized for the recommended 2–5 second polling cadence described in Jobs, Polling, and Webhooks.

General endpoints (everything else documented here): catalog reads (GET /v2/models, GET /v2/signs, and their {name} variants), GET /v2/jobs, GET /v2/account/credits, POST /v2/account/webhook, Groups API lifecycle and membership, and GET /v2/groups/{group_id}/longitudinal plus GET /v2/groups/{group_id}/aggregate.

When a rate limit is exceeded, the API returns 429 Too Many Requests with a Retry-After header indicating seconds until the window resets. See Errors for retry guidance.

To request rate limit changes, contact sales@amplifierhealth.com.

Endpoints by resource

Page Endpoints
Model API GET /v2/models, GET /v2/models/{model_name}, POST /v2/models/{model_name}/analyze
Sign API GET /v2/signs, GET /v2/signs/{sign_name}, POST /v2/signs/{sign_name}/analyze
Jobs API GET /v2/jobs, GET /v2/jobs/{job_id}
Groups API POST /v2/groups, GET /v2/groups, DELETE /v2/groups/{group_id}, GET /v2/groups/{group_id}/jobs, POST /v2/groups/{group_id}/jobs, DELETE /v2/groups/{group_id}/jobs/{job_id}
Longitudinal API POST .../groups/{group_id}/analyze, POST .../analyze/longitudinal (model and sign), GET /v2/groups/{group_id}/longitudinal, GET /v2/groups/{group_id}/aggregate
Account API POST /v2/account/webhook, GET /v2/account/credits
Audio Uploads POST /v2/audio/uploads

Shared lookups: Response Schema, Enumerations, Errors.

Was this page helpful?