Errors & limits
| gRPC status | Message | Meaning and fix |
|---|---|---|
UNAUTHENTICATED | invalid api key | The key is mistyped or deleted. Check it on the API keys page. Do not retry. |
UNAUTHENTICATED | no authorization token found | No key was sent. Firehose reads it from the X-Api-Key metadata; Substreams from SUBSTREAMS_API_KEY or X-Api-Key. Do not retry. |
PERMISSION_DENIED | (varies) | The key is valid but not allowed to use this stream. Check which project and plan the key belongs to; retrying with the same key will not help. |
RESOURCE_EXHAUSTED | you have reached the limit of N credits as part of your "<plan>" subscription plan… | Usage for the month reached the Free allowance or your team's spending cap (ErrorInfo reason CUSTOMER_CREDIT_EXHAUSTED). Upgrade or raise the cap; do not retry until then. |
UNAVAILABLE | service under heavy load, please try connecting again | Temporary. Reconnect with backoff from your last cursor. |
UNAVAILABLE · INTERNAL · connection reset | (varies) | Network or server interruption. Reconnect with backoff from your last cursor. |
Retry pattern: retry only interruptions (UNAVAILABLE, INTERNAL, dropped connections), with exponential backoff, for example from 1 second doubling to a 30-second cap. Always reconnect with the last cursor you saved, so no block is skipped or processed twice. Authentication and credit errors do not clear on retry.
Limits: there is no request-rate limit on Firehose streams; usage is bounded by your plan's credits.