LiveDigital MSE™ API is now availableRead the docs

API Reference

Attunio Clinical Intelligence API

On this page

Quickstart

One authenticated POST turns the timing telemetry you already collect into structured, clinician-reviewable Digital MSE™ signals. Grab a test key from your developer dashboard, send the request below, and read the response — no SDK required.

1 · Send signals

POST /v1/dmse/analyze
curl https://attuniohealth.com/api/v1/dmse/analyze \
  -H "Authorization: Bearer att_sk_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "responseLatencySeconds": 2.6,
    "speechRateWpm": 98,
    "psychomotorFidgetEpisodes": 4,
    "sustainedAttentionPct": 66
  }'

2 · Get intelligence back

200 OK
{
  "ok": true,
  "data": {
    "object": "dmse.analysis",
    "signalsPresent": 4,
    "overallConfidence": "high",
    "signals": [
      {
        "signalKey": "response_latency",
        "metricValue": 2.6,
        "interpretation": "clinical_attention",
        "mseLine": "Speech: increased response latency (avg ~2.6s)."
      }
      // ... psychomotor, speech_rate, sustained_attention
    ],
    "mseNarrative": ["Speech: increased response latency (avg ~2.6s).", "..."]
  }
}

That is the entire loop. The full field reference, the other four intelligence endpoints, errors, and rate limits are documented below.

Why Attunio — instead of building it yourself

Every endpoint is a deterministic, explainable engine, not a black box. You could wire up your own heuristics — here is what you would have to build, validate, and maintain to match what ships today.

Validated clinical thresholds

Every signal fires against thresholds grounded in clinical literature and tuned on real visit data — not arbitrary cutoffs you would have to defend in a chart review.

MSE-mapped outputs

Outputs map directly to mental-status-exam language clinicians already document, so results drop into existing workflows instead of becoming another uninterpretable score.

Longitudinal baselines & trend

Send patient history and each signal is contextualized against that person's own baseline with mean, SD, and trend direction — the longitudinal layer is the hard part to build well.

HIPAA-ready by construction

No raw audio or video is ever accepted or stored, traffic is TLS 1.3, and every output is decision support for clinician review — never an autonomous diagnosis.

A suite, not a single call

Digital MSE™ is API #1. Medication, Biomarker, Outcome, and Relapse Intelligence reuse the same auth and envelope, so you integrate once and grow into the rest.

Maintained & versioned for you

Threshold updates, new biomarkers, and model improvements ship behind a stable, forward-compatible contract — you get the upgrades without re-validating your own engine.

Overview

The Attunio Clinical Intelligence API is a secure, RESTful service for high-throughput, real-time behavioral telemetry processing. It accepts structured speech- and movement-timing metrics from third-party video visits and returns Digital MSE™ output: four structured signals, an MSE narrative, confidence, and optional per-patient baseline and trend.

Data minimization. The API strictly processes downstream structured numerical tracking coordinates and speech-cadence vectors. No raw video or audio files are ever accepted, stored, or written to disk. Output is decision support for clinician review — not an autonomous diagnosis, biometric ML, or affect recognition.

Base URL: https://attuniohealth.com/api/v1

Intelligence suite

The platform is organized as a suite of clinical-intelligence products that share one authentication model and one response envelope. All five products are live and callable today, each backed by a deterministic, explainable engine — every signal is traceable to its source data, never a black-box prediction. Reference docs for each endpoint follow below.

ProductStatusEndpointWhat it does
Digital MSE™LivePOST /v1/dmse/analyzeSpeech & movement timing → mental-status-exam signals.
Medication Intelligence™LivePOST /v1/medication/analyzeAdherence & response patterns from medication history.
Biomarker Intelligence™LivePOST /v1/biomarker/analyzeLabs & wearable biomarkers, contextualized.
Outcome Intelligence™LivePOST /v1/outcome/scoreSymptom scales → outcome trajectories.
Relapse Prediction™LivePOST /v1/relapse/predictMulti-signal early-warning system.

Authentication

Authenticate every request with an API key issued from your developer dashboard. Pass it as a Bearer token. Keys are shown once at creation — store them securely and never embed them in client-side code.

Header
Authorization: Bearer att_sk_live_a1b2c3d4e5f6...

Test keys (att_sk_test_…) run against the sandbox; live keys (att_sk_live_…) are issued to production apps.

