Skip to main content
Source of truth: backend/internal/api/api.go (Routes()) and interface contract §5. All money values are integer micro-USDC; prices are integer cents (1..99). The server sets permissive CORS for browser clients and answers GET /healthz with 200. Error semantics are consistent and tested: bad signature → 401, insufficient funds → 402, replayed salt / double-accept → 409, post-kickoff precision entry → 410. Attack-surface tests pin that malformed input always produces a 4xx, never a 5xx.

Trading

Markets & matches

Combos (RFQ)

Precision pools

Wallet & portfolio

Admin (operator-gated)

Manual market control, authenticated by an ed25519 challenge → session token signed by the operator wallet (ADMIN_PUBKEY, defaults to the operator key). Endpoints under /admin/: challenge, session, fixtures (+ per-fixture odds, markets, resolve), markets (+ per-market resolve, close, cancel-orders), and ops (operational health, incl. stale unresolved matches). Source: backend/internal/api/admin.go.
The interface contract §5 pins the shape of this surface; the concrete request/response JSON is defined by the handlers in backend/internal/api/api.go and exercised end to end by api_e2e_test.go. The TypeScript client in frontend/lib/api.ts is the practical reference for payload field names.