---
title: "Error codes: what each Lazu API error means"
description: "How to read Lazu error responses, what every error number means, and what to do about each."
source: https://lazu.ai/docs/errors
updated: 2026-10-02
---

# Errors

Every error Lazu returns has three stable identifiers: a Lazu error number
(`LZ-3101`), a `code` (`insufficient_quota`) and a `type`
(`insufficient_quota`). The HTTP status is always real; an error is never
sent with 200.

## Response shape

OpenAI-compatible routes keep OpenAI's error object and add Lazu's fields
next to it. SDKs that only know OpenAI's fields keep working.

```json
{
  "error": {
    "message": "Wallet balance is too low for this request. Top up to continue.",
    "type": "insufficient_quota",
    "param": null,
    "code": "insufficient_quota",
    "lazu": "LZ-3101",
    "docs": "https://lazu.ai/docs/errors#lz-3101",
    "request_id": "req_lazu_01KSBV4MC6THZ9TCZEM38KPYRX",
    "details": {}
  }
}
```

Anthropic-compatible routes (`/v1/messages`) use Anthropic's shape and types:

```json
{
  "type": "error",
  "error": {
    "type": "billing_error",
    "message": "Wallet balance is too low for this request. Top up to continue.",
    "code": "insufficient_quota",
    "lazu": "LZ-3101",
    "docs": "https://lazu.ai/docs/errors#lz-3101"
  },
  "request_id": "req_lazu_01KSBV4MC6THZ9TCZEM38KPYRX"
}
```

| Field        | Meaning                                                               |
| ------------ | --------------------------------------------------------------------- |
| `code`       | What happened. Stable; branch on this.                                |
| `type`       | What to do next (see below). Stable.                                  |
| `lazu`       | Lazu error number. Stable; quote it to support.                       |
| `message`    | English sentence for developers. May change; never parse it.          |
| `param`      | The request field at fault, when there is one.                        |
| `details`    | Structured values, such as `field`, `model` or `retry_after_seconds`. |
| `request_id` | The request this error belongs to.                                    |
| `docs`       | Link to the row for this number below.                                |

Every error response also carries the `X-Lazu-Request-Id` and
`X-Lazu-Error` headers.

## Types

| Type                             | HTTP     | What to do                                                                                       |
| -------------------------------- | -------- | ------------------------------------------------------------------------------------------------ |
| `invalid_request_error`          | 400, 413 | Fix the request. Do not retry unchanged.                                                         |
| `authentication_error`           | 401      | Fix the API key: invalid, expired and disabled keys have their own codes.                        |
| `permission_error`               | 403      | The key or account may not do this: IP, model, vendor or project scope.                          |
| `not_found_error`                | 404      | Wrong path, model or ID.                                                                         |
| `insufficient_quota`             | 429      | Balance or a budget ran out. Top up or raise the budget; retrying will not help.                 |
| `rate_limit_error`               | 429      | Wait for `Retry-After`, then retry.                                                              |
| `content_policy_violation_error` | 400      | The model refused the content. Change the content.                                               |
| `overloaded_error`               | 503      | Busy. Retry later with backoff.                                                                  |
| `timeout_error`                  | 504      | No answer in time. The outcome is unknown; check before replaying.                               |
| `api_connection_error`           | 502      | The connection dropped. The outcome is unknown; check before replaying.                          |
| `api_error`                      | 500, 502 | Lazu or the model failed. Retry idempotent requests; report persistent ones with the request ID. |

On `/v1/messages`, `insufficient_quota` is sent as Anthropic's
`billing_error`, and `timeout_error` / `api_connection_error` as `api_error`.

## Retry strategy

Only retry a replay-safe request before any output was received. For 429, distinguish a temporary rate limit from `insufficient_quota`: insufficient balance requires action, not repeated retries. Respect `Retry-After` when present; use bounded backoff for transient gateway/upstream failures. SDK automatic retries can create another model invocation when execution is uncertain; configure them deliberately. Gateway failover and client retries are separate decisions.

## Streams

Once a stream has started, the HTTP status cannot change. Lazu ends the
stream with the protocol's own error frame carrying the same error object
(`data: {"error": {...}}` then `data: [DONE]` for Chat Completions, an
`error` event for Responses and Messages). Keep any partial output and check
request details before replaying. For 413 `request_body_too_large`, reduce the
request; for 503 `gateway_overloaded`, retry later with backoff.

## Include the request ID in support tickets

Every Lazu response, success or error, includes:

```http
X-Lazu-Request-Id: req_lazu_01KSBV4MC6THZ9TCZEM38KPYRX
```

Paste it, with the `LZ-` number, into any support ticket. We can trace the
full request path through routing, upstream call and billing.

> Some errors describe a problem on Lazu's side, such as a model route that is
> temporarily broken. Those answer with a neutral "temporarily unavailable"
> message; the cause is recorded against the request ID.

## Error reference

### LZ-1xxx · The request

| Number    | Code                          | HTTP | Type                    | What it means and what to do                                                                                            |
| --------- | ----------------------------- | ---- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `LZ-1001` | `invalid_request`             | 400  | `invalid_request_error` | The request is invalid. Check the values you entered and try again.                                                     |
| `LZ-1002` | `bad_request_body`            | 400  | `invalid_request_error` | The model rejected the request body as malformed. Check the request parameters.                                         |
| `LZ-1003` | `model_name_required`         | 400  | `invalid_request_error` | The request does not name a model. Fill in the model parameter.                                                         |
| `LZ-1004` | `request_body_too_large`      | 413  | `invalid_request_error` | The request is too large. Shorten it or split it into smaller requests.                                                 |
| `LZ-1005` | `context_length_exceeded`     | 400  | `invalid_request_error` | The input is longer than this model's context window. Shorten the conversation or choose a model with a longer context. |
| `LZ-1006` | `protocol_bridge_unsupported` | 400  | `invalid_request_error` | This route cannot pass a feature of the request to the selected model. Choose a model that supports it natively.        |
| `LZ-1007` | `capability_unsupported`      | 400  | `invalid_request_error` | The selected model does not support a feature this request uses. Choose a model that supports it.                       |
| `LZ-1008` | `convert_request_failed`      | 400  | `invalid_request_error` | The request could not be converted for the selected model. Check the parameters or choose another model.                |
| `LZ-1009` | `missing_required_parameter`  | 400  | `invalid_request_error` | A required parameter is missing. Check the endpoint reference and add it.                                               |
| `LZ-1010` | `endpoint_not_supported`      | 404  | `not_found_error`       | This endpoint is not supported. Check the request URL.                                                                  |
| `LZ-1011` | `tokenization_error`          | 500  | `api_error`             | The input tokens could not be counted. Check that the input is complete.                                                |
| `LZ-1012` | `resource_not_found`          | 404  | `not_found_error`       | This item was not found. It may have been deleted; refresh and try again.                                               |
| `LZ-1013` | `version_conflict`            | 409  | `conflict_error`        | This record changed after you opened it. Refresh and make your change again.                                            |
| `LZ-1014` | `state_conflict`              | 409  | `conflict_error`        | This action does not apply in the current state. Refresh to see the latest state.                                       |
| `LZ-1901` | `client_canceled`             | 499  | `api_connection_error`  | The request was canceled.                                                                                               |

