Skip to content
Sieve
Checking live services…

Use Sieve as a service

The same pipeline the app uses, over HTTP. OpenAPI documentation is at https://sieve-api.vercel.app/docs. Also a hosted MCP server : add https://sieve-api.vercel.app/mcp in Claude, Cursor or any MCP client and your own agent can call list_devices, identify_device, diagnose and read_manual_page, with no install.

Try the API live

Three steps, all real calls to https://sieve-api.vercel.app.

1. Create an API key

2. Pick a request

curl
curl -X POST https://sieve-api.vercel.app/v1/identify \
  -H "X-API-Key: <your key>" \
  -H "content-type: application/json" \
  -d '{"manufacturer":"Philips Respironics","model":"EverFlo","visible_text":["EverFlo","REF 1020000"]}'

3. Run it

POST /v1/identify

Nameplate fields in, registry matches with confidence out.

POST /v1/identify/image

Multipart photo in; vision describes, registry decides. Falls back to manual mode, never errors.

GET /v1/devices

Registry: models, cited indicator tables, whether a manual is indexed.

POST /v1/analyze

Device, indicators and answers in; fault tree with verbatim citations, rule hits, audit verdicts, recalls and the Trace out.

GET /v1/page/{doc}/{page}

The manual page text behind any citation.

POST /v1/records

File a work order. GET lists; /v1/fleet aggregates.

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.

GET /v1/costs

Token and USD totals by model from the ledger.

curl

curl -X POST https://sieve-api.vercel.app/v1/analyze \
  -H "content-type: application/json" \
  -d '{"device_id":"philips-everflo","indicator_ids":["everflo-yellow-solid-silent"],"answers":{"warmup":"yes"}}'

Python

import httpx
r = httpx.post("https://sieve-api.vercel.app/v1/analyze", json={
    "device_id": "philips-everflo",
    "indicator_ids": ["everflo-yellow-solid-silent"],
    "answers": {"warmup": "yes", "analyser": "yes"},
})
tree = r.json()["tree"]
for step in tree["steps"]:
    print(step["id"], step["action"], "->", step["cite"]["doc"], "p", step["cite"]["page"])

JavaScript

const r = await fetch("https://sieve-api.vercel.app/v1/analyze", {
  method: "POST", headers: { "content-type": "application/json" },
  body: JSON.stringify({ device_id: "devilbiss-525", indicator_ids: ["dv525-red-beep"], answers: {} }),
});
const { tree, rule_hits, citations, trace } = await r.json();