错误代码 错误回应格式 错误 envelope 因端点而异。若存在 error.type,请结合 HTTP 状态码判断;error.code 可能是字符串或数字状态码,也可能省略;error.message 仅用于显示。
{
"error" : {
"message" : "Insufficient credits. Please top up to continue." ,
"type" : "invalid_request_error" ,
"code" : "insufficient_credits"
}
} HTTP 状态与 error.code 错误 envelope 因端点而异。若存在 error.type,请结合 HTTP 状态码判断;error.code 可能是字符串或数字状态码,也可能省略;error.message 仅用于显示。
424依赖失败 您自行设置的 BYOK 密钥被上游提供商拒绝;请在 BYOK 设置中检查或轮换。此错误只会在 strict 模式出现
400请求无效 请求格式错误、messages 阵列为空,或缺少必填栏位
401未授权 API 密钥遗失、无效或已停用
402需要付款 帐户点数不足、单一密钥花费上限已达,或每周 / 每月预算上限已达
403禁止存取 帐户已停用或没有此操作的权限
404找不到资源 指定的模型、生成任务、密钥或其他资源不存在
409状态冲突 资源尚未进入必要状态,例如视频任务尚未完成
410资源已移除 指定模型已退役,必须改用其他模型
413请求体过大 请求 body 超过 10 MB;请缩小内容或分拆请求
416范围无法满足 生成视频内容所要求的 byte range 无效
429请求过多 已超过速率限制;请查看 Retry-After 标头后再重试
432免费额度用尽 Tavily 兼容端点(/v1/search、/v1/extract、/v1/crawl、/v1/map):免费搜索额度已用完,或余额为 0 以下;请充值后继续。响应内容为 Tavily 格式:{"detail":{"error":"..."}}
500伺服器错误 BazaarLink 内部错误
502闸道错误 所有上游来源都无法处理;请求会返回错误。
503服务不可用 此模型没有设定上游提供者;请联络管理员
504闸道超时 上游连接或串流停滞并超过等待时间
机器可读的账务代码 同样是 402,也可能代表不同的账务控制。请依下列稳定代码显示正确的处理方式。
byok_key_invalid您自行设置的 BYOK 密钥被上游提供商拒绝;请在 BYOK 设置中检查或轮换。此错误只会在 strict 模式出现。
budget_cap_reached已达到每周或每月的提醒型预算上限;提高或重设预算上限。
credit_limit_exceeded月结组织已用尽硬性信用额度;请联系账务人员。
insufficient_credits预付用户或组织无法保留足够余额;请先充值。
spend_limit_exceededAPI 密钥已达到每日、每周或每月花费上限。
capacity_unavailable此模型暂时容量不足,请稍后重试;Retry-After 响应头会给出等待秒数。
详细错误代码 API 请求失败时,error.code 会告诉你更具体的原因。即使两个错误都是 HTTP 400,处理方式也可能不同:例如 unknown_model 表示模型名称有误,image_too_large 则表示图片太大。请根据下表查找原因和对应的处理方向。
模型与端点
模型查找、生命周期、定价、模态和端点兼容性错误。
unknown_model400
invalid_model_id400
model_not_found404
model_retired410
model_endpoint_mismatch400
embedding_on_chat_endpoint400
model_not_priced400
invalid_modality_for_model400
请求与安全
参数、上下文、工具、结构定义和内容安全拒绝。
missing_required_field400
unsupported_param400
max_tokens_invalid400
context_too_long400
tool_use_unsupported400
malformed_tool_messages400
invalid_response_format_schema400
invalid_tools_definition400
content_moderation403
content_filter403
unknown_4xx400
图片生成与编辑
图片输入、multipart 编辑、输出和图片管线错误。
invalid_image_url400
input_images_not_supported400
invalid_content_type400
mask_not_supported400
unsupported_response_format400
missing_prompt400
missing_image400
too_many_images400
invalid_image_type400
image_too_large400
invalid_n400
pipeline_error502
no_images502
上游路由
安全处理后的供应商连接、认证、限流和可用性错误。
upstream_unreachable502
upstream_auth_failed502
upstream_rate_limited429
capacity_unavailable429
upstream_unavailable502/503
byok_key_invalid424
内容审查 所有请求在发送到模型之前,都会先经过自动化内容审查。不符合使用规范的请求会被拒绝,不会送达模型,并返回 403 错误。
会被拦截的内容类别 审查依据我们的使用规范(Acceptable Use Policy)进行,主要拦截以下类别的内容:
性剥削内容 暴力威胁 违法行为的操作指导 生物危害相关内容 403 响应格式 请求被审查拦截时,会收到以下格式的错误响应:
{
"error" : {
"message" : "Your prompt was blocked by content moderation." ,
"type" : "invalid_request_error" ,
"code" : "content_filter"
}
} 被拦截的请求不会计费——你不会为被拒绝的请求付费。
误判申诉 如果你认为某次请求被误判拦截,请联系支持团队并附上请求时间与(如方便的话)request id,我们会协助复查。
隐私说明 请求会经过自动化内容审查,最新输入的文字与图片可能送交第三方内容安全评分服务。
判定为违规、疑似违规、接近门槛或随机抽样的请求,我们可能保存其全文或前段文字,供合规举证、争议处理与稽核之用,不承诺固定删除期限。
其他一般成功请求不保存提示词与响应内容;使用 ZDR 密钥的请求不适用前两项。
速率限制、预算与紧急刹车 这些控制可能拒绝原本有效的请求。它们与供应商故障不同,需要不同的恢复操作。
请求速率限制 429字符串 code 或数字 code 429;请使用 Retry-After 与 X-RateLimit-* 标头。
限流惩罚封锁 429数字 code 429、临时限制消息和 Retry-After。
全局支出紧急刹车 503数字 code 503、全局支出上限消息,以及 30 或 300 秒的 Retry-After。
组织/团队/成员/用户支出刹车 429数字 code 429,消息会指出 spend circuit breaker 和受影响范围。
计费与预算控制 402使用上方列出的稳定计费字符串代码。
错误 envelope 因端点而异。若存在 error.type,请结合 HTTP 状态码判断;error.code 可能是字符串或数字状态码,也可能省略;error.message 仅用于显示。
视频与媒体资源状态 视频验证通常返回数字 code 400;任务不存在为 404、模型退役为 410、视频内容尚未完成为 409、视频 byte range 无效为 416。重试前请先轮询至完成或修正 Range 标头。
重试策略 只有在不修改请求也可能恢复的错误才应重试。若有 Retry-After,请依指定秒数等待;否则使用带 jitter 的指数退避。限制重试次数,也不要同时叠加 SDK 自动重试与手动重试。
可退避重试
429、502、503、504。有 Retry-After 时必须优先遵守。生成类请求若遇到结果不明的网络中断,应先查询原任务,避免建立第二个任务。
修正后再重试
400、401、402、403、404、409、410、413、416。请先修正请求、凭证、余额、权限、资源状态或 Range 标头。
错误处理 Python TypeScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import random
import time
from openai import OpenAI, APIStatusError
client = OpenAI(
base_url="https://api.bazaarlink.ai/v1" ,
api_key="sk-bl-YOUR_API_KEY" ,
max_retries=0 ,
)
RETRYABLE = {429 , 502 , 503 , 504 }
for attempt in range (5 ):
try :
response = client.chat.completions.create(
model="openai/gpt-4o" ,
messages=[{"role" : "user" , "content" : "Hello!" }],
)
break
except APIStatusError as error:
if error.status_code not in RETRYABLE or attempt == 4 :
raise
retry_after = error.response.headers.get("Retry-After" )
delay = (
float (retry_after)
if retry_after
else min (8 , 0.5 * (2 ** attempt)) + random.uniform(0 , 0.25 )
)
time.sleep(delay)
⌄ 显示全部 29 行串流错误格式 在任何 token 串流之前发生的错误,会以标准 HTTP 错误回应(JSON body)回传。
串流一旦开始,HTTP 回应已经是 200。客户端必须解析每个 SSE data frame;只要出现顶层 error,或 choices[0].finish_reason === "error",就应视为失败且回应不完整。
若流式输出开始后才失败,BazaarLink 可能发送最后一个 SSE 事件,其中包含顶层 error 对象,之后发送 data: [DONE]。请将该响应视为不完整,不要把部分输出当作已完成的结果。
data: {"error":{"message":"The request could not be completed.","type":"upstream_error","code":502}}
data: [DONE]
// Branch on error.code; error.type can vary by failure path.