Publishable keys (browser)

Secret keys (att_sk_…) carry full API access and must stay server-side. To call the API directly from the browser — for example from a capture SDK running inside a telehealth video session — use a publishable key (att_pk_…) instead.

Publishable keys are deliberately constrained so they're safe to ship to the client:

  • They can only call POST /v1/dmse/analyze. Every other endpoint returns 403 forbidden.
  • They're honored only when the request Originis in the key's allow-list, which you manage in the dashboard. A leaked key can't be used from any other site.
  • The endpoint supports CORS preflight, so browser requests work without a proxy.
Browser fetch
// Runs in the browser — publishable keys are safe to ship to the client.
// The key only works from origins you allow-list in the dashboard.
const res = await fetch("https://attuniohealth.com/api/v1/dmse/analyze", {
  method: "POST",
  headers: {
    "Authorization": "Bearer att_pk_live_xxx",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    responseLatencySeconds: 2.6,
    speechRateWpm: 98,
    psychomotorFidgetEpisodes: 4,
    sustainedAttentionPct: 66,
  }),
})

const { data } = await res.json()

A request from an origin that isn't allow-listed is rejected:

403 Forbidden
{
  "ok": false,
  "error": {
    "code": "forbidden",
    "message": "This origin is not allowed for this publishable key. Add it to the key's allowed origins in the developer dashboard."
  }
}

Note: raw audio and video never touch Attunio. Extraction happens on-device; only the derived timing telemetry shown above is sent to the API.

Capture SDK (@attunio/capture)

The capture SDK is the fastest way to go from a telehealth video session to Digital MSE™ signals. It takes the WebRTC MediaStream your platform already produces, extracts speech rate and response latency on-device, and calls /v1/dmse/analyze with a publishable key. Raw audio never leaves the browser.

Install
npm install @attunio/capture
Basic usage
import { AttunioSession, fromUserMedia } from '@attunio/capture'

// Publishable key — safe to ship in browser code.
const session = new AttunioSession({ publishableKey: 'att_pk_live_xxx' })

// Any WebRTC MediaStream works. Here: the patient's mic.
const stream = await fromUserMedia({ audio: true })
session.attach(stream)               // audio is processed on-device

// speech rate + response latency are extracted locally.
// Optionally merge in video-derived signals you already compute:
session.setVideoSignals({ psychomotorFidgetEpisodes: 4, sustainedAttentionPct: 72 })

const dmse = await session.analyze() // POSTs derived numbers, returns Digital MSE
session.stop()

Video-derived signals (psychomotor episodes, sustained attention) are not extracted in the browser today — they are API-only. If your own pipeline produces them, pass them through with setVideoSignals()and they're merged into the same call.

Each platform integration is just a one-liner that resolves the stream — the on-device extraction is identical everywhere:

Platform adapters
// Each platform just resolves the MediaStream you already hold:
import {
  fromZoomTracks,    // Zoom Apps SDK media tracks
  fromDailyParticipant, // Daily local participant
  fromTwilioTracks,  // Twilio LocalAudioTrack / LocalVideoTrack
  fromVonagePublisher,  // Vonage / OpenTok publisher
  streamFromTracks,  // compose from raw MediaStreamTracks
} from '@attunio/capture'

session.attach(fromDailyParticipant(call.participants().local))

Want to see it work? Run the live demo — it captures your microphone and returns real Digital MSE output. For platform-by-platform setup, see Integrations.

Health check — GET /v1/ping

Confirms your key and connectivity before sending telemetry.

GET /v1/ping
curl https://attuniohealth.com/api/v1/ping \
  -H "Authorization: Bearer att_sk_test_xxx"

Analyze telemetry — POST /v1/dmse/analyze

Submit timing telemetry for a single session. Provide at least one metric; supply more for a fuller mental-status picture, and include history to unlock baseline and trend.

Request
curl https://attuniohealth.com/api/v1/dmse/analyze \
  -H "Authorization: Bearer att_sk_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "responseLatencySeconds": 2.6,
    "speechRateWpm": 98,
    "psychomotorFidgetEpisodes": 4,
    "sustainedAttentionPct": 66,
    "sessionDurationSeconds": 540,
    "history": {
      "response_latency": [3.1, 2.9, 2.7]
    },
    "sessionRef": "visit_8841"
  }'
