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.
operandi-mcp) is packaged and nearing publication.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.
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.
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.
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.
| Route | What it does |
|---|---|
POST/v1/identify | Observed 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/bundle | Packaged multi-file download (metered). |
GET/v1/catalog/stats | Corpus totals: models, packages, validation tiers. |
GET/v1/capabilities | What the platform can and cannot verify today. |
POST/v1/vision/resolve | Vision-assisted model resolution. |
GET/v1/usage | Your tier, quota and remaining allowance. |
GET/v1/demand | Tell us what models you need — feeds acquisition directly. |
POST/v1/auth/signup · /login · /v1/keys | Accounts and key management. |
GET/healthz | Liveness (no auth). |
validation_tier — auto →
sim_validated (kinematic walk passes) → phys_validated (software
contact-physics screen) → robot_cleared (human sign-off; hardware). Nothing is
over-claimed: if a package hasn't passed a tier, its tier says so.| Code | Meaning |
|---|---|
401 | Missing/invalid API key. |
402 | Free-tier package cap reached — X-Upgrade-Url header included. |
404 | Model not in the catalog yet — POST /v1/demand and we acquire it. |
429 | Per-minute rate limit — honor Retry-After. |