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.