Skip to content

Errors

Markdown

A failure always has the same shape, with the real HTTP status:

{
"ok": false,
"error": "missing_scope",
"message": "The app needs the “chat:write” permission.",
"needed": "chat:write"
}

Compare error, which is stable. message is for people and can change. Some codes add fields.

Code Status Meaning and what to do
invalid_auth 401 The token is missing, wrong or replaced. Use the current one
missing_scope 403 The app lacks a permission. needed names it; ask an admin to add it
app_disabled 403 The app is deactivated
not_in_channel 403 The app doesn’t belong to that channel (or it doesn’t exist: we don’t say which)
channel_not_public 403 Only public channels can be joined; a person adds the app to a private one
forbidden 403 The app isn’t allowed to do that there
channel_not_found 404 The channel doesn’t exist
message_not_found 404 The message doesn’t exist
thread_not_found 400 parent_id isn’t a top-level message of that channel
webhook_not_found 404 The webhook URL is wrong or was replaced
response_url_invalid 404 A slash command’s response URL is unknown or expired
response_url_exhausted 429 That response URL has been used 5 times
invalid_arguments 400 The request isn’t valid. details lists { field, message } for each problem
invalid_cursor 400 cursor isn’t one this endpoint returned
invalid_json 400 The body isn’t valid JSON
invalid_content_type 415 Send Content-Type: application/json
request_too_large 413 The body is over 64 KB
message_id_in_use 409 That id belongs to another message
ratelimited 429 Too many requests. Wait Retry-After seconds
internal_error 500 Our fault. Try again in a moment; it is logged on our side

Retry 429 and 5xx with backoff, and nothing else without changing the request. New codes may be added: treat an unknown one like its status class.