200 OK
{
  "ok": true,
  "data": {
    "object": "dmse.analysis",
    "sessionRef": "visit_8841",
    "generatedAt": "2026-06-28T15:04:05.000Z",
    "signalsPresent": 4,
    "overallConfidence": "high",
    "signals": [
      {
        "signalKey": "response_latency",
        "label": "Response latency",
        "present": true,
        "metricValue": 2.6,
        "metricUnit": "s",
        "interpretation": "clinical_attention",
        "detail": "Markedly delayed response latency (avg 2.6s).",
        "confidence": "high",
        "trendDir": "down",
        "mseLine": "Speech: increased response latency (avg ~2.6s).",
        "baseline": { "mean": 2.9, "sd": 0.2, "n": 3 }
      }
      // ... psychomotor, speech_rate, sustained_attention
    ],
    "mseNarrative": [
      "Speech: increased response latency (avg ~2.6s).",
      "Psychomotor: psychomotor agitation (4 fidget episodes during session)."
    ],
    "disclaimer": "Deterministic, rules-based decision support derived from numerical timing metrics. Not biometric ML, affect recognition, or an autonomous diagnosis. For clinician review only."
  }
}

Request fields

FieldTypeDescription
psychomotorFidgetEpisodesnumberDiscrete fidget / motor-restlessness episodes counted during the session (0–1000).
responseLatencySecondsnumberMean conversational response latency in seconds (0–120).
speechRateWpmnumberMean speech rate in words per minute (0–600).
sustainedAttentionPctnumberShare of session with gaze on-screen, 0–100.
sessionDurationSecondsnumberOptional. Session length; longer sessions raise confidence.
historyobjectOptional. Arrays of prior values keyed by signal (psychomotor, response_latency, speech_rate, sustained_attention) for baseline + trend.
sessionRefstringOptional. Your correlation id, echoed back. Never stored.

Shared objects

The Medication, Outcome, and Relapse endpoints accept the same Assessment objects, Medication accepts Prescription objects, and Biomarker accepts Lab panel objects containing Biomarker readings. They are documented once here and referenced from each endpoint below. All date fields are ISO-8601 strings; ? marks an optional field.

Assessment object

FieldTypeDescription
instrumentIdstringStable id for the instrument, e.g. "phq9". 1–64 chars.
instrumentNamestringHuman-readable name, e.g. "PHQ-9". 1–120 chars.
scorenumberRaw score for this administration. 0–1000.
maxScorenumberMaximum possible score for the instrument. 1–1000.
severitystring?Optional severity band, e.g. "moderately severe".
createdAtISO dateWhen the assessment was administered.

Prescription object

FieldTypeDescription
idstringYour prescription id; echoed back as the signal's sourceRef.
medicationNamestringMedication name, e.g. "Sertraline". 1–160 chars.
dosagestring?Optional dosage, e.g. "50mg".
frequencystring?Optional frequency, e.g. "daily".
statusstringPrescription status, e.g. "active" or "discontinued".
prescribedAtISO date?When the medication started. Anchors the before/after symptom comparison.

Lab panel object

FieldTypeDescription
idstringYour lab/panel id; echoed back as the signal's sourceRef.
labNamestringLab or panel name, e.g. "Quest Diagnostics". 1–160 chars.
observedAtISO date?When the panel was drawn or observed.
results.biomarkersBiomarker[]Up to 200 biomarker readings (see Biomarker object).

Biomarker object

FieldTypeDescription
namestringBiomarker name, e.g. "TSH". 1–120 chars.
valuenumber | string | nullThe measured value.
unitstring?Unit of measure, e.g. "mIU/L".
flagstring?"high" | "low" | "critical" | "normal". Only abnormal flags produce a signal.
referenceRangestring?Reference range string, e.g. "0.4-4.0".
notestring?Optional free-text note (≤240 chars).

Medication Intelligence™ — POST /v1/medication/analyze

Correlates each active prescription's start date with the symptom-scale trajectory of the most-covered instrument (before vs. after the med started), plus an optional Digital MSE™ latency change, to produce explainable response and monitoring signals. Send prescriptions, assessments, and optionally dmseLatencyPctChange.

