Vehicle diagnostics,
from your platform.
Send a vehicle and its symptoms; get back ranked probable causes, a step-by-step diagnostic plan, confidence and a report - through one key-authenticated, metered API. Approved partners only.
POST /v1/cases → { case_id }
# 2 · Run the diagnosis (async, ~10 min)
POST /v1/diagnose → 202 { diagnosis_id,
status: "processing" }
# 3 · Get the result - webhook + polling
GET /v1/diagnoses/{id} → ranked causes,
steps, confidence
Three calls, fully asynchronous
Create a case
POST the vehicle (VIN or make/model/year) and the customer complaint, findings and any fault codes. You get a case_id back immediately.
Run the diagnosis
Trigger the diagnosis and receive 202 processing at once. Our multi-agent engine works the case asynchronously - typically around ten minutes.
Receive the result
We POST a signed diagnosis.completed webhook to your callback URL, and you can poll the diagnosis at any time. Fetch the structured result or the report PDF. Occasionally a diagnosis comes back paused with a question instead — see the FAQ.
The endpoints
Versioned under /v1. Authenticate with Authorization: Bearer sk_live_… (or sk_test_… against sandbox data). Standard JSON, standard errors.
Apply for access
Tell us about your platform and we'll send a proposal. Billing is prepaid credits, tailored to your volume - contact us.
Common questions
Who can use the API?+
Approved partners - platforms that want to offer vehicle diagnostics to their own users. There's no self-serve signup: you apply, we send a proposal, then issue your key.
How long does a diagnosis take?+
A full diagnosis runs asynchronously and typically takes around ten minutes. You receive a signed webhook when it completes, and you can poll the diagnosis at any time.
How is it priced?+
Prepaid credits, billed in advance: you top up a credit balance and each diagnosis draws it down. Your per-credit rate is set in your proposal - contact us and we'll tailor it to your volume and use case.
Is there a sandbox?+
Yes. Every partner gets separate test and live keys, with sandbox data kept apart from production.
How do we get the results?+
Two ways, use either or both: a signed diagnosis.completed webhook POSTed to your callback URL, and polling GET /v1/diagnoses/{id}. A diagnosis report PDF is available too. Webhooks are best-effort; polling is the guarantee.
What does a paused diagnosis mean?+It means the vehicle this case describes does not add up, so we stopped rather than carry on — because a diagnosis built on the wrong vehicle is not a slightly worse answer, it is a confident, detailed answer about a different car with nothing on it to say so. Two things cause it: the details we decoded from the VIN contradict each other (the engine reads as one fuel type, the fuel says another), or a document attached to the case names a different engine, fuel type or VIN.
You will get a diagnosis.paused webhook, and GET /v1/diagnoses/{id} returns status: "paused" with the question, the line of evidence behind it, and the answers you can pick from. Send one back with POST /v1/diagnoses/{id}/resolve and the same diagnosis resumes.
It costs nothing extra. A pause happens before the analysis does any real work, and answering resumes the diagnosis you already started — one diagnosis, billed once, however long you take to answer.
