错误
UberLLM 返回 OpenAI 风格的错误封装,因此现有的错误处理无需修改即可工作:
{
"error": {
"code": "insufficient_credits",
"message": "Your credit balance is too low to serve this request.",
"type": "insufficient_credits"
}
}
推理接口 (/v1/*)
| HTTP | code |
含义 | 应对措施 |
|---|---|---|---|
| 402 | insufficient_credits |
您的预付余额不足以支付请求的预留费用。 | 请在 控制面板 → 积分 充值。 |
| 402 | key_spend_cap_exceeded |
此 API key 已达到其配置的消费限额(每日 / 每月 / 终身)。 | 请提高或移除此 API key 的限额,或使用其他 API key。 |
| 400 | invalid_request |
请求正文无法解析,或模型拒绝了请求(消息会说明原因)。 | 请修正请求;此请求不会重试。 |
| 413 | request_too_large |
请求正文超过 10 MB(通常是作为 base64 发送的图片)。 | 请将图片作为 https:// 链接发送,或缩短对话。未收取任何费用。 |
| 404 | model_not_found |
model ID 不可用。前面加上 uberllm/ 前缀即可:uberllm/deepseek/deepseek-v4.1-flash 可到达 deepseek/deepseek-v4.1-flash。 |
请检查 GET /v1/models;修正 ID。 |
| 400 | context_length_exceeded |
提示词长度超过了模型所能接受的范围,无论卖家是谁。在 /v1/chat/completions 上,如果没有 models 列表,则由最接近且能接受该提示词的模型进行回复(回复中的 model 会指明该模型);当没有模型能接受时,或在 /v1/messages 上,就会出现此错误。消息会提供两种大小并列出能接受该提示词的模型。 |
请发送更少的内容,或选择消息中列出的模型。未收取任何费用。 |
| 400 | tools_not_supported |
请求发送了 tools,但模型无法调用它们,无论卖家是谁。替代规则同上。消息会列出可以调用的模型。 |
请不带工具发送,或选择消息中列出的模型。未收取任何费用。 |
| 400 | max_price_exceeded |
目前在您的 provider.max_price 范围内没有卖家提供此模型(且 models 中的模型也无法接受)。 |
请提高 max_price,稍后重试,或指定其他模型。未收取任何费用。 |
| 400 | unsupported_routing_option |
UberLLM 无法应用 provider 选项(消息会指明该选项)。 |
请将其省略;参见 模型与路由。 |
| 400 | invalid_metadata |
metadata 不是一个最多包含 16 个文本值的对象。 |
请修正标签;数字应加引号。 |
| 400 | unknown_capability |
best-price: / fastest: 别名未指定任何任务。 |
请使用 chat, image, image-edit, text-to-video, image-to-video, music, speech, transcription 中的一个。 |
| 400 | wrong_endpoint |
模型(或别名)执行的任务与此路由不匹配:将图片、视频、音乐、语音或转录模型发送到 /v1/chat/completions 或 /v1/messages,将聊天模型发送到媒体路由,或语音和转录互换。消息会指明正确的路由。在任何操作运行前被拒绝;未收取任何费用,且“活动”中将其列为“已拒绝”。 |
请将其发送到消息中指明的路由(也在 /v1/models/{id} 上的 endpoints 中)。 |
| 503 | no_timing_data |
在有足够请求计时以比较模型之前,请求了 fastest:。 |
请使用 best-price: 或指定一个模型。 |
| 429 | rate_limited |
此 API key 已超出其每分钟请求限制,或市场在自动重试后仍持续进行速率限制。 | 请退避并带抖动重试;提高此 API key 的速率限制。 |
| 503 | no_available_provider |
即使在自动重试后,目前也没有人能提供该模型(没有卖家,所有卖家都失败或启动过慢,或者您的 provider 选项没有留下任何可路由的对象),或者 best-price: / fastest: 别名未能找到当前可用的任务模型。消息会指明模型或任务。这也包括卖家自己的提供商账户失败的情况:UberLLM 会尝试其他卖家,并且绝不会将该卖家的错误传递给您,仿佛您的 API key 有误一样。 |
请稍后重试或选择其他模型。未收取任何费用。 |
| 503 | service_unavailable |
UberLLM 端出现临时问题。 | 请在几分钟后重试。 |
图片、视频和音乐请求会增加一些特有的代码 (image_required,
invalid_image_url (一个不指向图片的源图片链接),
max_cost_too_low, idempotency_key_reused, artifact_expired);参见
制作视频或图片。
被拒绝或失败的聊天请求会显示在 控制面板 → 活动 中,并附带发送给您的消息。聊天、图片、视频、音乐、语音和转录响应会带有一个 X-Request-Id 标头,其 ID 与其“活动”行相同,包括错误。
在返回错误之前,系统会为您进行重试:最多 4 次尝试,仅在第一个内容字节之前。参见 模型与路由。
预留与中止
UberLLM 在代理之前会预留估算费用,并在实际使用后进行结算。如果请求出错、中止,或者您在流式传输中途断开连接,未使用的预留费用将被释放——您只需为实际生成的内容付费。中止的流会根据分词器估算进行核算,并在 控制面板 → 活动 中标记。
速率限制
按密钥的速率限制采用固定窗口强制执行。在推理服务上,速率限制检查故障关闭——如果 UberLLM 无法验证您的限制,请求将被拒绝,而不是不计量地提供服务。在控制面板 → API 密钥中设置(或提高)每个密钥每分钟的请求限制。
每个已认证的 /v1/* 响应都包含该密钥的当前窗口信息:
| 请求头 | 含义 |
|---|---|
X-RateLimit-Limit |
此密钥每分钟可发送的请求数 |
X-RateLimit-Remaining |
当前分钟内剩余的请求数 |
X-RateLimit-Reset |
窗口何时重置(Unix 秒) |
Retry-After |
当超出此限制 429 时:重试前需等待的秒数 |
当 X-RateLimit-Remaining 接近 0 时,请放慢速度。当无法读取窗口信息时,请求头将被省略。
卖家 API (/api/v1/seller/*)
这些使用标准的 REST 代码:
| HTTP | code |
含义 |
|---|---|---|
| 400 | invalid_request |
验证失败(例如,非 HTTPS endpoint_url,缺少 absolute 的价格,multiplier 超出 0 < m ≤ 1.5)。消息会指明字段。 |
| 400 | model_not_in_catalog |
model_id 不是已知的目录模型。 |
| 401 | unauthorized |
缺少或无效的仪表板 JWT。 |
| 404 | seller_not_found |
您的组织没有卖家 — 请先调用 POST /api/v1/seller/register。 |
| 404 | offer_not_found |
您的卖家下没有该 ID 的报价。 |
| 409 | invalid_status_transition |
非法状态更改 — 例如,恢复 delisted 报价(下架是最终状态)。 |
注意:验证探测失败并非错误响应。报价已成功创建/更新,并返回 status: "paused" 和一个 last_probe_error,解释原因 — 修复 endpoint 并将其 PATCH 回 active 以重新探测。请参阅 Sellers。
认证错误
| HTTP | 含义 |
|---|---|
| 401 | 缺少/无效的 Authorization header。推理密钥是 Bearer ull_...;dashboard endpoint 使用您的账户 JWT。 |
| 403 | 密钥有效但缺少所需的范围(例如,一个仅用于推理的密钥调用了 dashboard endpoint)。 |