| 401 | invalid_credential | The API key is missing, malformed, unknown, revoked or replaced. | Check the API key, its permission and its allowlist. |
| 401 | credential_revoked | The key was revoked or rotated while the request ran; a queued generation of a revoked key is canceled and its credits returned. | Check the API key, its permission and its allowlist. |
| 403 | insufficient_scope | The key may not do this: the error names the permission it needs in required_scope. | Check the API key, its permission and its allowlist. |
| 403 | ip_not_allowed | The key cannot be used from this address: it is outside the key's IP allowlist. | Check the API key, its permission and its allowlist. |
| 401 | unauthorized | The website session ended: sign in again. | Change the request before sending it again. |
| 403 | invalid_origin | A website request must come from this site itself. | Change the request before sending it again. |
| 403 | forbidden | The request came without a trusted client address. | Ask the site's support. |
| 400 | invalid_request | The request is malformed: its JSON, its headers (Idempotency-Key, Content-Type) or its query. | Change the request before sending it again. |
| 400 | invalid_input | The input does not fit the model's fields, or the model could not use it. | Change the request before sending it again. |
| 413 | request_too_large | The request body is too large. | Change the request before sending it again. |
| 409 | idempotency_conflict | This Idempotency-Key was already used with a different request. | Change the request before sending it again. |
| 404 | model_unavailable | The model is unknown or not available now. | Change the request before sending it again. |
| 404 | not_found | No such route, generation or file for this account. | Change the request before sending it again. |
| 405 | method_not_allowed | The path does not take this method; Allow lists the ones it takes. | Change the request before sending it again. |
| 409 | not_cancelable | The generation was already sent to its model, or has ended. | Change the request before sending it again. |
| 409 | not_ready | The file is not ready yet. | Wait as Retry-After says, then send it again. |
| 410 | expired | The file was kept for the retention period and has been deleted. | Change the request before sending it again. |
| 400 | request_limit_exceeded | The request would cost more than its max_credits, or than the key's or the site's limit for one request. | Change the request before sending it again. |
| 403 | not_eligible | Generating through the API needs a paid account. | Buy a credit pack or a plan: the API spends paid credits only. |
| 403 | email_unverified | Verify the account's email address to generate. | Change the request before sending it again. |
| 402 | insufficient_credits | Not enough credits: the API spends paid credits only. | Buy a credit pack or a plan: the API spends paid credits only. |
| 403 | generation_restricted | Generating is paused for this account after repeated content refusals; ends_at says until when. | Ask the site's support. |
| 403 | trial_paused | Website trials are paused for this account after several trial outputs went past the trial's limits; ends_at says until when. Requests without a trial go on as usual. | Change the request before sending it again. |
| 429 | key_daily_limit_exceeded | The key's daily spending limit is reached. | Wait as Retry-After says, then send it again. Retry-After: until the next UTC day. |
| 429 | account_daily_limit_exceeded | The account's daily spending limit for the API is reached. | Wait as Retry-After says, then send it again. Retry-After: until the next UTC day. |
| 429 | rate_limited | Too many requests in a short time. | Wait as Retry-After says, then send it again. Retry-After: the limit's window. |
| 429 | too_many_active | Too many of the account's generations are running. | Wait as Retry-After says, then send it again. Retry-After: 30 s. |
| 429 | too_many_under_review | Some of the account's generations wait for a manual check. | Wait as Retry-After says, then send it again. Retry-After: 3,600 s. |
| 503 | busy | Too many generations are running on the site right now. | Wait as Retry-After says, then send it again. Retry-After: 30 s. |
| 503 | paused | Generating is paused for now. | Wait as Retry-After says, then send it again. Retry-After: 60 s. |
| 503 | temporarily_unavailable | The request could not be completed right now. | Send the same request again with the same Idempotency-Key. Retry-After: 60 s. |
| 503 | api_unavailable | Generating is not available yet on this site. | Wait as Retry-After says, then send it again. Retry-After: 60 s. |
| 503 | retry | Something changed while the request ran, such as the key's settings. | Send the same request again with the same Idempotency-Key. Retry-After: 60 s. |
| 503 | unavailable | Files are temporarily unavailable. | Wait as Retry-After says, then send it again. Retry-After: 60 s. |
| 500 | internal_error | Something went wrong on the site. | Send the same request again with the same Idempotency-Key. |
| 400 | request_failed | The request was refused for a reason without a code of its own. | Ask the site's support. |
| 400 | captcha_required | Complete the website's security check. | Change the request before sending it again. |
| 403 | captcha_failed | The website's security check did not pass. | Change the request before sending it again. |
| 503 | captcha_unavailable | The website's security check is unavailable. | Wait as Retry-After says, then send it again. Retry-After: 60 s. |
| 400 | reference_unavailable | A referenced upload is gone, or is not this account's. | Change the request before sending it again. |
| 413 | reference_too_large | Referenced uploads may total at most 10 MB. | Change the request before sending it again. |
| 503 | reference_storage_unavailable | The storage of references is unavailable. | Wait as Retry-After says, then send it again. Retry-After: 60 s. |
| 409 | storage_quota_exceeded | The account's storage is full. | Ask the site's support. |
| In a generation | canceled | The generation was canceled before it was sent; its credits came back. | Change the request before sending it again. |
| In a generation | submission_expired | The generation could not be sent in time; its credits came back. | Send the same request again with the same Idempotency-Key. |
| In a generation | model_busy | The model was busy; the credits came back. | Wait as Retry-After says, then send it again. |
| In a generation | content_rejected | Content safety checks declined the input or the output. | Change the request before sending it again. |
| In a generation | result_expired | The result could not be saved in time. | Ask the site's support. |
| In a generation | generation_failed | The generation failed. | Ask the site's support. |
| In a generation | delivery_failed | The result could not be delivered; its credits came back. | Ask the site's support. |
| In a generation | trial_limit_exceeded | The website trial's output went past the trial's limits and was not delivered; its credits came back. | Change the request before sending it again. |