### LZ-20xx · API keys

| Number    | Code                          | HTTP | Type                   | What it means and what to do                                                                                            |
| --------- | ----------------------------- | ---- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `LZ-2001` | `invalid_api_key`             | 401  | `authentication_error` | The API key is invalid. Check that it was copied in full, or create a new key in the console.                           |
| `LZ-2002` | `token_expired`               | 401  | `authentication_error` | This API key has expired. Extend its expiry in the console or create a new key.                                         |
| `LZ-2003` | `token_disabled`              | 401  | `authentication_error` | This API key is disabled. Enable it in the console or use another key.                                                  |
| `LZ-2004` | `ephemeral_credential_denied` | 403  | `permission_error`     | This temporary credential cannot be used for this request. Use it only with the models and endpoints it was issued for. |
| `LZ-2005` | `proxy_signature_invalid`     | 401  | `authentication_error` | The request origin could not be verified. Try again later; contact support if this continues.                           |

### LZ-21xx · Console sessions

| Number    | Code                    | HTTP | Type                   | What it means and what to do                                               |
| --------- | ----------------------- | ---- | ---------------------- | -------------------------------------------------------------------------- |
| `LZ-2101` | `session_required`      | 401  | `authentication_error` | Sign in to continue.                                                       |
| `LZ-2102` | `session_expired`       | 401  | `authentication_error` | Your session has expired. Sign in again.                                   |
| `LZ-2103` | `session_invalid`       | 401  | `authentication_error` | Your session is no longer valid. Sign in again.                            |
| `LZ-2104` | `session_user_mismatch` | 401  | `authentication_error` | This page belongs to a different signed-in account. Reload the page.       |
| `LZ-2105` | `access_token_invalid`  | 401  | `authentication_error` | The access token is invalid. Generate a new access token in your settings. |

### LZ-22xx · Sign-in and registration

| Number    | Code                                   | HTTP | Type                    | What it means and what to do                                                                 |
| --------- | -------------------------------------- | ---- | ----------------------- | -------------------------------------------------------------------------------------------- |
| `LZ-2201` | `password_login_disabled`              | 403  | `permission_error`      | Password sign-in is turned off. Use another sign-in method.                                  |
| `LZ-2202` | `invalid_credentials`                  | 401  | `authentication_error`  | The username or password is incorrect, or the account is disabled. Check them and try again. |
| `LZ-2203` | `registration_closed`                  | 403  | `permission_error`      | New registrations are closed. Contact the administrator if you need an account.              |
| `LZ-2204` | `password_registration_disabled`       | 403  | `permission_error`      | Signing up with a password is turned off. Sign up with an email code or a linked account.    |
| `LZ-2205` | `email_verification_required`          | 400  | `invalid_request_error` | A verified email address is required. Enter your email and its verification code.            |
| `LZ-2206` | `verification_code_invalid`            | 400  | `invalid_request_error` | The verification code is incorrect or has expired. Check it, or request a new one.           |
| `LZ-2207` | `verification_code_attempts_exhausted` | 429  | `rate_limit_error`      | Too many incorrect attempts, so this code no longer works. Request a new code.               |
| `LZ-2210` | `email_code_auth_disabled`             | 403  | `permission_error`      | Email code sign-in is turned off. Use another sign-in method.                                |
| `LZ-2211` | `email_transport_unavailable`          | 503  | `api_error`             | Email codes cannot be sent right now. Use another sign-in method.                            |
| `LZ-2215` | `original_password_incorrect`          | 400  | `invalid_request_error` | The current password is incorrect. Check it and try again.                                   |
| `LZ-2216` | `oauth_provider_not_configured`        | 404  | `not_found_error`       | This sign-in method is not available. Use another one.                                       |
| `LZ-2217` | `oauth_cancelled`                      | 400  | `invalid_request_error` | Authorization was cancelled, so you were not signed in.                                      |
| `LZ-2218` | `oauth_provider_error`                 | 502  | `api_error`             | The sign-in provider returned an error. Try again later.                                     |
| `LZ-2219` | `oauth_state_invalid`                  | 400  | `invalid_request_error` | This sign-in attempt has expired. Start signing in again.                                    |
| `LZ-2220` | `oauth_exchange_failed`                | 502  | `api_error`             | Sign-in could not be completed with the provider. Try again later.                           |
| `LZ-2221` | `oauth_identity_invalid`               | 401  | `authentication_error`  | Your identity from the sign-in provider could not be verified. Try again later.              |
| `LZ-2222` | `oauth_login_failed`                   | 500  | `api_error`             | Sign-in did not complete. Try again later.                                                   |
| `LZ-2223` | `oauth_email_unverified`               | 403  | `permission_error`      | That account has no verified email address. Verify one with the provider, then try again.    |
| `LZ-2224` | `oauth_email_conflict`                 | 409  | `conflict_error`        | This email address matches more than one account. Contact the administrator.                 |
| `LZ-2225` | `oauth_identity_conflict`              | 409  | `conflict_error`        | This provider account is already linked to another user. Sign in as that user instead.       |

### LZ-23xx · Access