Request
curl https://attuniohealth.com/api/v1/medication/analyze \
  -H "Authorization: Bearer att_sk_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "prescriptions": [
      {
        "id": "rx_001",
        "medicationName": "Sertraline",
        "dosage": "50mg",
        "frequency": "daily",
        "status": "active",
        "prescribedAt": "2026-03-01T00:00:00Z"
      }
    ],
    "assessments": [
      { "instrumentId": "phq9", "instrumentName": "PHQ-9", "score": 18, "maxScore": 27, "createdAt": "2026-02-20T00:00:00Z" },
      { "instrumentId": "phq9", "instrumentName": "PHQ-9", "score": 11, "maxScore": 27, "createdAt": "2026-05-15T00:00:00Z" }
    ],
    "dmseLatencyPctChange": -14
  }'
200 OK
{
  "ok": true,
  "data": {
    "object": "medication.analysis",
    "generatedAt": "2026-06-28T15:04:05.000Z",
    "signalsPresent": 2,
    "signals": [
      {
        "module": "medication",
        "signalKey": "med_response_sertraline",
        "label": "Sertraline — symptom response",
        "detail": "PHQ-9 improved 18→11 (39% reduction) since Sertraline 50mg started.",
        "tone": "positive",
        "metricValue": 11,
        "metricUnit": "score",
        "confidence": "moderate",
        "summaryLine": "On Sertraline 50mg, PHQ-9 improved from 18 to 11 (39% reduction).",
        "sourceRef": "rx_001",
        "observedAt": "2026-05-15T00:00:00.000Z"
      }
      // ... objective Digital MSE™ corroboration signal
    ],
    "disclaimer": "..."
  }
}

Request body

FieldTypeDescription
prescriptionsPrescription[]Prescriptions to correlate. Up to 100. See Prescription object.
assessmentsAssessment[]Symptom-scale administrations. Up to 500. See Assessment object.
dmseLatencyPctChangenumber?Optional Digital MSE™ latency % change for objective corroboration. -100 to 1000.
sessionRefstring?Optional correlation id, echoed back. Never stored.

Biomarker Intelligence™ — POST /v1/biomarker/analyze

Maps abnormally-flagged lab biomarkers to their psychiatric relevance so reversible medical drivers are ruled out before escalating psychotropics. Only readings with a flag of high, low, or critical produce a signal; normal values are ignored.

Request
curl https://attuniohealth.com/api/v1/biomarker/analyze \
  -H "Authorization: Bearer att_sk_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "labs": [
      {
        "id": "lab_88",
        "labName": "Quest Diagnostics",
        "observedAt": "2026-06-01T00:00:00Z",
        "results": {
          "biomarkers": [
            { "name": "TSH", "value": 6.8, "unit": "mIU/L", "flag": "high", "referenceRange": "0.4-4.0" },
            { "name": "Vitamin D", "value": 18, "unit": "ng/mL", "flag": "low", "referenceRange": "30-100" }
          ]
        }
      }
    ]
  }'
200 OK
{
  "ok": true,
  "data": {
    "object": "biomarker.analysis",
    "generatedAt": "2026-06-28T15:04:05.000Z",
    "signalsPresent": 2,
    "signals": [
      {
        "module": "biomarker",
        "signalKey": "bio_tsh",
        "label": "Thyroid (TSH)",
        "detail": "6.8 mIU/L (ref 0.4-4.0) — elevated TSH can present as depression, fatigue, and cognitive slowing — screen before escalating an antidepressant.",
        "tone": "watch",
        "metricValue": 6.8,
        "metricUnit": "mIU/L",
        "confidence": "high",
        "summaryLine": "Thyroid (TSH) elevated at 6.8 mIU/L: ...",
        "sourceRef": "lab_88",
        "observedAt": "2026-06-01T00:00:00.000Z"
      }
      // ... vitamin D signal
    ],
    "disclaimer": "..."
  }
}

Request body

FieldTypeDescription
labsLab[]At least one lab panel (required). Up to 100. See Lab panel object.
sessionRefstring?Optional correlation id, echoed back. Never stored.

Outcome Intelligence™ — POST /v1/outcome/score

Fuses up to five independent sources into a single treatment-response composite from -100 (worsening) to +100 (strong improvement). Each component's signed contribution is returned, and confidence scales with how many independent sources are available and agree.

