Developer Platform
One REST call submits a prior authorization; AccelRx runs the entire lifecycle — policy match, form-fill, submission, and appeal — and streams every status change back to you over signed webhooks. You integrate once; we do the work a coordinator would.
The API is organized around cases. A case is one prior
authorization for one patient + drug + payer. You create a case with the
clinical and coverage details you already have; AccelRx handles the rest
and notifies you as the case moves from pending_notes through
submitted to approved or denied.
https://platform.accelrx.ai/v1
Authenticate every request with your secret API key in the
Authorization header. Keys are issued by your AccelRx admin
and shown exactly once — store them in a secrets manager, never in client
code or version control.
curl https://platform.accelrx.ai/v1/ping \
-H "Authorization: Bearer axk_live_your_key_here"
You can also pass the key as an X-API-Key header. All traffic is HTTPS-only; requests over HTTP are refused.
Submit the details you have. Only patient.name and
medication.name are required; everything else sharpens the
policy match and form-fill. Pass an idempotency_key to make
retries safe — the same key always returns the same case.
curl https://platform.accelrx.ai/v1/cases \
-H "Authorization: Bearer axk_live_..." \
-H "Content-Type: application/json" \
-d '{
"patient": { "name": "Jane Public", "dob": "1980-05-05", "member_id": "M123456" },
"medication":{ "name": "Wegovy 0.25mg", "quantity": "1", "days_supply": "28" },
"diagnosis_code": "E66.01",
"insurance": { "payer": "Aetna", "rx_bin": "610014", "rx_pcn": "ADV", "rx_group": "RX1515" },
"prescriber":{ "name": "John Smith, MD", "npi": "1234567893" },
"idempotency_key": "order_9f83c1"
}'
Returns 201 with the created case (or 200 with the existing one on an idempotent match):
{
"object": "case",
"id": 241,
"case_number": "PA-4575",
"status": "pending_notes",
"patient": { "name": "Jane Public", "dob": "1980-05-05", "member_id": "M123456" },
"medication":{ "name": "Wegovy 0.25mg", "quantity": "1", "days_supply": "28", "ndc": null },
"diagnosis_code": "E66.01",
"insurance": { "payer": "Aetna", "rx_bin": "610014", "rx_pcn": "ADV", "rx_group": "RX1515", "plan_type": null },
"prescriber":{ "name": "John Smith, MD", "npi": "1234567893" },
"coverage_score": null,
"created_at": "2026-07-13T23:10:40",
"updated_at": "2026-07-13T23:10:40"
}
Fetch a single case by id, or list your practice's cases. The list
endpoint supports ?status=, ?limit= (max 100),
and ?offset= for pagination.
curl "https://platform.accelrx.ai/v1/cases?status=approved&limit=25" \
-H "Authorization: Bearer axk_live_..."
{ "object": "list", "data": [ /* cases */ ], "total": 42, "limit": 25, "offset": 0 }
The full status + activity history of a case, oldest first — useful for reconciliation and audit.
Instead of polling, register an HTTPS URL and AccelRx will POST a signed
event to it whenever a case changes. The endpoint must be publicly
reachable over https. The signing secret is
returned once — keep it to verify signatures.
curl https://platform.accelrx.ai/v1/webhooks \
-H "Authorization: Bearer axk_live_..." \
-H "Content-Type: application/json" \
-d '{ "url": "https://api.yourapp.com/hooks/accelrx",
"events": ["case.status_changed", "case.approved", "case.denied"] }'
{ "object": "webhook_endpoint", "id": 3, "url": "https://api.yourapp.com/hooks/accelrx",
"events": ["case.status_changed","case.approved","case.denied"], "active": true,
"secret": "whsec_9c1f…" /* shown once */ }
List endpoints with GET /v1/webhooks and deactivate one with DELETE /v1/webhooks/{id}.
case.created — a case was created via the API.case.status_changed — the case status transitioned. The body carries data.previous_status.case.approved — convenience alias fired alongside the status change on approval.case.denied — fired on denial.Every delivery body is { "id": "evt_…", "type": "…", "created": 1752…, "data": { /* the case */ } }. The data block matches a GET /v1/cases/{id} response, so you can treat both paths identically.
Each request carries an X-AccelRx-Signature header of the form
t=<unix>,v1=<hex>, where v1 is
HMAC-SHA256(secret, "<t>.<raw-body>"). Recompute it
over the raw request body and compare in constant time; reject timestamps
older than a few minutes to prevent replay.
import hmac, hashlib, time
def verify(secret, raw_body, header):
parts = dict(kv.split("=", 1) for kv in header.split(","))
ts, sig = parts["t"], parts["v1"]
if abs(time.time() - int(ts)) > 300:
return False # stale — possible replay
expected = hmac.new(secret.encode(),
f"{ts}.".encode() + raw_body,
hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, sig)
Respond 2xx quickly to acknowledge. AccelRx retries failed deliveries with backoff and auto-disables an endpoint after repeated failures.
Errors return a conventional HTTP status and a JSON body { "error": { "code": "…", "message": "…" } }.
401 missing_credentials / invalid_key / revoked_key — bad or missing API key.403 insufficient_scope / key_not_provisioned — the key lacks the scope or isn't tied to a practice.400 missing_field / invalid_url / invalid_request — malformed request.404 not_found — the resource doesn't exist, or isn't yours.Need a key or a higher rate limit? Talk to us. The API is for platform, pharma, and health-system partners.