Developer API

Errors and rate limits

The error format, error codes and request limits.

The error format

Every error from the Developer API has the same shape:

{
    "error": {
        "code": "insufficient_scope",
        "message": "This token is missing the events:read scope.",
        "required_scope": "events:read"
    }
}

code is stable, so match on it. message is for people and may change. Some codes add fields next to them, such as required_scope above or fields on a validation error.

Status Code Meaning
401 unauthenticated No token, or the token is unknown, expired or revoked.
409 limit_reached An app already has the most webhooks it may register for this creator.
403 insufficient_scope The token lacks the scope named in required_scope.
403 forbidden The token may not do this, such as subscribing to another creator's channel, or an app token calling a creator endpoint.
403 feature_unavailable The endpoint belongs to a product that is not enabled for the account, such as Gleem IRL or OBS Server Hosting.
404 pairing_not_found No IRL Sidekick is waiting to be paired with this code. It expired or was answered already.
409 device_offline The IRL device is offline, so the command was not sent. Commands are never queued.
404 not_found No such endpoint or resource.
422 validation_failed The request was malformed. fields lists the problems per field.
429 rate_limited Too many requests. Wait for the number of seconds in Retry-After.
5xx server_error Something broke on our side. Retry later.

For an OAuth access token with a good signature, a 401 also says why in the WWW-Authenticate header: error_description="expired" means refresh and retry, "revoked" means ask the creator to connect again. See OAuth apps.

The OAuth endpoints under /oauth answer in the standard OAuth shape instead, {"error": "invalid_grant", "error_description": "…"} (RFC 6749 § 5.2).

Rate limits

Each token may make 120 requests a minute. The limit counts per token, not per address, so tools sharing a network do not share an allowance. An OAuth app's limit counts per creator it is connected to, across all its installs.

Every response carries X-RateLimit-Limit and X-RateLimit-Remaining. Over the limit, the API answers 429 with a Retry-After header.

Events over the WebSocket do not count against the limit. Only the HTTP requests do, including channel authorisation.