Skip to content

Errors & notices

Errors reject a command or report a service failure. Notices are asynchronous messages about an open stream.

Error frame

An error carries the id of the command that caused it:

json
{
  "op": "error",
  "id": 1,
  "code": "not_on_plan",
  "feature": "detail_full",
  "message": "..."
}
CodeMeaningClient action
unauthorizedKey is missing, unknown, or revokedStop and provide a valid key
key_revokedKey was revoked while the connection was openClose the connection and rotate the key
invalid_paramsUnknown/missing parameter or value outside its allowed setFix the command; do not retry unchanged
invalid_addressmint or wallet is not a Solana addressValidate the address locally
invalid_mintAddress exists but is not a token mintUse a token mint
unknown_streamStream name does not existUse one of the eight documented names
duplicate_subscriptionAn identical subscription is already openReuse the existing subscription
subscription_limitPlan's open-subscription limit is exhaustedUnsubscribe or upgrade
connection_limitPlan's concurrent-connection limit is exhaustedClose another connection or upgrade
rate_limitedCommand rate is too highBack off before retrying
not_on_planRequested feature is outside the planInspect feature; remove it or upgrade
internal_errorService failed while processing the commandRetry with backoff; report persistent failures

not_on_plan features

feature is one of:

  • stream
  • detail_full
  • include_raw
  • cursor
  • candles
  • candle_interval
  • quota

The human-readable message includes a link to the pricing page. Branch client logic on code and feature, not on the message text.

Notice frame

A notice is not tied to a command. It reports stream state and normally carries the affected subscription:

json
{
  "op": "notice",
  "code": "gap",
  "sub": "tt_1",
  "message": "..."
}
CodeWhat happenedClient action
gapCursor is older than the replay window; delivery starts liveRecord the gap and continue
replay_rate_limitedReplay allowance is exhausted; delivery starts liveContinue without replay
droppedClient read too slowly and events were lost; cursor is the first lost eventRecord the gap, narrow filters, or speed up consumption
quota_exceededFree monthly traffic quota is exhaustedWait for the next period or upgrade
slow_consumerReading is consistently behind; connection is closingReconnect only after fixing consumption speed
server_restartService is restartingReconnect with backoff and the last processed cursor

dropped is emitted once per loss series. Repeated notices mean the subscription should be narrowed with filters or consumed faster.

Retry policy

Use exponential backoff with jitter for internal_error, restarts, and network disconnects. Do not automatically retry malformed commands, invalid keys, or plan denials unchanged.

Realtime Solana data API