OPERANDI / API documentation

The operation layer, over HTTP.

One call turns "there is a microwave in front of me" into a grounded, safety-gated, machine-executable operation package: every control with a visual anchor, ordered procedures with per-step verification signals, force limits, hazards and interlocks — re-expressed from the appliance's own documentation, never guessed by a model at runtime.

Agents: this API is designed for you. Machine summary at /llms.txt · full OpenAPI schema at api.operandi.cc/openapi.json · interactive explorer at api.operandi.cc/docs. Every response is plain JSON with stable field names. An MCP server (operandi-mcp) is packaged and nearing publication.

Instant start — no signup

One command mints a working key with 2 operation packages included:

KEY=$(curl -s -X POST https://api.operandi.cc/v1/trial | python3 -c "import json,sys;print(json.load(sys.stdin)['api_key'])")
curl -s https://api.operandi.cc/v1/operate/coffee-maker-bialetti-moka-express \
  -H "Authorization: Bearer $KEY"

Agents: pip install operandi-mcp does this for you automatically — zero config, answering in seconds.

Base URL & accounts

https://api.operandi.cc

When your trial is spent, sign up (free tier: 10 packages/month) and mint a permanent key (shown once, prefix ok_live_):

curl -X POST https://api.operandi.cc/v1/auth/signup \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","password":"********"}'

# then create a key with your session: POST /v1/auth/keys

Send the key on every call — either header works:

Authorization: Bearer ok_live_...        # preferred
X-API-Key: ok_live_...                   # equivalent

Free tier: 10 operation packages per month across all delivery routes, plus unmetered catalog/browse calls. Past the cap you get 402 with an X-Upgrade-Url header — nothing breaks silently.

The two calls that matter

1 · Identify what you're looking at

curl -s https://api.operandi.cc/v1/identify \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"text":"Samsung MS23K3513 microwave nameplate"}'

Send whatever text your perception produced — nameplate OCR, model strings, a human hint. Returns ranked appliance matches with slugs and package availability.

2 · Pull the operation package

curl -s https://api.operandi.cc/v1/operate/samsung-ms23k3513 \
  -H "Authorization: Bearer $KEY"

Returns the full robot-ready package in one response: identity · controls (with visual_anchor, interaction physics: motion, force class, travel, expected feedback) · ordered procedures with per-step verify signals · safety envelope (hazards, interlocks, never-do) · the executable ROP behaviour tree · trust tier and validation history.

All endpoints

RouteWhat it does
POST/v1/identifyObserved text → ranked appliance matches.
GET/v1/operate/{slug}The full operation package (metered).
GET/v1/objects · /v1/objects/{slug}Browse/search the catalog; per-model detail.
GET/v1/manifests/{id}The Operation Manifest alone (knowledge layer, metered).
GET/v1/rops/{ref}The executable ROP behaviour tree alone (metered).
GET/v1/bundlePackaged multi-file download (metered).
GET/v1/catalog/statsCorpus totals: models, packages, validation tiers.
GET/v1/capabilitiesWhat the platform can and cannot verify today.
POST/v1/vision/resolveVision-assisted model resolution.
GET/v1/usageYour tier, quota and remaining allowance.
GET/v1/demandTell us what models you need — feeds acquisition directly.
POST/v1/auth/signup · /login · /v1/keysAccounts and key management.
GET/healthzLiveness (no auth).

What makes the data trustworthy

Errors

CodeMeaning
401Missing/invalid API key.
402Free-tier package cap reached — X-Upgrade-Url header included.
404Model not in the catalog yet — POST /v1/demand and we acquire it.
429Per-minute rate limit — honor Retry-After.