Developer API

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.

No self-serve purchase. Apply, we send a proposal, then issue your key.
# 1 · Create a case
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
How it works

Three calls, fully asynchronous

1

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.

2

Run the diagnosis

Trigger the diagnosis and receive 202 processing at once. Our multi-agent engine works the case asynchronously - typically around ten minutes.

3

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.

Reference

The endpoints

Versioned under /v1. Authenticate with Authorization: Bearer sk_live_… (or sk_test_… against sandbox data). Standard JSON, standard errors.

POST/v1/casesCreate a diagnostic case → case_id
POST/v1/diagnoseStart the diagnosis (async) → 202 diagnosis_id
GET/v1/cases/{id}Case status
GET/v1/diagnoses/{id}Structured result: ranked causes, confidence, steps — or, when paused, the question to answer
POST/v1/diagnoses/{id}/resolveAnswer a paused diagnosis and resume it — same diagnosis, billed once
GET/v1/diagnoses/{id}/report.pdfThe diagnosis report (PDF)
Open the interactive API reference →
Get started

Apply for access

Tell us about your platform and we'll send a proposal. Billing is prepaid credits, tailored to your volume - contact us.

No payment and no instant key - we review every application and reply by email.
FAQ

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.