---
title: Quickstart
description: Create an account, get credentials, and make one successful analyze call.
type: doc
icon: rocket
sidebar:
  label: Quickstart
  order: 1
  icon: rocket
search:
  tags: [start, api]
---
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](https://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](/reference#authentication).

## Step 3 — Submit audio

POST to `/v2/models/{model_name}/analyze` with `multipart/form-data`:

- Headers: `X-Account-ID` and `X-API-Key`
- The model name goes in the URL path; the only form field needed is the recording file as `audio`

<CodeGroup param="lang">

```bash cURL
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"
```

```javascript JavaScript
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();
```

```python Python
# 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()
```

</CodeGroup>

Valid model names and optional fields (diarization, per-request webhooks): [Model API](/reference/models).

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](/guides/audio-requirements#file-size).

The response returns immediately with the job object. `status` is `queued` and `result` is `null` until processing completes:

```json
{
  "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](/reference#rate-limits). For the full lifecycle, including webhook delivery, see [Jobs, Polling, and Webhooks](/guides/jobs).

<CodeGroup param="lang">

```bash cURL
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"
```

```javascript JavaScript
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();
```

```python Python
# 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()
```

</CodeGroup>

## Result

Wellness model (`pulse`) job with elevated stress and anxiety indicators:

```json
{
  "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_action` is `escalate` — trigger your EAP or wellness escalation workflow.
- `job.result.summary.primary_signals` lists the top contributors: `stress`, `anxiety`.
- `job.result.summary.description.summary` is 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_features` lists the acoustic measurements that informed the summary — use `label` and `value_interpretation` for display, and keep `feature` for internal use.
- In `job.result.signals`, use `level` and `flagged` to decide what to show. UI: `level` and `label`. Internal: `score`. Labels: [Display guidelines](/guides/interpreting-results#display-guidelines).
- `job.result.audio_quality.issues` is empty — the recording met quality standards.
- `job.result.extended_metrics` contains 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](/reference/response-schema#timestamps). Jobs that end without a result (`result`, HTTP `200`): [Job status: failed](/reference/response-schema#job-status-failed).

`audio_quality` fields (`issues`, `voice_percentage`, `audio_clarity`): [Response Schema — `audio_quality`](/reference/response-schema#audio_quality-object). Issue codes and what to do about them: [Audio quality issue codes](/guides/audio-requirements#audio-quality-issue-codes).

## Next steps

- [Choosing a Model or Sign](/guides/choosing-a-model-or-sign) — pick the name that matches your population.
- [Audio Requirements](/guides/audio-requirements) — formats, duration, and recording environment.
- [Interpreting Results](/guides/interpreting-results) — levels, actions, and display rules.
- [Rate limits](/reference#rate-limits) — per-account limits and `Retry-After` behavior.
