Skip to content

Errors and limits

Every KickBot API error has a stable code, a readable message and a request_id. The same codes come back from the REST API and from MCP tools. Normal use stays far below the rate limits: 120 requests per minute and 3,000 per hour for each key or app.

REST errors use the HTTP status code and this body:

{
"error": {
"code": "invalid_input",
"message": "Invalid value for user_cooldown: Must be a number",
"fields": { "user_cooldown": "Must be a number" },
"request_id": "req_Ab12Cd34"
}
}

The response also has the request id in the X-Request-Id header. MCP tools return the same error object in a result with isError: true. Include the request_id when you contact support.

CodeHTTPWhat it meansWhat to do
unauthenticated401The key or token is missing, wrong, expired or revoked.Check the key. Apps reconnect with OAuth.
forbidden403You do not have the team permission, or the key is read-only.Ask the owner for the permission, or use a read and write key.
not_verified403The Kick channel is not connected to KickBot yet.Finish the setup in the dashboard.
limit_reached403A plan limit blocks the change (for example, enabled commands on the Free plan).Turn off or delete an item first. Do not retry.
premium_required403The field or action is only on Premium.Leave the field out. Do not retry.
invalid_input400A field is missing or has a wrong value. fields says which.Fix the input.
not_found404The item or endpoint does not exist on this channel.List the items again.
method_not_allowed405The REST path exists, but not with this HTTP method.Use a method from the Allow header.
conflict409The change conflicts with the current state.Read the item again and retry.
rate_limited429Too many requests.Wait retry_after_seconds (also in the Retry-After header).
upstream_error502A service KickBot depends on (for example Kick) failed.Try again later.
internal_error500Something went wrong at KickBot.Try again later. Contact support if it continues.

A 401 response also has a WWW-Authenticate header that points MCP clients to the OAuth metadata. See Permissions and security.

Limits are per key or connected app. The extra limits below also apply per channel, shared by all keys and apps on it, so many keys cannot multiply them.

Kind of requestLimit
All requests120 per minute, 3,000 per hour
Tests and checks: test alerts, test AI images, tip replays, Kick data refresh, moderator check20 per minute
Clip downloads, VOD downloads and VOD editor clips10 per minute, 100 per day
Voice cloning5 per minute, 30 per day

The API reference shows the extra limit on each action that has one.

Successful REST responses have X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers. A 429 response has a Retry-After header with the number of seconds to wait.

The API follows the same plan limits as the dashboard. get_account_overview returns the limits for your channel in limits:

FieldPremiumFree plan
enabled_custom_commandsnull (no limit)5
timed_messagesnull (no limit)3
vod_downloads_per_daynull (no limit)2
vod_editor_max_clip_seconds10800 (3 hours)1200 (20 minutes)

Field limits are the same as in the dashboard too, for example 500 characters for a command reply. Each field’s limit is in its description in the API reference.