# mtlm-router hosted API — https://api.mtlm-router.intrane.fr A typed decision layer: send a request, get a route + calibrated confidence + escalate? + complexity in ~35ms compute (~100ms p50 end-to-end measured server-side on the metered path). Same API as the self-hosted appliance (https://github.com/javimosch/mtlm-router). ## Pay per decision (peage rail, EUR) 1. Wallet: curl -s -X POST https://peage.intrane.fr/v1/wallets -d '{"email":"you@example.com"}' -> token pw_… (new wallets include free starter credit) 2. Call: curl -s -X POST https://api.mtlm-router.intrane.fr/v1/route -H 'X-Peage-Wallet: pw_…' -d '{"state":"status of ticket INC4821"}' 3. Price: 1 cent buys 20 decisions for your wallet (X-Meter-Remaining tells you what is left; X-Peage-Receipt carries the signed receipt when a charge happened). Top up: POST https://peage.intrane.fr/v1/topup. No wallet header -> 402 with a JSON pointer to the rail. Idempotent charges; a crashed proxy never double-bills. ## Endpoints (all POST JSON, forwarded to the router) /v1/route {state|messages, options?, expert?, min_conf?} -> {action: tool_call|generate|delegate, route, confidence, p_yes, tier, reason, domain?, expert?} /v1/decide {state, options?} -> which route · /v1/noul {state} -> escalate? p_yes · /v1/score {state} -> complexity 1-4 · /v1/assess {state} -> all three GET /v1/lanes -> installed expert lanes (free) · GET /health -> liveness (also probes the router) · GET /pricing -> this contract as JSON Posture: this endpoint is a shared evaluation tier — production clients get a dedicated bare-metal instance (EUR 99/mo, see /pricing). Lanes: clinc, clinc2 (generic intent), bank77 (banking), civic, civic_fr (municipal), helpdesk2/it_helpdesk, mairie, mairie_c (FR municipal), eq (tone). Pin one with {"expert":"bank77"}. Machine-readable catalog of this surface: GET /.well-known/api-catalog (RFC 9727 linkset). ## Try it free (no wallet) POST /demo/route {"state":"any-session-id>=2chars","text":"your request","expert":""} -> same response shape as /v1/route. Paid from a server-side demo wallet: 30 req/h/IP, 3000/day total; CORS-locked to the landing origin. {"error":"state required"} means the state field is missing or <2 chars. ## Custom routes Your own tool vocabulary is a ~7KB head trained on the frozen trunk: see https://mtlm-router.intrane.fr/#pricing (custom head, one-off) or self-host the free appliance.