Request
curl https://attuniohealth.com/api/v1/outcome/score \
  -H "Authorization: Bearer att_sk_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "assessments": [
      { "instrumentId": "phq9", "instrumentName": "PHQ-9", "score": 18, "maxScore": 27, "createdAt": "2026-02-20T00:00:00Z" },
      { "instrumentId": "phq9", "instrumentName": "PHQ-9", "score": 9, "maxScore": 27, "createdAt": "2026-05-15T00:00:00Z" }
    ],
    "dmseLatencyPctChange": -12,
    "activeMedications": 1,
    "biomarkerWatchCount": 0,
    "avgSleepHours": 7.5
  }'
200 OK
{
  "ok": true,
  "data": {
    "object": "outcome.score",
    "generatedAt": "2026-06-28T15:04:05.000Z",
    "score": 66,
    "direction": "improving",
    "confidence": "high",
    "components": [
      { "key": "symptoms", "label": "Symptom scales", "contribution": 45, "detail": "PHQ-9 improved 18→9 across 2 administrations.", "available": true },
      { "key": "dmse", "label": "Digital MSE™ latency", "contribution": 6, "detail": "Response latency changed -12% across visits.", "available": true }
      // ... medication, biomarker, sleep components
    ],
    "summaryLine": "Treatment response is improving (composite +66) across 4 independent data sources.",
    "sourceCount": 4,
    "disclaimer": "..."
  }
}

Request body

FieldTypeDescription
assessmentsAssessment[]Symptom-scale administrations. Up to 500. See Assessment object.
dmseLatencyPctChangenumber?Optional Digital MSE™ latency % change across visits. -100 to 1000.
activeMedicationsintegerCount of active medications. 0–100. Default 0.
biomarkerWatchCountintegerCount of flagged biomarker watch-items. 0–100. Default 0.
avgSleepHoursnumber?Optional average nightly sleep hours from wearables. 0–24.
sessionRefstring?Optional correlation id, echoed back. Never stored.

Relapse Prediction™ — POST /v1/relapse/predict

The forward-looking layer: uses the velocity and recency of symptom scales, Digital MSE™ latency, wearable sleep, medication-change windows, and visit cadence to compute a transparent, additive 0–100 early-warning score. Every contributing factor and a conservative recommendation are returned — nothing is auto-actioned.

Request
curl https://attuniohealth.com/api/v1/relapse/predict \
  -H "Authorization: Bearer att_sk_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "assessments": [
      { "instrumentId": "phq9", "instrumentName": "PHQ-9", "score": 12, "maxScore": 27, "createdAt": "2026-05-01T00:00:00Z" },
      { "instrumentId": "phq9", "instrumentName": "PHQ-9", "score": 19, "maxScore": 27, "severity": "moderately severe", "createdAt": "2026-06-15T00:00:00Z" }
    ],
    "dmseLatencyPctChange": 16,
    "avgSleepHours": 5.2,
    "daysSinceMedChange": 12,
    "hasActiveMedication": true,
    "daysSinceLastVisit": 38
  }'
200 OK
{
  "ok": true,
  "data": {
    "object": "relapse.prediction",
    "generatedAt": "2026-06-28T15:04:05.000Z",
    "score": 68,
    "level": "elevated",
    "trend": "rising",
    "confidence": "high",
    "topDriver": "Symptom trajectory",
    "factors": [
      { "key": "symptoms", "label": "Symptom trajectory", "points": 34.4, "maxPoints": 38, "tone": "elevated", "available": true, "detail": "PHQ-9 rising 12→19/27 (moderately severe) at the two most recent administrations." },
      { "key": "sleep", "label": "Sleep (wearable)", "points": 12, "maxPoints": 18, "tone": "elevated", "available": true, "detail": "Averaging 5.2h/night recently — short sleep is a leading relapse precursor." }
      // ... dmse, medication, cadence factors
    ],
    "summaryLine": "Elevated relapse risk (68/100), signals rising, driven primarily by symptom trajectory.",
    "recommendation": "Flag for closer monitoring; consider a check-in before the next scheduled visit.",
    "sourceCount": 5,
    "disclaimer": "..."
  }
}

Request body

