Use Antidote as a service
The same pipeline the app uses, over HTTP. OpenAPI at https://antidote-api.vercel.app/docs. Also a hosted MCP server: add https://antidote-api.vercel.app/mcp in Claude, Cursor or any MCP client and your own agent can call list_chemicals, bedside_card, read_guideline_page and surveillance_alerts, with no install. The full local MCP server adds label photos and register filing.
Try the API live
Three steps, all real calls to https://antidote-api.vercel.app.
1. Create an API key
2. Pick a request
curl -X POST https://antidote-api.vercel.app/v1/analyze \
-H "X-API-Key: <your key>" \
-H "content-type: application/json" \
-d '{"label":{"product_name":"Gramoxone","active_ingredients":[{"name":"Paraquat dichloride","percent":"24"}]},"audit":false}'3. Run it
POST /v1/read-label
Multipart photo in; printed fields out. Nothing clinical is asked of the vision model.
POST /v1/analyze
Label fields and patient context in; chemical, WHO class, stop cards, quoted card, audit, citations and Trace out.
GET /v1/chemicals
The registry: chemicals, groups, WHO classes with verification status, India status.
GET /v1/page/{doc}/{page}
The guideline page behind any citation.
POST /v1/records
File a medico-legal register row. GET lists the demo register.
GET /v1/evals/latest
The published evaluation JSON.
POST /v1/keys
Create a signed API key. Shown once; nothing about it is stored on the server.
GET /v1/keys/verify
Check a key and see how many requests it has left this minute.
curl
curl -X POST https://antidote-api.vercel.app/v1/analyze \
-H "content-type: application/json" \
-d '{"label":{"product_name":"Gramoxone","active_ingredients":[{"name":"Paraquat dichloride","percent":"24"}],"triangle_colour":"yellow"},"context":{"route":"ingested"}}'Python
import httpx
r = httpx.post("https://antidote-api.vercel.app/v1/analyze", json={
"label": {"product_name": "Dursban", "active_ingredients": [{"name": "Chlorpyriphos", "percent": "20"}], "triangle_colour": "yellow"},
"context": {"route": "ingested", "time_since_exposure": "1-2 h"},
})
card = r.json()
print(card["chosen"], card["stops"])
for s in card["card"]["manage"]:
print(s["kind"], s["text"], s["cite"] and s["cite"]["page"])JavaScript
const r = await fetch("https://antidote-api.vercel.app/v1/analyze", { method: "POST", headers: { "content-type": "application/json" },
body: JSON.stringify({ label: { product_name: "Celphos", active_ingredients: [{ name: "Aluminium phosphide", percent: "56" }] }, context: {} }) });
const { chosen, stops, card, citations, trace } = await r.json();