# 错误码与限制

出错时返回统一结构，且不扣费。单个引擎失败不会让整个请求报错：该条答案的 status 为 timeout 或 failed，error 字段说明原因，不扣费，其余引擎照常返回。只有请求的引擎全部不可用时，整个请求才返回 503。

| HTTP | code | 含义 |
| --- | --- | --- |
| 400 | `invalid_request` | 参数缺失或格式错误，message 指出具体字段 |
| 400 | `unsupported_engine` | engines 里有不认识的引擎 id |
| 401 | `invalid_api_key` | API key 缺失、错误或已停用 |
| 402 | `insufficient_credits` | 余额不够预占本次请求 |
| 403 | `plan_not_allowed` | 当前档位不能用该接口或参数，例如 Starter 调用 index、Pro 使用 group_by |
| 404 | `not_found` | job_id 不存在或已过期 |
| 500 | `internal_error` | 服务端错误，可用 request_id 联系支持 |
| 503 | `engines_unavailable` | 请求的引擎全部暂时不可用；响应带 Retry-After（秒），不预占、不扣费。只要有一个引擎可用，请求就照常处理 |

```json
{
  "error": {
    "code": "insufficient_credits",
    "message": "本次请求需预占 9 credits，余额 4",
    "request_id": "req_7a11c2"
  }
}
```

```json
{
  "error": {
    "code": "engines_unavailable",
    "message": "请求的引擎当前都不可用：claude、grok",
    "request_id": "req_5c02e4"
  }
}
```

### 限制

- 不设账户级速率限制；为保证稳定，建议并发不超过 100 个请求（待压测确定）。
- 每个请求最多 8 个引擎 × 10 次采样 = 80 条答案。
- 引擎的临时错误（网络错误、超时、限流、5xx）会在时限内自动重试，最多 2 次；重试不额外扣费。
- prompt 最长 2,000 字符；competitors 最多 20 个。
- 缓存 24 小时，异步任务结果保留 7 天。