FieldTypeDescription
assessmentsAssessment[]Symptom-scale administrations. Up to 500. See Assessment object.
dmseLatencyPctChangenumber?Optional Digital MSE™ latency % change across visits. -100 to 1000.
avgSleepHoursnumber?Optional average nightly sleep hours from wearables. 0–24.
daysSinceMedChangeinteger?Days since the last medication change. 0��3650.
hasActiveMedicationbooleanWhether the patient is on an active medication. Default false.
daysSinceLastVisitinteger?Days since the last clinical visit. 0–3650.
sessionRefstring?Optional correlation id, echoed back. Never stored.

Model versioning & calibration

Every scored response carries a model block so you always know exactly which version produced a result. The engines ship with clinically-reasoned default parameters, and Attunio periodically calibrates them against real, de-identified outcomes — but calibration only ever proposes a new version. Nothing changes what your integration receives until a licensed reviewer promotes it.

The model block (on every scored response)
{
  "ok": true,
  "data": {
    "object": "relapse.prediction",
    "model": {
      "key": "relapse_risk",
      "version": 4,          // null until a calibrated version is promoted
      "source": "calibrated" // "default" = shipped constants, "calibrated" = clinician-promoted
    },
    "score": 68,
    "level": "elevated"
    // ... factors, recommendation, disclaimer
  }
}

model object

FieldTypeDescription
model.keystringStable id of the engine, e.g. "relapse_risk", "outcome_score", "medication_response", "biomarker_interpretation".
model.versioninteger | nullThe active version that produced this response. null means the engine is running the shipped defaults — no calibrated version has been promoted.
model.sourcestring"default" = the clinically-reasoned constants that ship with the API. "calibrated" = a version a licensed admin reviewed and promoted.

How calibration works — and what it is not. This is not autonomous learning or self-modifying clinical logic. It is a transparent, human-supervised tuning loop, and several guardrails keep it that way:

  • Defaults are identical until a human acts. A freshly provisioned engine returns source: "default" and behaves exactly as documented. Promotion is a deliberate, audited action by a licensed admin.
  • Calibration proposes, it never promotes. The job reads aggregate prediction-vs-outcome concordance and registers a candidate version with its measured metrics. A reviewer compares it against the active version and decides.
  • The same explainable engine, retuned. Calibration only adjusts bounded weights and thresholds within fixed safety caps — it does not introduce a black-box model. Every signal stays traceable to its source data, and abnormal-lab safety floors cannot be lowered.
  • Versioned and reversible. Exactly one version is active per engine at a time, and any prior version can be re-promoted instantly. The model.version on each response makes results auditable after the fact.

Pin to behavior you have validated by recording the model.version you tested against. Outputs remain clinician-reviewable decision support at every version — calibration sharpens the thresholds, it never turns a score into a diagnosis or an auto-action.

Errors

Errors return a non-2xx status and a consistent JSON envelope.

Error
{
  "ok": false,
  "error": {
    "code": "invalid_request",
    "message": "Telemetry validation failed.",
    "issues": [
      { "path": "responseLatencySeconds", "message": "Number must be ≤ 120" }
    ]
  }
}
StatusCodeMeaning
400invalid_requestBody is not valid JSON, or the payload failed schema validation.
401unauthorizedMissing or malformed Authorization header.
401invalid_tokenAPI key is invalid or has been revoked.
402payment_requiredA production key without an active paid plan and approved production access.
403forbiddenThe key is valid but not permitted to call this resource.
405method_not_allowedWrong HTTP method for the endpoint.
429rate_limitedDaily sandbox quota exceeded. Upgrade a plan to raise limits.
500server_errorUnexpected error processing the request.

Plans, rate limits & billing

Sandbox (test) keys are free and limited to 500 requests per UTC day per account. Exceeding the limit returns 429 rate_limited.

Production (live) keys require a paid plan and approved production access. Paid plans include a monthly call allowance and are never hard-blocked — calls beyond the allowance are billed as metered overage at the end of each cycle. A live key used without an active plan and approved access returns 402 payment_required.

Manage your plan, view real-time usage against your allowance, and request production access from the Billing tab of your developer dashboard. For custom or high-volume agreements, contact hello@attuniohealth.com.

Roadmap

All five intelligence endpoints, API-key authentication, self-serve subscription plans, and usage-based overage billing are live today. A full OAuth 2.0 client-credentials flow and webhook delivery of asynchronous results are next on the roadmap; the Bearer-token header contract above is forward-compatible with the OAuth bearer model, so no breaking change is expected when it ships.

Get your API keys