| Number    | Code                       | HTTP | Type               | What it means and what to do                                                                         |
| --------- | -------------------------- | ---- | ------------------ | ---------------------------------------------------------------------------------------------------- |
| `LZ-2301` | `access_denied`            | 403  | `permission_error` | You don't have permission to do this. Ask an administrator for access.                               |
| `LZ-2302` | `ip_not_allowed`           | 403  | `permission_error` | This API key does not accept requests from your current IP address. Check the key's IP restrictions. |
| `LZ-2303` | `user_banned`              | 403  | `permission_error` | This account has been disabled. Contact an administrator if you have questions.                      |
| `LZ-2304` | `group_access_denied`      | 403  | `permission_error` | This account cannot use the requested lane. Choose another lane.                                     |
| `LZ-2305` | `channel_selection_denied` | 403  | `permission_error` | Only administrators can pin a request to a specific channel.                                         |
| `LZ-2306` | `project_access_suspended` | 403  | `permission_error` | Your access to this project is suspended. Contact a project admin.                                   |
| `LZ-2307` | `address_not_enabled`      | 403  | `permission_error` | This API address is not enabled for your account. Switch back to the default API address.            |

### LZ-26xx · Decisions

| Number    | Code                             | HTTP | Type                    | What it means and what to do                                                   |
| --------- | -------------------------------- | ---- | ----------------------- | ------------------------------------------------------------------------------ |
| `LZ-2601` | `missing_questions`              | 400  | `invalid_request_error` | Supply questions or enable automatic question generation.                      |
| `LZ-2602` | `invalid_decision_state`         | 400  | `invalid_request_error` | Supply text or JSON state, or embedded images.                                 |
| `LZ-2603` | `invalid_decision_questions`     | 400  | `invalid_request_error` | The decision questions are invalid.                                            |
| `LZ-2604` | `unsupported_question_type`      | 400  | `invalid_request_error` | This question type is not supported.                                           |
| `LZ-2605` | `unsupported_decision_input`     | 400  | `invalid_request_error` | This input is not supported by the decision model.                             |
| `LZ-2606` | `unsupported_decision_parameter` | 400  | `invalid_request_error` | This parameter is not supported. Decisions do not support streaming.           |
| `LZ-2607` | `question_generation_failed`     | 502  | `api_error`             | Question generation failed validation. The generation charge will be refunded. |
| `LZ-2608` | `upstream_decision_invalid`      | 502  | `api_error`             | The decision provider returned an invalid response.                            |
| `LZ-2609` | `upstream_capacity`              | 429  | `rate_limit_error`      | Upstream capacity is exhausted. Retry after the indicated delay.               |

### LZ-3xxx · Wallet and budgets

| Number    | Code                             | HTTP | Type                 | What it means and what to do                                                                                        |
| --------- | -------------------------------- | ---- | -------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `LZ-3101` | `insufficient_quota`             | 429  | `insufficient_quota` | Your wallet balance is too low for this request. Top up to continue.                                                |
| `LZ-3201` | `key_budget_exceeded`            | 429  | `insufficient_quota` | This API key's budget cannot cover the request, so it was not sent. Raise the key budget or lower the output limit. |
| `LZ-3202` | `pre_consume_token_quota_failed` | 429  | `insufficient_quota` | This API key's remaining allowance cannot cover the request. Raise the allowance or use another key.                |
| `LZ-3301` | `member_budget_exceeded`         | 429  | `insufficient_quota` | Your monthly member budget is used up. Ask a project admin to adjust it.                                            |
| `LZ-3401` | `project_budget_exceeded`        | 429  | `insufficient_quota` | The project budget is used up. Ask a project admin to adjust it.                                                    |
| `LZ-3501` | `platform_budget_exceeded`       | 429  | `insufficient_quota` | The platform spending limit has been reached. Contact the platform administrator.                                   |
| `LZ-3601` | `pricing_not_configured`         | 503  | `api_error`          | This model has no price on the selected lane yet, so it can't be used. Choose another model.                        |

### LZ-4xxx · Models and routes

| Number    | Code                         | HTTP | Type                             | What it means and what to do                                                                                                                     |
| --------- | ---------------------------- | ---- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `LZ-4001` | `model_not_found`            | 404  | `not_found_error`                | This model is not in the model catalog. Check the model name.                                                                                    |
| `LZ-4002` | `model_not_allowed`          | 403  | `permission_error`               | This API key is not allowed to use the requested model. Check the key's model scope.                                                             |
| `LZ-4003` | `token_vendor_denied`        | 403  | `permission_error`               | This API key is not allowed to use models from this vendor. Check the key's vendor scope.                                                        |
| `LZ-4101` | `no_available_channel`       | 503  | `overloaded_error`               | No route can serve this model right now. Try again later or choose another model.                                                                |
| `LZ-4102` | `invalid_channel_id`         | 400  | `invalid_request_error`          | The requested channel ID is invalid.                                                                                                             |
| `LZ-4103` | `channel_disabled`           | 403  | `permission_error`               | The requested channel is disabled.                                                                                                               |
| `LZ-4104` | `channel_config_invalid`     | 503  | `api_error`                      | This model is temporarily unavailable and the request was not completed. Try again later.                                                        |
| `LZ-4105` | `channel_no_available_key`   | 503  | `overloaded_error`               | This model is temporarily unavailable and the request was not completed. Try again later.                                                        |
| `LZ-4106` | `preferred_lane_unavailable` | 503  | `overloaded_error`               | This model is not available on the lane this API key is pinned to, and automatic fallback is off. Choose another model or change the key's lane. |
| `LZ-4301` | `prompt_blocked`             | 400  | `content_policy_violation_error` | The model refused this content under its content policy. Revise the content and try again.                                                       |

### LZ-5xxx · Rate and capacity

| Number    | Code                                | HTTP | Type               | What it means and what to do                                                                   |
| --------- | ----------------------------------- | ---- | ------------------ | ---------------------------------------------------------------------------------------------- |
| `LZ-5001` | `token_rate_limit_exceeded`         | 429  | `rate_limit_error` | This API key is sending requests too quickly. Wait for the Retry-After interval and try again. |
| `LZ-5002` | `request_rate_limit_exceeded`       | 429  | `rate_limit_error` | Too many requests. Wait a moment and try again.                                                |
| `LZ-5003` | `total_request_rate_limit_exceeded` | 429  | `rate_limit_error` | The total request limit has been reached. Wait a moment and try again.                         |
| `LZ-5101` | `gateway_overloaded`                | 503  | `overloaded_error` | The gateway is busy right now. Try again shortly.                                              |
| `LZ-5201` | `upstream_rate_limited`             | 429  | `rate_limit_error` | This model is limiting requests right now. Try again shortly.                                  |
| `LZ-5301` | `too_many_attempts`                 | 429  | `rate_limit_error` | Too many attempts. Wait a moment and try again.                                                |

