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
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
{
"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.
| Product | Status | Endpoint | What it does |
|---|---|---|---|
| Digital MSE™ | Live | POST /v1/dmse/analyze | Speech & movement timing → mental-status-exam signals. |
| Medication Intelligence™ | Live | POST /v1/medication/analyze | Adherence & response patterns from medication history. |
| Biomarker Intelligence™ | Live | POST /v1/biomarker/analyze | Labs & wearable biomarkers, contextualized. |
| Outcome Intelligence™ | Live | POST /v1/outcome/score | Symptom scales → outcome trajectories. |
| Relapse Prediction™ | Live | POST /v1/relapse/predict | Multi-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.
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 returns403 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.
// 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:
{
"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.
npm install @attunio/captureimport { 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:
// 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.
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.
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"
}'{
"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
| Field | Type | Description |
|---|---|---|
| psychomotorFidgetEpisodes | number | Discrete fidget / motor-restlessness episodes counted during the session (0–1000). |
| responseLatencySeconds | number | Mean conversational response latency in seconds (0–120). |
| speechRateWpm | number | Mean speech rate in words per minute (0–600). |
| sustainedAttentionPct | number | Share of session with gaze on-screen, 0–100. |
| sessionDurationSeconds | number | Optional. Session length; longer sessions raise confidence. |
| history | object | Optional. Arrays of prior values keyed by signal (psychomotor, response_latency, speech_rate, sustained_attention) for baseline + trend. |
| sessionRef | string | Optional. 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
| Field | Type | Description |
|---|---|---|
| instrumentId | string | Stable id for the instrument, e.g. "phq9". 1–64 chars. |
| instrumentName | string | Human-readable name, e.g. "PHQ-9". 1–120 chars. |
| score | number | Raw score for this administration. 0–1000. |
| maxScore | number | Maximum possible score for the instrument. 1–1000. |
| severity | string? | Optional severity band, e.g. "moderately severe". |
| createdAt | ISO date | When the assessment was administered. |
Prescription object
| Field | Type | Description |
|---|---|---|
| id | string | Your prescription id; echoed back as the signal's sourceRef. |
| medicationName | string | Medication name, e.g. "Sertraline". 1–160 chars. |
| dosage | string? | Optional dosage, e.g. "50mg". |
| frequency | string? | Optional frequency, e.g. "daily". |
| status | string | Prescription status, e.g. "active" or "discontinued". |
| prescribedAt | ISO date? | When the medication started. Anchors the before/after symptom comparison. |
Lab panel object
| Field | Type | Description |
|---|---|---|
| id | string | Your lab/panel id; echoed back as the signal's sourceRef. |
| labName | string | Lab or panel name, e.g. "Quest Diagnostics". 1–160 chars. |
| observedAt | ISO date? | When the panel was drawn or observed. |
| results.biomarkers | Biomarker[] | Up to 200 biomarker readings (see Biomarker object). |
Biomarker object
| Field | Type | Description |
|---|---|---|
| name | string | Biomarker name, e.g. "TSH". 1–120 chars. |
| value | number | string | null | The measured value. |
| unit | string? | Unit of measure, e.g. "mIU/L". |
| flag | string? | "high" | "low" | "critical" | "normal". Only abnormal flags produce a signal. |
| referenceRange | string? | Reference range string, e.g. "0.4-4.0". |
| note | string? | 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.
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
}'{
"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
| Field | Type | Description |
|---|---|---|
| prescriptions | Prescription[] | Prescriptions to correlate. Up to 100. See Prescription object. |
| assessments | Assessment[] | Symptom-scale administrations. Up to 500. See Assessment object. |
| dmseLatencyPctChange | number? | Optional Digital MSE™ latency % change for objective corroboration. -100 to 1000. |
| sessionRef | string? | 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.
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" }
]
}
}
]
}'{
"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
| Field | Type | Description |
|---|---|---|
| labs | Lab[] | At least one lab panel (required). Up to 100. See Lab panel object. |
| sessionRef | string? | 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.
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
}'{
"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
| Field | Type | Description |
|---|---|---|
| assessments | Assessment[] | Symptom-scale administrations. Up to 500. See Assessment object. |
| dmseLatencyPctChange | number? | Optional Digital MSE™ latency % change across visits. -100 to 1000. |
| activeMedications | integer | Count of active medications. 0–100. Default 0. |
| biomarkerWatchCount | integer | Count of flagged biomarker watch-items. 0–100. Default 0. |
| avgSleepHours | number? | Optional average nightly sleep hours from wearables. 0–24. |
| sessionRef | string? | 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.
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
}'{
"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
| Field | Type | Description |
|---|---|---|
| assessments | Assessment[] | Symptom-scale administrations. Up to 500. See Assessment object. |
| dmseLatencyPctChange | number? | Optional Digital MSE™ latency % change across visits. -100 to 1000. |
| avgSleepHours | number? | Optional average nightly sleep hours from wearables. 0–24. |
| daysSinceMedChange | integer? | Days since the last medication change. 0��3650. |
| hasActiveMedication | boolean | Whether the patient is on an active medication. Default false. |
| daysSinceLastVisit | integer? | Days since the last clinical visit. 0–3650. |
| sessionRef | string? | 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.
{
"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
| Field | Type | Description |
|---|---|---|
| model.key | string | Stable id of the engine, e.g. "relapse_risk", "outcome_score", "medication_response", "biomarker_interpretation". |
| model.version | integer | null | The active version that produced this response. null means the engine is running the shipped defaults — no calibrated version has been promoted. |
| model.source | string | "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.versionon 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.
{
"ok": false,
"error": {
"code": "invalid_request",
"message": "Telemetry validation failed.",
"issues": [
{ "path": "responseLatencySeconds", "message": "Number must be ≤ 120" }
]
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Body is not valid JSON, or the payload failed schema validation. |
| 401 | unauthorized | Missing or malformed Authorization header. |
| 401 | invalid_token | API key is invalid or has been revoked. |
| 402 | payment_required | A production key without an active paid plan and approved production access. |
| 403 | forbidden | The key is valid but not permitted to call this resource. |
| 405 | method_not_allowed | Wrong HTTP method for the endpoint. |
| 429 | rate_limited | Daily sandbox quota exceeded. Upgrade a plan to raise limits. |
| 500 | server_error | Unexpected 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