Jump toWhat every error looks like
Developer docs
Errors
Every error the API can send, grouped by what went wrong. Each error’s type link opens its own page here, with what it means and what to do.
What every error looks like
Every error is a JSON object with the same fields, sent as application/problem+json with the HTTP status:
| Field | What it holds |
|---|---|
type | A link to the code’s page in this reference. |
title | The code’s meaning in a short sentence, for people. Its wording can change. |
status | The HTTP status, repeated in the body. |
code | The stable name to branch on. It never changes its meaning. |
request_id | Our ID for this request. Quote it when you contact us. |
detail | Sometimes: more about this occurrence, for people. |
errors | With validation_failed: each wrong field’s path, code and message. |
retry_after | With some 429 and 503 answers: how many seconds to wait first. |
{
"type": "https://docs.mydeepagents.com/errors/not_found",
"title": "The resource was not found.",
"status": 404,
"code": "not_found",
"request_id": "req_01jb8m4s2v7q9x3k5n6p8r0t2w"
}The request
Something about the request itself: its shape, its body, its headers or what it points to.
| Code | Status | Title |
|---|---|---|
bad_request | 400 | The request is malformed. |
not_found | 404 | The resource was not found. |
method_not_allowed | 405 | The method is not allowed on this resource. |
not_acceptable | 406 | No acceptable representation is available. |
unsupported_media_type | 415 | The content type is not supported. |
payload_too_large | 413 | The request body is too large. |
validation_failed | 422 | The request is not valid. |
idempotency_key_reuse | 422 | The idempotency key was used with a different request. |
request_in_progress | 409 | A request with this idempotency key is in progress. |
precondition_failed | 412 | The resource has changed since you read it. |
Signing in
The credential is missing or too old, or a person’s own sign-in needs another step.
| Code | Status | Title |
|---|---|---|
unauthenticated | 401 | Authentication is required. |
token_expired | 401 | The access token has expired. |
step_up_required | 401 | A fresh multi-factor sign-in is required. |
reauth_required | 401 | Confirm it is you first. |
invalid_credentials | 401 | The email or password is not right. |
invalid_code | 401 | The code is not right, or it has expired. |
account_unconfirmed | 401 | This account's email address is not confirmed yet. |
password_reset_required | 401 | This account needs a new password. |
signin_expired | 410 | This sign-in has expired. Start again. |
weak_password | 422 | The password does not meet the rules. |
passkey_unavailable | 422 | A passkey cannot be used here. |
account_exists | 409 | An account with this email already exists. |
password_changed | 409 | The password was changed. Sign in with it. |
Access
The caller is known, but may not do this here.
| Code | Status | Title |
|---|---|---|
permission_denied | 403 | You do not have permission to do this. |
scope_insufficient | 403 | The credential's scope does not allow this. |
policy_denied | 403 | A compliance rule does not allow this. |
ip_not_allowed | 403 | Requests from this address are not allowed. |
task_content_not_visible | 403 | You cannot see what this task asks you to approve. |
tenant_suspended | 451 | The tenant is suspended. |
key_unavailable | 423 | The tenant's encryption key is unavailable. |
chat_disabled | 403 | Chat is turned off for this organization. |
Conflicts and state
The request is fine, but the thing it acts on is not in a state that allows it.
| Code | Status | Title |
|---|---|---|
already_exists | 409 | The resource already exists. |
alias_in_use | 409 | The alias is in use. |
has_children | 409 | The tenant still has child tenants. |
run_in_progress | 409 | A run is already in progress. |
task_already_decided | 409 | Someone has already decided this task. |
export_in_progress | 409 | An export of this organization is already running. |
stream_expired | 410 | The stream is no longer available. |
version_archived | 410 | The version has been archived. |
slot_unbound | 422 | A connection slot is not bound. |
publish_blocked | 422 | The definition cannot be published. |
tool_unavailable | 422 | A chosen tool cannot be used. |
thread_full | 409 | The conversation has reached its message limit. |
AI models
The model provider, its key or the model itself could not do what was asked.
| Code | Status | Title |
|---|---|---|
llm_key_invalid | 422 | The model provider rejected the key. |
llm_key_billing | 422 | The model provider account has a billing problem. |
model_unavailable | 422 | The model is not available here. |
model_param_unsupported | 422 | The model does not support this parameter. |
model_refused | 422 | The model declined the request. |
context_overflow | 422 | The conversation is too long for the model. |
model_retired | 410 | The model has been retired. |
llm_busy | 429 | The model capacity is busy. |
llm_request_invalid | 502 | The model provider rejected the request. |
llm_unavailable | 503 | The model provider is temporarily unavailable. |
llm_timeout | 504 | The model provider did not answer in time. |
Limits
A rate, concurrency or spending limit was reached.
| Code | Status | Title |
|---|---|---|
rate_limited | 429 | Too many requests. |
concurrency_limited | 429 | Too many concurrent operations. |
budget_exceeded | 429 | The budget has been exceeded. |
Website widgets
Answers of the widget gateway, which the chat on a customer’s website talks to.
| Code | Status | Title |
|---|---|---|
widget_key_invalid | 404 | The widget key does not exist. |
widget_key_revoked | 403 | The widget key has been revoked. |
widget_disabled | 403 | The widget is turned off. |
origin_not_allowed | 403 | This site may not show the widget. |
consent_required | 403 | The visitor has not agreed to the consent text yet. |
identity_required | 401 | The visitor must be signed in. |
identity_token_invalid | 401 | The visitor's identity token is not valid. |
session_expired | 401 | The chat session has expired. |
message_too_large | 413 | The message is too long. |
spend_cap_reached | 429 | The widget's daily spending limit is reached. |
uploads_off | 403 | This widget does not accept files. |
upload_too_large | 413 | The file is too large. |
upload_type_not_allowed | 415 | This kind of file can't be attached here. |
upload_unreadable | 422 | The file can't be used. |
voice_off | 403 | This widget does not take voice. |
speech_empty | 422 | No speech was heard. |
speech_unsupported | 422 | This recording or voice can't be used. |
speech_failed | 502 | Speech could not be processed right now. |
Our side
Something on the platform failed or is briefly unavailable.
| Code | Status | Title |
|---|---|---|
internal_error | 500 | Something went wrong on our side. |
unavailable | 503 | The service is temporarily unavailable. |
authz_unavailable | 503 | Authorization is temporarily unavailable. |
Build with us
Ready for your first call?
Early access is open. Tell us what you want your agents to do, and we will help you get your first key.