### LZ-6xxx · Upstream providers

| Number    | Code                        | HTTP | Type                   | What it means and what to do                                                                             |
| --------- | --------------------------- | ---- | ---------------------- | -------------------------------------------------------------------------------------------------------- |
| `LZ-6001` | `upstream_error`            | 502  | `api_error`            | The model returned an error. Try again later.                                                            |
| `LZ-6002` | `upstream_invalid_response` | 502  | `api_error`            | The model's response could not be used. Check whether a result was produced before you retry.            |
| `LZ-6003` | `upstream_stream_failed`    | 502  | `api_error`            | The model stopped with an error while streaming. Check the partial output before you retry.              |
| `LZ-6101` | `upstream_timeout`          | 504  | `timeout_error`        | The model did not respond in time, so the outcome is unconfirmed. Check your usage log before resending. |
| `LZ-6201` | `upstream_network_error`    | 502  | `api_connection_error` | The connection to the model failed. Try again shortly.                                                   |
| `LZ-6202` | `upstream_overloaded`       | 503  | `overloaded_error`     | The model is busy right now. Try again shortly.                                                          |
| `LZ-6301` | `upstream_auth_failed`      | 502  | `api_error`            | This model is temporarily unavailable and the request was not completed. Try again later.                |
| `LZ-6302` | `upstream_billing_failed`   | 502  | `api_error`            | This model is temporarily unavailable and the request was not completed. Try again later.                |

### LZ-7xxx · Console

