Skip to main content
Two frame types tell you when something about a subscription changes or a request fails: status for subscription state transitions, and error for rejected requests and failed subscriptions.

status

state is one of: reason is an optional machine-readable hint. When one market-level event affects several subscriptions on your connection, you get one status frame per affected subscriptionId.

error

The addressing fields tell you what the error is about:
  • Active-subscription error — carries subscriptionId.
  • Subscription-creation error — carries market + channel (the subscription was never created, so there’s no id).
  • Connection-level error — neither; just code, message, and the requestId you sent.

Error codes

Error codes are SCREAMING_SNAKE_CASE (distinct from the lowercase status state values above). Retryable says whether resending the same request can ever succeed. No means resending is pointless — change the request, free up capacity, or stop. It does not always mean the situation is permanent, so the cell says which. The message on the Kalshi no-side refusal is:
the ‘no’ side isn’t supported for streaming: a Kalshi ticker addresses one YES-priced book, so subscribe with side ‘yes’ or omit it.