Evidence infrastructure for CRA Art. 14 and Machinery Reg. 2023/1230
IAAIndustrial Autonomous Assurance
Talk to salesStart free
Menu
PricingPrivacy
FOR AGENTS, CI BOTS, AND HUMANS WITH A TERMINAL

The Assurance API

42 routes over CRA Article 14 and Machinery Regulation Annex III evidence. Bearer auth via one header, JSON in and out, and a real OpenAPI 3 schema you can fetch instead of trusting this page.

Engineer reading FastAPI route notes beside a palletising cell.
⚠
No live base URL yetThis marketing site was built without NEXT_PUBLIC_ASSURANCE_API_URL set. The routes, auth model, and examples below are real — read straight from the code — but there is nothing to call until the founder finishes deploy/assurance/README.md. Run it yourself: uvicorn assurance.api.service:app.
Auth

One header. Bearer token, never a cookie.

Send X-API-Key: <your key>. Get a key from POST /v1/checkout (Register or Cell) or by running the service locally with ASSURANCE_ALLOW_UNAUTHENTICATED=1 for evaluation. A missing key is a 401. A valid key on the wrong plan is a 402, never a 403 — the obstacle is payment, not permission, and every gated route says exactly which plan unlocks it.

Free, no key needed

curl -X POST https://<your-deployment>/v1/spec/validate \
  -H 'content-type: application/json' \
  -d '{"track":"actively_exploited_vulnerability","stage":"early_warning","payload":{}}'
Routes

Free vs. paid, straight from the routers

Every row below is gated in code, in src/assurance/api/deps.py — if it is not gated, it is free. This is a curated view of the 42 routes; the full machine-readable schema (parameters, response shapes, every route including account/billing) is at /openapi.json.

MethodRoutePlanWhat it does
GET/v1/spec/fieldsValidator — freeThe platform field specification for a track/stage
POST/v1/spec/validateValidator — freeValidate a draft submission without recording it
GET/v1/plansValidator — freeWhat is on sale — this table, live
POST/v1/machine/separationValidator — freeISO/TS 15066 protective separation distance
POST/v1/machine/bundle/checkValidator — freeRe-verify someone else's evidence bundle
POST/v1/machinery/diffValidator — freeIs the machine still the configuration you signed off?
POST/v1/machinery/passport/checkValidator — freeRe-verify someone else's machine passport
POST/v1/fleet/advisory/checkValidator — freeIs this one machine affected by this advisory?
POST/v1/fleet/declaration/checkValidator — freeDoes this declaration still describe the machine?
POST/v1/check/machineValidator — freeMachine Assurance Check — one manifest, one advisory, no account
GET/v1/ledger/attest/keyValidator — freeThe public key this service counter-signs with
POST/v1/ledger/attest/verifyValidator — freeCheck an attestation log
GET/v1/supplier/feed/{id}Validator — freeRead a hosted supplier advisory feed
GET/v1/registerRegister — €390/moThe Article 14 register for your account
GET/v1/register/breachesRegister — €390/moCases past a deadline clock
GET/v1/casesRegister — €390/moList cases
GET/v1/cases/{id}/exportRegister — €390/moA verifiable evidence bundle for one case
POST/v1/cases/{id}/triageRegister — €390/moRecord a triage decision
POST/v1/cases/{id}/filingsRegister — €390/moRecord a platform filing
GET/v1/ledger/verifyRegister — €390/moVerify the hash chain
POST/v1/machine/verifyCell — €1,290/moVerify a recorded machine run against its declared envelope
POST/v1/machinery/manifestCell — €1,290/moSeal a safety software manifest
POST/v1/machinery/interventionCell — €1,290/moSeal an intervention record
POST/v1/machinery/coverageCell — €1,290/moWhich safety functions still have valid evidence
POST/v1/machinery/passportCell — €1,290/moSeal the machine's evidence position
GET/v1/fleet/machinesCell — €1,290/moEvery enrolled machine, worst coverage first
GET/v1/fleet/reportCell — €1,290/moThe whole fleet on one page a plant manager can read
POST/v1/fleet/advisoryCell — €1,290/moFan an advisory out across the whole fleet
POST/v1/check/fleet-machineCell — €1,290/moMachine Assurance Check — an enrolled machine, its ledger history and the fleet fan-out
POST/v1/fleet/declareCell — €1,290/moBind a Declaration of Conformity to a configuration
POST/v1/ledger/attestCell — €1,290/moCounter-sign the head of your ledger
GET/v1/ledger/attest/logCell — €1,290/moEvery attestation for your account
POST/v1/change/assess/driftCell — €1,290/moTurn a manifest divergence (baseline vs observed) into a change-assurance case
POST/v1/change/assess/advisoryCell — €1,290/moTurn a fleet impact report for one advisory into a change-assurance case
GET/v1/change/casesCell — €1,290/moThe Active Assurance Cases queue (optional ?status=)
GET/v1/change/cases/{case_id}Cell — €1,290/moOne change-assurance case in full
POST/v1/change/cases/{case_id}/claimCell — €1,290/moOPEN -> IN_REVIEW; body {owner, actor?}
POST/v1/change/cases/{case_id}/advanceCell — €1,290/moMove to the next required stop; body {actor?}
POST/v1/change/cases/{case_id}/reverificationCell — €1,290/moSupply fresh verification evidence; body {manifest, verification_content_hash, actor?}
POST/v1/change/cases/{case_id}/decisionCell — €1,290/moClose, reject or defer — a named human decision; body {disposition, reason, actor?}
POST/v1/watch/reportCell — €1,290/moReport what your own Watch saw (manifests and observation status) to your ledger — opt-in, idempotent
GET/v1/fleet/observationsCell — €1,290/moPer machine: last successful observation, last attempt, stale, open cases
POST/v1/supplier/advisorySupplier — contact salesPublish a signed advisory to your hosted feed

Wire an agent to this instead of reading it

Cursor, Claude, and CI bots discover this the same way: llms.txt, openapi.json, and this page.