> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crazyrouter.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 状态码

> 所有 API 类型的状态码参考

> 更新日期：2026-06-06

## HTTP 状态码

| 状态码 | 说明          | 处理建议                             |
| --- | ----------- | -------------------------------- |
| 200 | 请求成功        | -                                |
| 400 | 请求参数错误      | 检查请求体格式和参数                       |
| 401 | 认证失败        | 检查 API Key 是否正确                  |
| 403 | 权限不足        | 检查令牌是否有权限访问该模型                   |
| 404 | 资源不存在       | 检查 URL 路径                        |
| 429 | 请求频率超限      | 降低请求频率或联系管理员                     |
| 500 | 服务端 5xx 错误  | 可重试；可能是本站内部错误，也可能是上游 5xx 通过本站返回  |
| 502 | 网关或上游结果获取失败 | 通常表示已进入上游调用阶段，但未能拿到有效上游响应或结果，可重试 |
| 503 | 服务不可用       | 系统维护中                            |

## 500 与 502 的区别

* `500` 是更宽泛的服务端错误。在 CrazyRouter 中，它既可能表示本站内部错误，也可能表示上游直接返回了 `5xx`，再由本站中继给客户端。
* `502` 更具体，通常表示请求已经到达 CrazyRouter 的网关或上游调用阶段，但 CrazyRouter 无法拿到有效的上游响应或结果，例如上游不可达、返回无效网关级响应，或任务结果地址取回失败。
* 如果同类问题持续出现：
  * 大量 `502` 通常优先检查上游渠道可用性、网络连通性和结果 URL 是否可访问。
  * 大量 `500` 需要结合错误类型和日志进一步区分；只有明确标记为站内 `site_internal` 或 panic 一类时，才应直接视为 CrazyRouter 自身问题。

## Chat Completions 状态码

```json theme={null}
{
  "error": {
    "message": "错误描述",
    "type": "error_type",
    "code": "error_code"
  }
}
```

| code                      | 说明             |
| ------------------------- | -------------- |
| `invalid_api_key`         | API Key 无效或已过期 |
| `insufficient_quota`      | 余额不足           |
| `model_not_found`         | 模型不存在或未启用      |
| `context_length_exceeded` | 输入超过模型上下文长度限制  |
| `rate_limit_exceeded`     | 请求频率超限         |
| `content_filter`          | 内容被安全过滤器拦截     |

## Midjourney 任务状态码

| 状态            | 说明    |
| ------------- | ----- |
| `NOT_START`   | 任务未开始 |
| `SUBMITTED`   | 已提交   |
| `IN_PROGRESS` | 生成中   |
| `SUCCESS`     | 生成成功  |
| `FAILURE`     | 生成失败  |
| `CANCEL`      | 已取消   |

### MJ 错误码

| code | 说明    |
| ---- | ----- |
| 1    | 提交成功  |
| 21   | 任务已存在 |
| 22   | 排队中   |
| 23   | 队列已满  |
| 24   | 提交失败  |

## Kling 视频状态码

| 状态           | 说明      |
| ------------ | ------- |
| `queued`     | 已提交或排队中 |
| `processing` | 处理中     |
| `succeeded`  | 生成成功    |
| `failed`     | 生成失败    |

## 即梦任务状态码

| 状态           | 说明      |
| ------------ | ------- |
| `queued`     | 已提交或排队中 |
| `processing` | 处理中     |
| `succeeded`  | 生成成功    |
| `failed`     | 生成失败    |

## Luma 视频状态码

| 状态           | 说明  |
| ------------ | --- |
| `pending`    | 等待中 |
| `processing` | 处理中 |
| `completed`  | 完成  |
| `failed`     | 失败  |

## Suno 音乐状态码

| 状态           | 说明  |
| ------------ | --- |
| `submitted`  | 已提交 |
| `processing` | 生成中 |
| `complete`   | 完成  |
| `error`      | 错误  |

## Runway 视频状态码

| 状态          | 说明  |
| ----------- | --- |
| `PENDING`   | 等待中 |
| `RUNNING`   | 生成中 |
| `SUCCEEDED` | 成功  |
| `FAILED`    | 失败  |

## 通用错误处理建议

<Warning>
  遇到 429 错误时，请勿立即重试。建议使用指数退避策略（Exponential Backoff），初始等待 1 秒，每次翻倍。
</Warning>

```python theme={null}
import time
import requests

def request_with_retry(url, headers, json_data, max_retries=3):
    for i in range(max_retries):
        response = requests.post(url, headers=headers, json=json_data)
        if response.status_code == 429:
            wait = 2 ** i
            print(f"频率限制，等待 {wait} 秒后重试...")
            time.sleep(wait)
            continue
        return response
    return response
```
