Arbiter HTTP API
Arbiter exposes its multi-agent orchestrator as an HTTP + Server-Sent Events API. One POST/v1/orchestrate drives the full agentic loop — master agent turns, delegated and parallel sub-agent calls, tool invocations, generated files — and streams the whole thing back as SSE events.
Billing — eligibility checks, rate cards, caps, invoicing — is delegated to an external billing service when ARBITER_BILLING_URL is set. The runtime exchanges every bearer for a workspace_id via POST/v1/runtime/auth/validate, pre-flights against POST/v1/runtime/quota/check, and posts post-turn telemetry to POST/v1/runtime/usage/record. Operators wanting a commercial deployment must implement that protocol against a service of their choosing — arbiter ships no reference implementation under this repository. With the env var unset, the runtime acts as a thin pass-through using the operator-supplied provider keys, with no eligibility checks.
Start with arbiter --api --port 8080. The default bind is 127.0.0.1; production deployments should put TLS termination, DDoS protection, and rate limiting in a reverse proxy (nginx, caddy, cloudflare) in front of the process.
Each endpoint page below uses the same template: Function, Request, Response, Failure modes, See also.
Concepts
- Writ — the slash-command DSL agents emit inline
- Tenants
- Authentication
- Fleet streaming
- SSE event catalog
- Advisor
- Structured memory
- Artifacts
- MCP servers
- A2A protocol
- Web search
- Data model
- Operational notes
- Scheduler
- Todos
- Lessons (self-reflection)
- Durable in-flight execution
Endpoints
Top-level
GET/v1/healthGET/v1/metricsGET/v1/modelsPOST/v1/orchestratePOST/v1/requests/:id/cancelGET/v1/requestsGET/v1/requests/:idGET/v1/requests/:id/events
Agents
GET/v1/agentsPOST/v1/agentsGET/v1/agents/:idPATCH/v1/agents/:idDELETE/v1/agents/:idPOST/v1/agents/:id/chat
Conversations
POST/v1/conversationsGET/v1/conversationsGET/v1/conversations/:idPATCH/v1/conversations/:idDELETE/v1/conversations/:idGET/v1/conversations/:id/messagesPOST/v1/conversations/:id/messages
Memory (file scratchpads)
Memory (structured graph)
POST/v1/memory/entriesGET/v1/memory/entriesGET/v1/memory/entries/:idPATCH/v1/memory/entries/:idDELETE/v1/memory/entries/:idPOST/v1/memory/entries/:id/invalidatePOST/v1/memory/relationsGET/v1/memory/relationsDELETE/v1/memory/relations/:idGET/v1/memory/graph
Artifacts
POST/v1/conversations/:id/artifactsGET/v1/conversations/:id/artifactsGET/v1/conversations/:id/artifacts/:aidGET/v1/conversations/:id/artifacts/:aid/rawDELETE/v1/conversations/:id/artifacts/:aidGET/v1/artifactsGET/v1/artifacts/:aidGET/v1/artifacts/:aid/rawDELETE/v1/artifacts/:aid
Todos
Lessons (self-reflection)
Schedules + runs + notifications
POST/v1/schedulesGET/v1/schedulesGET/v1/schedules/:idPATCH/v1/schedules/:idDELETE/v1/schedules/:idGET/v1/schedules/:id/runsGET/v1/runsGET/v1/runs/:idGET/v1/notifications/stream
A2A protocol
Admin
GET/v1/admin/tenantsPOST/v1/admin/tenantsGET/v1/admin/tenants/:idPATCH/v1/admin/tenants/:idGET/v1/admin/audit
Usage ledger, rate cards, caps, and invoices live in the operator's billing service, not here.
Versioning
All routes are prefixed /v1/. Breaking changes will land at /v2/; additive changes (new fields on responses, new optional query params) ship under /v1/ with a note in this index.