| Number    | Code                                     | HTTP | Type                    | What it means and what to do                                                                                                                           |
| --------- | ---------------------------------------- | ---- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `LZ-7001` | `user_not_found`                         | 404  | `not_found_error`       | The user was not found. It may have been deleted; refresh the list.                                                                                    |
| `LZ-7002` | `user_exists`                            | 409  | `conflict_error`        | This username or email is already registered, or belonged to a deleted account. Choose another.                                                        |
| `LZ-7003` | `user_manage_forbidden`                  | 403  | `permission_error`      | You cannot manage an account whose role is equal to or higher than yours.                                                                              |
| `LZ-7004` | `user_role_elevation_forbidden`          | 403  | `permission_error`      | You cannot give an account a role equal to or higher than your own.                                                                                    |
| `LZ-7005` | `root_user_protected`                    | 403  | `permission_error`      | This admin can't be disabled, deleted or demoted: you can't demote yourself or remove the last admin.                                                  |
| `LZ-7006` | `user_role_unchanged`                    | 409  | `conflict_error`        | This account already has that role.                                                                                                                    |
| `LZ-7007` | `balance_adjustment_reason_required`     | 400  | `invalid_request_error` | Enter a reason for the balance adjustment.                                                                                                             |
| `LZ-7008` | `balance_adjustment_amount_zero`         | 400  | `invalid_request_error` | The adjustment amount cannot be zero. Enter a positive or negative amount.                                                                             |
| `LZ-7009` | `username_invalid`                       | 400  | `invalid_request_error` | Usernames are 2–20 letters, digits, underscores or hyphens, starting with a letter or digit.                                                           |
| `LZ-7010` | `username_unavailable`                   | 409  | `conflict_error`        | This username is taken or reserved. Choose another.                                                                                                    |
| `LZ-7011` | `username_change_cooldown`               | 429  | `rate_limit_error`      | A username can be changed once every {{cooldown\_days}} days. Try again after the waiting period.                                                      |
| `LZ-7012` | `identity_unlink_unavailable`            | 403  | `permission_error`      | Linked sign-in methods cannot be removed yet.                                                                                                          |
| `LZ-7101` | `topup_order_not_found`                  | 404  | `not_found_error`       | No top-up order has this trade number. Check the number and try again.                                                                                 |
| `LZ-7102` | `topup_order_not_pending`                | 409  | `conflict_error`        | This top-up order is no longer pending, so it can't be completed manually. Refresh the list to see its status.                                         |
| `LZ-7103` | `topup_method_unsupported`               | 400  | `invalid_request_error` | Only Stripe top-up orders can be completed manually.                                                                                                   |
| `LZ-7104` | `topup_credit_invalid`                   | 409  | `conflict_error`        | This top-up order has no amount to credit, so it can't be completed. Check the order in Stripe.                                                        |
| `LZ-7105` | `topup_search_keyword_invalid`           | 400  | `invalid_request_error` | A search needs at least 2 characters other than %, \_ and !. Enter a longer order number.                                                              |
| `LZ-7106` | `invalid_amount`                         | 400  | `invalid_request_error` | The top-up amount must be a whole number of dollars within the allowed range. Change the amount and try again.                                         |
| `LZ-7107` | `payment_not_found`                      | 404  | `not_found_error`       | This payment was not found. It may belong to another account; check the link.                                                                          |
| `LZ-7108` | `invoice_unavailable`                    | 404  | `not_found_error`       | The invoice or receipt for this payment isn't ready yet. Try again in a few minutes.                                                                   |
| `LZ-7109` | `payment_provider_unavailable`           | 503  | `api_error`             | The payment service is temporarily unavailable. Try again in a few minutes.                                                                            |
| `LZ-7110` | `no_billing_customer`                    | 409  | `conflict_error`        | This project has no billing profile yet. It's created with the first payment.                                                                          |
| `LZ-7111` | `wallet_ledger_range_invalid`            | 400  | `invalid_request_error` | This date range can't be shown. Choose a range of at most 32 days.                                                                                     |
| `LZ-7112` | `dispute_still_open`                     | 409  | `conflict_error`        | Stripe hasn't closed this dispute with that outcome yet. Record the outcome after Stripe closes it.                                                    |
| `LZ-7113` | `dispute_resolution_failed`              | 409  | `conflict_error`        | The dispute outcome could not be recorded for this top-up. Check the top-up and dispute ID.                                                            |
| `LZ-7114` | `payment_document_reconcile_failed`      | 503  | `api_error`             | The invoice and receipt could not be reconciled with Stripe. Try again later.                                                                          |
| `LZ-7121` | `referral_unavailable`                   | 500  | `invalid_request_error` | Referral details are temporarily unavailable. Retry later.                                                                                             |
| `LZ-7122` | `referral_code_invalid`                  | 400  | `invalid_request_error` | Use 3–20 lowercase letters, digits or hyphens, not starting or ending with a hyphen.                                                                   |
| `LZ-7123` | `referral_code_reserved`                 | 400  | `invalid_request_error` | That name isn't available. Try another.                                                                                                                |
| `LZ-7124` | `referral_code_taken`                    | 409  | `invalid_request_error` | Someone already uses that name.                                                                                                                        |
| `LZ-7125` | `referral_code_limit`                    | 409  | `invalid_request_error` | You've used all your renames.                                                                                                                          |
| `LZ-7126` | `promotion_unavailable`                  | 500  | `invalid_request_error` | Promotion settings are temporarily unavailable. Retry later.                                                                                           |
| `LZ-7127` | `promotion_config_invalid`               | 400  | `invalid_request_error` | Check the promotion percentages, caps and time windows.                                                                                                |
| `LZ-7128` | `referral_status_invalid`                | 400  | `invalid_request_error` | This referral status filter is invalid.                                                                                                                |
| `LZ-7129` | `referral_search_invalid`                | 400  | `invalid_request_error` | This referral search is invalid.                                                                                                                       |
| `LZ-7130` | `referral_not_found`                     | 400  | `invalid_request_error` | The referral reward was not found.                                                                                                                     |
| `LZ-7131` | `referral_not_pending`                   | 409  | `invalid_request_error` | This referral reward is no longer pending.                                                                                                             |
| `LZ-7201` | `key_name_too_long`                      | 400  | `invalid_request_error` | This API key name is too long. Keep it within {{max\_length}} characters.                                                                              |
| `LZ-7202` | `key_enable_blocked`                     | 409  | `conflict_error`        | This API key has expired or used up its allowance, so it can't be enabled. Extend its expiry or raise its allowance first.                             |
| `LZ-7203` | `key_limit_reached`                      | 409  | `conflict_error`        | You already hold {{limit}} API keys in this project, the most allowed. Delete a key you no longer use, then create a new one.                          |
| `LZ-7204` | `secret_unavailable`                     | 409  | `conflict_error`        | Only a fingerprint of this API key was kept, so the full key can't be shown. Create a new key if you need the full value.                              |
| `LZ-7205` | `key_not_found`                          | 404  | `not_found_error`       | This API key no longer exists. It may have been deleted. Refresh the page.                                                                             |
| `LZ-7301` | `channel_not_found`                      | 404  | `not_found_error`       | This channel no longer exists. It may have been deleted; refresh the list.                                                                             |
| `LZ-7302` | `channel_search_backend_managed`         | 409  | `conflict_error`        | This channel is a search backend, so it cannot be changed here. Manage it on the Search backends page.                                                 |
| `LZ-7303` | `channel_lane_invalid`                   | 400  | `invalid_request_error` | Lane “{{lane}}” does not exist. A channel belongs to exactly one existing lane; pick one from the list.                                                |
| `LZ-7304` | `channel_settings_invalid`               | 400  | `invalid_request_error` | The channel's extra settings could not be read, so nothing was saved. Check the JSON format and values.                                                |
| `LZ-7305` | `channel_model_name_too_long`            | 400  | `invalid_request_error` | A model name is longer than 255 characters, so the channel was not saved. Shorten or remove it.                                                        |
| `LZ-7306` | `channel_not_multi_key`                  | 409  | `conflict_error`        | This channel uses a single key, so its keys cannot be managed one by one.                                                                              |
| `LZ-7307` | `channel_key_index_invalid`              | 400  | `invalid_request_error` | That key is no longer in this channel. Refresh the key list and try again.                                                                             |
| `LZ-7308` | `channel_last_key`                       | 409  | `conflict_error`        | This is the channel's last key, so it cannot be deleted. Add another key first, or delete the channel.                                                 |
| `LZ-7309` | `channel_keys_none_eligible`             | 409  | `conflict_error`        | No key matches this action, so nothing changed.                                                                                                        |
| `LZ-7310` | `channel_balance_unsupported`            | 400  | `invalid_request_error` | Balance lookup is not available for this channel type or for multi-key channels.                                                                       |
| `LZ-7311` | `channel_balance_query_failed`           | 502  | `api_error`             | The upstream did not return a balance. Check the channel's key and base URL, then try again.                                                           |
| `LZ-7312` | `channel_upstream_models_failed`         | 502  | `api_error`             | The upstream did not return a model list. Check the key and base URL, or add models by hand.                                                           |
| `LZ-7313` | `channel_task_running`                   | 409  | `conflict_error`        | The same maintenance task is already running, so a new one was not started. Try again when it finishes.                                                |
| `LZ-7314` | `channel_test_failed`                    | 502  | `api_error`             | The channel test failed: the upstream returned an error. Check the key, base URL and test model, then test again.                                      |
| `LZ-7315` | `channel_test_not_sent`                  | 422  | `invalid_request_error` | The test could not be built for this channel, so nothing was sent upstream. Check its type, model mapping and pricing.                                 |
| `LZ-7316` | `channel_route_not_found`                | 404  | `not_found_error`       | This channel does not serve that model in that lane. Refresh the page to see its current routes.                                                       |
| `LZ-7317` | `route_observation_incomplete`           | 409  | `conflict_error`        | This source is still under observation. It can go live after seven days, once every check has passed.                                                  |
| `LZ-7318` | `route_observation_none`                 | 404  | `not_found_error`       | This source has no models under observation. Refresh the page to see its current state.                                                                |
| `LZ-7401` | `setting_invalid`                        | 400  | `invalid_request_error` | A setting value was not accepted, so it was not saved. Check its format and value, then save again.                                                    |
| `LZ-7402` | `content_limit_exceeded`                 | 400  | `invalid_request_error` | This list can hold at most {{limit}} items. Remove some and save again.                                                                                |
| `LZ-7403` | `announcement_not_found`                 | 404  | `not_found_error`       | This announcement no longer exists. Refresh the list.                                                                                                  |
| `LZ-7404` | `email_test_failed`                      | 502  | `api_error`             | The test email could not be sent. Check the SMTP settings; the mail server's reply is in the server log.                                               |
| `LZ-7405` | `email_test_recipient_missing`           | 400  | `invalid_request_error` | Your account has no email address, so there is nowhere to send the test. Add an email address to your account first.                                   |
| `LZ-7406` | `email_recipients_required`              | 400  | `invalid_request_error` | No recipients were chosen, so nothing was sent. Choose users or send to everyone.                                                                      |
| `LZ-7407` | `announcement_email_content_missing`     | 400  | `invalid_request_error` | There is no announcement to send. Enter a title and content, or publish an announcement first.                                                         |
| `LZ-7408` | `translation_token_missing`              | 400  | `invalid_request_error` | Translation needs an API key of your own, and you have none that works. Create or enable a key, then try again.                                        |
| `LZ-7409` | `feedback_request_not_found`             | 404  | `not_found_error`       | No request with this ID was found for your account. Check the request ID.                                                                              |
| `LZ-7410` | `database_unreachable`                   | 503  | `api_error`             | The server cannot reach its database. Check the database service and try again.                                                                        |
| `LZ-7411` | `email_domain_not_allowed`               | 400  | `invalid_request_error` | This email domain is not accepted here. Use an address from an allowed domain.                                                                         |
| `LZ-7412` | `email_alias_not_allowed`                | 400  | `invalid_request_error` | Addresses with “+” or “.” before the @ are not accepted. Use your plain address.                                                                       |
| `LZ-7413` | `password_invalid`                       | 400  | `invalid_request_error` | The password must be 8 to 64 characters and no more than 72 bytes. Choose another password.                                                            |
| `LZ-7414` | `password_reset_link_invalid`            | 400  | `invalid_request_error` | This reset link is invalid or has expired. Request a new one.                                                                                          |
| `LZ-7415` | `password_reset_client_upgrade_required` | 400  | `invalid_request_error` | This page is out of date and your link has not been used. Reload the page and set the password again.                                                  |
| `LZ-7421` | `mail_not_found`                         | 404  | `invalid_request_error` | The archived mail was not found.                                                                                                                       |
| `LZ-7422` | `mail_resend_failed`                     | 400  | `invalid_request_error` | The archived mail could not be resent. Check the delivery details.                                                                                     |
| `LZ-7423` | `admin_email_missing`                    | 400  | `invalid_request_error` | Add an email address to your account before sending a preview.                                                                                         |
| `LZ-7424` | `mail_regenerate_failed`                 | 400  | `invalid_request_error` | The mail could not be regenerated. Regenerate drafts from the usage digest page.                                                                       |
| `LZ-7425` | `digest_settings_invalid`                | 400  | `invalid_request_error` | The digest settings are invalid.                                                                                                                       |
| `LZ-7426` | `mail_send_failed`                       | 400  | `invalid_request_error` | The mail could not be sent. Check the delivery details.                                                                                                |
| `LZ-7501` | `model_name_taken`                       | 409  | `conflict_error`        | A model named {{model}} already exists. Choose another name or edit the existing model.                                                                |
| `LZ-7502` | `vendor_name_taken`                      | 409  | `conflict_error`        | A vendor named {{vendor}} already exists. Choose another name or edit the existing vendor.                                                             |
| `LZ-7503` | `prefill_group_name_taken`               | 409  | `conflict_error`        | A prefill group named {{name}} already exists. Choose another name.                                                                                    |
| `LZ-7504` | `model_sync_not_configured`              | 503  | `api_error`             | Model metadata sync is not set up on this server. Set the metadata endpoint URLs in the server environment and restart it.                             |
| `LZ-7505` | `model_sync_source_unavailable`          | 502  | `api_error`             | The {{source}} catalog could not be read, so nothing was synced. Try again later.                                                                      |
| `LZ-7510` | `lane_not_found`                         | 404  | `not_found_error`       | Lane {{lane}} does not exist. Refresh to see the current lanes.                                                                                        |
| `LZ-7511` | `lane_builtin_locked`                    | 409  | `conflict_error`        | Lane {{lane}} is built in, so it cannot be stopped or deleted.                                                                                         |
| `LZ-7512` | `lane_ever_enabled`                      | 409  | `conflict_error`        | Lane {{lane}} has carried traffic before, so it cannot be deleted. Stop it instead.                                                                    |
| `LZ-7513` | `lane_has_no_sources`                    | 409  | `conflict_error`        | Lane {{lane}} has no sources yet; enabling it would drop every request sent to it. Move a source into it first.                                        |
| `LZ-7514` | `lane_in_use`                            | 409  | `conflict_error`        | Lane {{lane}} still has sources, prices or discounts. Move or remove them before deleting the lane.                                                    |
| `LZ-7520` | `tier_not_found`                         | 404  | `not_found_error`       | Tier {{tier}} does not exist. Refresh to see the current tiers.                                                                                        |
| `LZ-7521` | `tier_exists`                            | 409  | `conflict_error`        | A tier named {{tier}} already exists. Choose another name or edit that tier.                                                                           |
| `LZ-7522` | `tier_builtin_locked`                    | 409  | `conflict_error`        | Tier {{tier}} is built in, so it cannot be deleted.                                                                                                    |
| `LZ-7523` | `tier_has_accounts`                      | 409  | `conflict_error`        | Tier {{tier}} still has accounts in it. Move them to another tier on the Users page, then delete it.                                                   |
| `LZ-7530` | `sell_price_missing`                     | 400  | `invalid_request_error` | No sell price was entered. Enter at least one price before saving.                                                                                     |
| `LZ-7531` | `sell_price_model_listed`                | 409  | `conflict_error`        | {{model}} is still listed, so its price cannot be removed. Unlist the model first.                                                                     |
| `LZ-7532` | `sell_price_model_served`                | 409  | `conflict_error`        | Enabled channels still serve {{model}}; without a price its requests would be refused. Disable those channels first.                                   |
| `LZ-7533` | `sell_price_model_discounted`            | 409  | `conflict_error`        | {{model}} still has an active discount. Remove the discount before removing the price.                                                                 |
| `LZ-7534` | `model_listing_unpriced`                 | 409  | `conflict_error`        | These models have no sell price on any lane and would be billed at $0: {{models}}. Set a price before listing them.                                    |
| `LZ-7535` | `model_listing_no_source`                | 409  | `conflict_error`        | These models have no enabled source on lane {{lane}}: {{models}}. Add a source before listing them.                                                    |
| `LZ-7601` | `feature_unavailable`                    | 403  | `permission_error`      | Team projects are not enabled for this account.                                                                                                        |
| `LZ-7602` | `project_context_mismatch`               | 400  | `invalid_request_error` | The project on this page does not match the project in the request. Reload the page.                                                                   |
| `LZ-7603` | `project_not_found`                      | 404  | `not_found_error`       | This project was not found, or you are no longer a member.                                                                                             |
| `LZ-7604` | `project_member_not_found`               | 404  | `not_found_error`       | This person is not a member of the project. Refresh the member list.                                                                                   |
| `LZ-7605` | `invite_not_found`                       | 404  | `not_found_error`       | This invitation link is not valid. Ask for a new invitation.                                                                                           |
| `LZ-7606` | `budget_request_not_found`               | 404  | `not_found_error`       | This budget request no longer exists. Refresh the list.                                                                                                |
| `LZ-7607` | `undo_expired`                           | 409  | `conflict_error`        | The 10 minutes to undo have passed. Invite the person again.                                                                                           |
| `LZ-7608` | `invalid_budget`                         | 400  | `invalid_request_error` | The budget must be zero or more, or left empty for no limit. Check the amount and save again.                                                          |
| `LZ-7609` | `invalid_effort_cap`                     | 400  | `invalid_request_error` | This reasoning effort cap is not an available level. Choose one from the list.                                                                         |
| `LZ-7610` | `invalid_settings`                       | 400  | `invalid_request_error` | A project setting has an invalid value. Check the settings and save again.                                                                             |
| `LZ-7611` | `cannot_edit_own_budget`                 | 403  | `permission_error`      | You can't change your own budget. Ask another admin to change it.                                                                                      |
| `LZ-7612` | `cannot_change_owner`                    | 403  | `permission_error`      | The owner's role and status can't be changed.                                                                                                          |
| `LZ-7613` | `confirm_mismatch`                       | 400  | `invalid_request_error` | The project name doesn't match. Type the name exactly as shown.                                                                                        |
| `LZ-7614` | `resend_too_soon`                        | 429  | `rate_limit_error`      | This invitation was just sent. Wait a minute before resending.                                                                                         |
| `LZ-7615` | `request_pending`                        | 409  | `conflict_error`        | A budget request is already pending. Wait for it to be handled, or withdraw it first.                                                                  |
| `LZ-7616` | `invalid_pagination`                     | 400  | `invalid_request_error` | This page of the list can't be shown. Refresh the page.                                                                                                |
| `LZ-7617` | `already_member`                         | 409  | `conflict_error`        | This person is already a member.                                                                                                                       |
| `LZ-7618` | `already_invited`                        | 409  | `conflict_error`        | This address already has a pending invitation. Resend that invitation instead.                                                                         |
| `LZ-7619` | `invite_expired`                         | 409  | `conflict_error`        | This invitation has expired. Ask for a new one.                                                                                                        |
| `LZ-7620` | `invite_revoked`                         | 409  | `conflict_error`        | This invitation was revoked. Ask for a new one if you still need access.                                                                               |
| `LZ-7621` | `invite_email_mismatch`                  | 403  | `permission_error`      | This invitation was sent to a different email address. Sign in with that address to accept it.                                                         |
| `LZ-7622` | `invite_email_unverified`                | 403  | `permission_error`      | Verify your email address before accepting this invitation.                                                                                            |
| `LZ-7623` | `invitee_feature_unavailable`            | 403  | `permission_error`      | That account cannot join a project yet. Try a different email, or check again later.                                                                   |
| `LZ-7624` | `invite_email_invalid`                   | 400  | `invalid_request_error` | This email address is not valid. Check it and try again.                                                                                               |
| `LZ-7625` | `invite_role_invalid`                    | 400  | `invalid_request_error` | Choose admin or member as the role.                                                                                                                    |
| `LZ-7626` | `project_name_invalid`                   | 400  | `invalid_request_error` | The project name can't be empty or longer than 191 characters.                                                                                         |
| `LZ-7627` | `project_deletion_dependency`            | 409  | `conflict_error`        | This account still owns or belongs to a team project whose members, payments or Keys depend on it. Resolve those projects before deleting the account. |
| `LZ-7701` | `usage_range_invalid`                    | 400  | `invalid_request_error` | The end of the time range is earlier than its start. Adjust the range and try again.                                                                   |
| `LZ-7702` | `usage_range_too_long`                   | 400  | `invalid_request_error` | The time range is longer than {{max\_days}} days. Choose a shorter range.                                                                              |
| `LZ-7703` | `invalid_usage_summary_window`           | 400  | `invalid_request_error` | The usage summary window is invalid. Check since, until and granularity.                                                                               |
| `LZ-7704` | `request_not_found`                      | 404  | `not_found_error`       | No request with this ID was found for this API key. Check the request ID.                                                                              |
| `LZ-7705` | `log_session_not_found`                  | 404  | `not_found_error`       | This session was not found in the logs you can view. Refresh the page.                                                                                 |
| `LZ-7706` | `usage_export_format_unsupported`        | 400  | `invalid_request_error` | This export format is not supported. Export as CSV or XLSX.                                                                                            |
| `LZ-7707` | `log_cleanup_cutoff_too_recent`          | 400  | `invalid_request_error` | Logs from the last {{min\_days}} days are kept for model rankings. Choose an earlier cutoff date.                                                      |
| `LZ-7708` | `spend_budget_not_found`                 | 404  | `not_found_error`       | This spend budget no longer exists. It may have been deleted. Refresh the page.                                                                        |
| `LZ-7801` | `purpose_not_supported`                  | 400  | `invalid_request_error` | This file purpose is not supported. Upload it as user\_data or vision.                                                                                 |
| `LZ-7802` | `invalid_file`                           | 400  | `invalid_request_error` | The file was not accepted. Check its type and contents, then upload it again.                                                                          |
| `LZ-7803` | `file_too_large`                         | 413  | `invalid_request_error` | The file is larger than the size limit. Upload a smaller file.                                                                                         |
| `LZ-7804` | `file_not_found`                         | 404  | `not_found_error`       | This file was not found or you can't access it. Check the file ID.                                                                                     |
| `LZ-7805` | `file_expired`                           | 400  | `invalid_request_error` | This file has expired and can no longer be used. Upload it again.                                                                                      |
| `LZ-7806` | `file_dereference_failed`                | 502  | `api_error`             | The file could not be loaded from storage, so the request was not sent. Try again shortly.                                                             |
| `LZ-7807` | `file_storage_failed`                    | 502  | `api_error`             | File storage did not finish the operation. Try again shortly.                                                                                          |
| `LZ-7808` | `storage_not_configured`                 | 503  | `api_error`             | File storage is not set up on this site, so files can't be saved or read. Contact the administrator.                                                   |
| `LZ-7809` | `storage_quota_exceeded`                 | 429  | `insufficient_quota`    | Your file storage budget is used up. Delete files you no longer need, or ask to have the budget raised.                                                |
| `LZ-7821` | `unsupported_media_kind`                 | 400  | `invalid_request_error` | This media type is not supported. Choose image or video.                                                                                               |
| `LZ-7822` | `unsupported_media_status`               | 400  | `invalid_request_error` | This status filter is not supported. Use pending, running, succeeded or failed.                                                                        |
| `LZ-7823` | `media_job_not_found`                    | 404  | `not_found_error`       | This media job was not found. Check the job ID.                                                                                                        |
| `LZ-7824` | `artifact_file_not_found`                | 404  | `not_found_error`       | The artifact file was not found. Check the file ID, or upload the file again.                                                                          |
| `LZ-7825` | `video_not_found`                        | 404  | `not_found_error`       | This video job was not found. Check the job ID.                                                                                                        |
| `LZ-7826` | `invalid_studio_media_job`               | 400  | `invalid_request_error` | The Studio job in this request does not match it. Start the generation again from Studio.                                                              |
| `LZ-7827` | `artifact_too_large`                     | 502  | `api_error`             | The generated file is larger than the size that can be stored, so the result was not kept. Try a smaller size or shorter duration.                     |
| `LZ-7828` | `video_artifact_missing`                 | 502  | `api_error`             | The video finished without a file to download. Generate it again.                                                                                      |
| `LZ-7841` | `studio_disabled`                        | 404  | `not_found_error`       | Studio is not enabled on this site.                                                                                                                    |
| `LZ-7842` | `studio_generation_not_found`            | 404  | `not_found_error`       | This creation was not found, or it is no longer visible to you. Refresh the page.                                                                      |
| `LZ-7843` | `studio_project_not_found`               | 404  | `not_found_error`       | This Studio project or canvas item was not found. It may have been deleted; refresh the page.                                                          |
| `LZ-7844` | `studio_artifact_not_found`              | 404  | `not_found_error`       | The file for this creation is missing or has expired. Generate it again.                                                                               |
| `LZ-7845` | `studio_artifact_unsupported`            | 415  | `invalid_request_error` | This file is not a supported image or video. Choose a PNG, JPEG, GIF, WebP or video file.                                                              |
| `LZ-7846` | `studio_key_unavailable`                 | 400  | `invalid_request_error` | The selected API key is disabled or no longer exists. Choose another key.                                                                              |
| `LZ-7847` | `studio_key_required`                    | 400  | `invalid_request_error` | Generating on your account balance only works from a signed-in browser. Choose an API key instead.                                                     |
| `LZ-7848` | `studio_creator_not_found`               | 404  | `not_found_error`       | No creator with this name has public works yet. Check the link, or browse the latest works.                                                            |
| `LZ-7849` | `studio_sign_in_required`                | 401  | `authentication_error`  | Sign in to continue. Searching, downloading originals and browsing further need an account.                                                            |
| `LZ-7850` | `studio_download_limit_reached`          | 429  | `rate_limit_error`      | You've used today's original downloads. The allowance resets at midnight in your time zone; previews can still be downloaded.                          |
| `LZ-7851` | `studio_free_unavailable`                | 409  | `conflict_error`        | Today's free image isn't available. It may already be used, or your account needs a verified e-mail.                                                   |
| `LZ-7852` | `studio_not_favoritable`                 | 409  | `conflict_error`        | Only published works can be added to favorites.                                                                                                        |
| `LZ-7853` | `studio_signature_invalid`               | 403  | `permission_error`      | This download link is invalid or has expired. Start the download again.                                                                                |
| `LZ-7861` | `search_backend_not_found`               | 404  | `not_found_error`       | This search backend was not found. Refresh the list.                                                                                                   |
| `LZ-7862` | `search_backend_provider_invalid`        | 400  | `invalid_request_error` | This search provider is not supported or does not match the channel type. Choose a listed provider.                                                    |
| `LZ-7863` | `poster_draft_not_found`                 | 404  | `not_found_error`       | This poster draft was not found. Refresh the list.                                                                                                     |
| `LZ-7864` | `upload_file_not_found`                  | 404  | `not_found_error`       | This data file was not found on the server. Check the file path.                                                                                       |
| `LZ-7865` | `upload_key_not_allowed`                 | 400  | `invalid_request_error` | This path can't be uploaded. Directories and configuration files are excluded; choose a regular data file.                                             |
| `LZ-7866` | `upload_failed`                          | 502  | `api_error`             | Object storage did not accept the upload. Check the storage settings and try again.                                                                    |
| `LZ-7867` | `blog_validation_failed`                 | 400  | `invalid_request_error` | The blog request is invalid: {reason\|check the values}.                                                                                               |
| `LZ-7868` | `blog_publish_blocked`                   | 422  | `invalid_request_error` | The post does not pass its publish checks.                                                                                                             |

### LZ-9xxx · Internal

| Number    | Code              | HTTP | Type        | What it means and what to do                                                                             |
| --------- | ----------------- | ---- | ----------- | -------------------------------------------------------------------------------------------------------- |
| `LZ-9001` | `internal_error`  | 500  | `api_error` | The service could not complete this request. If it keeps happening, contact support with the request ID. |
| `LZ-9002` | `not_implemented` | 501  | `api_error` | This feature is not available yet.                                                                       |

## See also

- [Rate limits](https://lazu.ai/docs/limits)
- [Authentication](https://lazu.ai/docs/authentication)
- [Request details](https://lazu.ai/docs/endpoints/usage-requests)
