Quickstart
Create an account, get credentials, and make one successful analyze call.
Walkthrough uses pulse (General Wellness). Other models: same request shape; change the path name and the signals in the result.
Step 1 — Create an account
Sign up at console.amplifierhealth.com, verify your email, and sign in to the console.
Step 2 — Get your credentials
In the console, copy your account ID and create an API key: API Keys → Provide Name for Key → Create Key. Send them as the X-Account-ID and X-API-Key headers on every request. Store the API key in an environment variable or a secrets manager rather than committing it to source control. See Authentication.
Step 3 — Submit audio
POST to /v2/models/{model_name}/analyze with multipart/form-data:
- Headers:
X-Account-IDandX-API-Key - The model name goes in the URL path; the only form field needed is the recording file as
audio
curl -X POST https://api.amplifierhealth.com/v2/models/pulse/analyze \
-H "X-Account-ID: your-account-id" \
-H "X-API-Key: your-api-key" \
-F "audio=@recording.wav;type=audio/wav"const fs = require("fs");
const form = new FormData();
form.append("audio", new Blob([fs.readFileSync("recording.wav")], { type: "audio/wav" }), "recording.wav");
const response = await fetch("https://api.amplifierhealth.com/v2/models/pulse/analyze", {
method: "POST",
headers: {
"X-Account-ID": process.env.AMPLIFIER_ACCOUNT_ID,
"X-API-Key": process.env.AMPLIFIER_API_KEY,
},
body: form,
});
const data = await response.json();# Requires httpx: pip install httpx
import os
import httpx
with open("recording.wav", "rb") as f:
audio_bytes = f.read()
response = httpx.post(
"https://api.amplifierhealth.com/v2/models/pulse/analyze",
headers={
"X-Account-ID": os.environ["AMPLIFIER_ACCOUNT_ID"],
"X-API-Key": os.environ["AMPLIFIER_API_KEY"],
},
files={"audio": ("recording.wav", audio_bytes, "audio/wav")},
)
data = response.json()Valid model names and optional fields (diarization, per-request webhooks): Model API.
Each file must be 32 MB or smaller. For longer recordings, prefer MP3 or FLAC so the file stays under the limit — details in Audio Requirements.
The response returns immediately with the job object. status is queued and result is null until processing completes:
{
"job_id": "189bce4a-52cb-4e60-8586-cef89e719109",
"status": "queued",
"created_at": "2026-02-22T09:14:00Z",
"completed_at": null,
"result": null,
"audio_content_type": "audio/wav",
"audio_size_bytes": 876032,
"audio_duration_seconds": 27.4,
"audio_sample_rate": 16000,
"job_type": "model",
"api_version": "v2",
"model_name": "pulse"
}
Step 4 — Retrieve the result
Use the job_id from Step 3 with GET /v2/jobs/{job_id}.
Poll at 2–5 second intervals. Most jobs complete within a few seconds; longer recordings may take up to 30 seconds. This cadence fits within the job status polling rate limit. For the full lifecycle, including webhook delivery, see Jobs, Polling, and Webhooks.
curl https://api.amplifierhealth.com/v2/jobs/189bce4a-52cb-4e60-8586-cef89e719109 \
-H "X-Account-ID: your-account-id" \
-H "X-API-Key: your-api-key"const response = await fetch("https://api.amplifierhealth.com/v2/jobs/189bce4a-52cb-4e60-8586-cef89e719109", {
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/jobs/189bce4a-52cb-4e60-8586-cef89e719109",
headers={
"X-Account-ID": os.environ["AMPLIFIER_ACCOUNT_ID"],
"X-API-Key": os.environ["AMPLIFIER_API_KEY"],
},
)
data = response.json()Result
Wellness model (pulse) job with elevated stress and anxiety indicators:
{
"job_id": "189bce4a-52cb-4e60-8586-cef89e719109",
"status": "done",
"created_at": "2026-02-22T09:14:00Z",
"completed_at": "2026-02-22T09:14:03Z",
"job_type": "model",
"api_version": "v2",
"model_name": "pulse",
"audio_content_type": "audio/wav",
"audio_size_bytes": 876032,
"audio_duration_seconds": 27.4,
"audio_sample_rate": 16000,
"result": {
"summary": {
"overall_level": "elevated",
"recommended_action": "escalate",
"flagged_count": 3,
"primary_signals": ["stress", "anxiety", "fatigue"],
"description": {
"summary": "Voice patterns suggest elevated indicators for stress and anxiety. Speech rate and rhythmic patterns were notably different from typical patterns.",
"vocal_features": [
{
"feature": "speech_rate",
"label": "Speech Rate",
"value": 3.2,
"unit": "syllables/s",
"value_interpretation": "reduced"
}
]
}
},
"signals": [
{"name": "stress", "label": "Stress", "score": 0.81, "level": "elevated", "flagged": true},
{"name": "anxiety", "label": "Anxiety", "score": 0.71, "level": "elevated", "flagged": true},
{"name": "fatigue", "label": "Fatigue", "score": 0.54, "level": "consider", "flagged": true}
],
"audio_quality": {
"issues": [],
"voice_percentage": 82.4,
"audio_clarity": 74.1
},
"extended_metrics": [
{
"metric_id": "anxious-mood",
"label": "Anxious Mood",
"score_mean": 0.72,
"score_std": 0.08,
"low_anchor": "tranquil",
"high_anchor": "panicked"
}
]
}
}
Reading this response
job.result.summary.recommended_actionisescalate— trigger your EAP or wellness escalation workflow.job.result.summary.primary_signalslists the top contributors:stress,anxiety.job.result.summary.description.summaryis a narrative of the voice findings — surface it to qualified staff as supporting context, and keep it out of automated alerts and employee-facing output.job.result.summary.description.vocal_featureslists the acoustic measurements that informed the summary — uselabelandvalue_interpretationfor display, and keepfeaturefor internal use.- In
job.result.signals, uselevelandflaggedto decide what to show. UI:levelandlabel. Internal:score. Labels: Display guidelines. job.result.audio_quality.issuesis empty — the recording met quality standards.job.result.extended_metricscontains dimension scores for the model bundle.
Timestamps and edge cases
Parse timestamps with an ISO 8601-compatible library. The API may return timestamps with or without fractional seconds and with varying timezone designators.
Job datetimes (created_at, completed_at): Response Schema — Timestamps. Jobs that end without a result (result, HTTP 200): Job status: failed.
audio_quality fields (issues, voice_percentage, audio_clarity): Response Schema — audio_quality. Issue codes and what to do about them: Audio quality issue codes.
Next steps
- Choosing a Model or Sign — pick the name that matches your population.
- Audio Requirements — formats, duration, and recording environment.
- Interpreting Results — levels, actions, and display rules.
- Rate limits — per-account limits and
Retry-Afterbehavior.