Errors and empty states
Status codes
Section titled “Status codes”| Code | Meaning |
|---|---|
401 | no identity — missing or invalid key / session (on iOS, usually a missing credentials: "include") |
403 handle_required | the operator has not claimed a handle yet (takes and clip uploads) |
403 wallet_not_linked | identity claim for an address that is not Privy-linked |
409 market_closed | signal write on a settled market |
409 already_predicted | a second signal write on the same market — the first call locks |
503 signal_service_unavailable | the signal service behind /api/predictions is down |
410 | a retired channel-era route (/api/channels/ranked, /api/channel-markets, /api/master-channel, /api/uap-market, /api/uap-news, /api/cannes/signals, POST /api/attestation, /api/master-channel/stream) |
429 | rate limit (tiers exist in the schema; enforcement is at the edge) |
503 pulse_unavailable | /api/network/pulse cannot aggregate |
The graceful-empty rule
Section titled “The graceful-empty rule”Every read endpoint returns a well-formed empty state rather than erroring:
/api/wireand/api/situationsreturn200with empty lists on error./api/network/programreturns{ enabled: false }when unwired./api/streamer/signalreturns{ marketId: null }when nothing is featured./api/network/payout/[handle]returns{ eligible: false }.
Forks must do the same: render NO SIGNAL, never fabricate, never show a placeholder price.