API 文档
兼容 OpenAI。将 base_url 设为 https://api.eastx.ai/v1,即可直接复用现有 SDK 代码。
在找商户管理 API?
本页介绍的是 终端用户推理 API —— 即对 /v1/* — 通过任意兼容 OpenAI 的 SDK 调用。若您是白标租户管理员,希望以编程方式管理品牌、定价、财务或自定义域名,请使用独立的 商户管理 API:token 前缀 sk-mgmt-*,base path /api/v1/merchant/*。请在 Console 的 API 密钥 中签发 token;可浏览的 OpenAPI 文档位于 admin.eastx.ai/api/v1/merchant/docs。
/api/v1/merchant/finance/*:汇总、按模型明细和趋势统一以用户实际消费额为收入,costUsd 为已记录的上游供应商成本,而非平台批发价。毛利 = 实际消费额 − 上游成本,与主站一致。可结算为扣收单费后的参考值,月度结算及平台抽成规则不变。
快速开始
一个 chat completions 调用 —— 选择您熟悉的客户端。
curl https://api.eastx.ai/v1/chat/completions \
-H "Authorization: Bearer $EASTX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [
{"role": "user", "content": "Hello!"}
]
}'鉴权
所有端点均要求在 Authorization 请求头中携带 API 密钥:
Authorization: Bearer sk-eastx-<your-key>- • 密钥在 /keys 页面创建,且仅展示一次 —— 请妥善保存。
- • 创建密钥时可选配置单密钥消费上限、RPM 速率限制、可用模型名单与来源 IP 白名单。设置了 IP 白名单后,仅名单内的 IPv4/CIDR 来源可调用(否则返回 403);留空则不限制来源 IP。
- • 若密钥泄漏,在同一页面立即吊销;吊销即时生效。
/api/v1/auth/slider/challenge门户登录:获取滑块拼图
密码登录和邮箱验证码发信前,用户明确操作后获取 PNG 拼图。返回 challengeId、backgroundImage、pieceImage、width:320、height:160、pieceSize:44、pieceY;有效期120秒,不返回正确横坐标。白标门户应携带 tenantSlug。
请求体
{
"email": "user@example.com",
"tenantSlug": "acme"
}示例
curl $PORTAL_ORIGIN/api/v1/auth/slider/challenge -H "Content-Type: application/json" -d '{"email":"user@example.com","tenantSlug":"acme"}'/api/v1/auth/slider/verify门户登录:验证拼图位置
提交用户拖动后的横坐标 offset(原始320像素图片坐标)。成功返回 {captchaToken,expiresIn:300},票据绑定邮箱、租户和来源IP,一次性使用。答错或过期后重新获取拼图。
请求体
{
"email": "user@example.com",
"tenantSlug": "acme",
"challengeId": "<challengeId>",
"offset": 180
}示例
curl $PORTAL_ORIGIN/api/v1/auth/slider/verify -H "Content-Type: application/json" -d '{"email":"user@example.com","tenantSlug":"acme","challengeId":"<challengeId>","offset":180}'- • 示例180仅展示数值类型;实际位移必须由用户根据当次图片拖动确定。
/api/v1/auth/login门户登录:邮箱密码
必须携带刚通过滑块获得的 captchaToken;缺失返回 captcha_required,伪造、过期或重复使用返回 invalid_captcha,不签发登录会话。每次尝试后重新验证,包括密码错误或网络失败。
请求体
{
"email": "user@example.com",
"password": "<password>",
"captchaToken": "<captchaToken>",
"tenantSlug": "acme"
}示例
curl -c cookies.txt $PORTAL_ORIGIN/api/v1/auth/login -H "Content-Type: application/json" -d '{"email":"user@example.com","password":"<password>","captchaToken":"<captchaToken>","tenantSlug":"acme"}'- • 此要求仅用于门户用户登录,不增加 API Key 调用 /v1/* 的滑块要求。
/api/v1/auth/email-code/send门户登录:发送邮箱验证码
purpose 为 login 或 signup 时,发信均要求新的一次性 captchaToken。收到邮件后调用 /api/v1/auth/email-code/confirm,携带同一 email、tenantSlug、purpose 和六位 code,无须再次滑块验证。原有邮箱/IP/全局发信限额继续生效。
请求体
{
"email": "user@example.com",
"purpose": "login",
"captchaToken": "<captchaToken>",
"tenantSlug": "acme"
}示例
curl $PORTAL_ORIGIN/api/v1/auth/email-code/send -H "Content-Type: application/json" -d '{"email":"user@example.com","purpose":"login","captchaToken":"<captchaToken>","tenantSlug":"acme"}'/api/v1/merchant/apply/captcha商户申请:图形验证码
公开接口,返回 {captchaId,imageSvg,expiresInSeconds:300}。以图片展示自托管 SVG,由申请人填写算式答案。支持手动刷新,不需要登录或 API Key。
示例
curl $PORTAL_ORIGIN/api/v1/merchant/apply/captcha/api/v1/merchant/apply/email-code/send商户申请:发送邮箱验证码
申请人明确点击发送后调用;邮箱和子域名去除首尾空格并转小写。不会自动发送邮件。
请求体
{
"email": "founder@acme.com",
"slug": "acme",
"captchaId": "<captchaId>",
"captchaCode": "<math answer>"
}示例
curl $PORTAL_ORIGIN/api/v1/merchant/apply/email-code/send -H "Content-Type: application/json" -d '{"email":"founder@acme.com","slug":"acme","captchaId":"<captchaId>","captchaCode":"<math answer>"}'- • 成功返回 {cooldownSeconds:60}。倒计时结束后可重发;每次发送尝试后刷新一次性图形验证码。发送失败不显示成功。
- • 邮箱验证码为 6 位数字,仅用于当前邮箱及子域名;修改任一项后清空已输入验证码。服务端负责最终校验,前端校验不代表邮箱已验证。
- • 错误包括 captcha_invalid、email_domain_invalid、email_code_unavailable、rate_limit_exceeded、contact_email_reserved、slug_reserved、slug_taken 和 validation_failed。
/api/v1/merchant/apply商户申请:提交 / 补验历史申请
提交时必须携带收到的 6 位 emailCode。子域名须为 2–32 位小写字母、数字及连字符,不能以连字符开头或结尾。
请求体
{
"slug": "acme",
"contactEmail": "founder@acme.com",
"emailCode": "123456",
"name": "Acme AI",
"contactName": "Jane",
"applyMessage": "Our use case"
}示例
curl $PORTAL_ORIGIN/api/v1/merchant/apply -H "Content-Type: application/json" -d '{"slug":"acme","contactEmail":"founder@acme.com","emailCode":"<six digits from email>"}'- • 错误包括 email_code_invalid、email_code_unavailable、rate_limit_exceeded、contact_email_reserved、slug_reserved、slug_taken、application_changed 和 validation_failed。状态变化后请确认原邮箱和子域名并重新获取验证码。
- • 原有已开通或待审核工作区使用完全匹配的原 slug、原联系邮箱和有效验证码补验,成功返回 {reverificationOnly:true}。仅记录邮箱验证凭据,不覆盖原品牌名、联系人或申请说明,不改变原状态,也不表示审核通过或重新激活。子域名可用性提示仅供参考,不应阻止补验。
/v1/models列出模型
返回当前账户可调用的模型目录。即将上线和已停用的模型会被过滤掉。
示例
curl https://api.eastx.ai/v1/models \
-H "Authorization: Bearer $EASTX_API_KEY"- • 每条记录都带有 OpenAI 风格的字段(id、object、created、owned_by),并额外包含 display_name、input_price_per_1m、output_price_per_1m。大多数 OpenAI SDK 会忽略未知字段。
/v1/models/{id}获取单个模型
按 id 查询单个模型。部分 SDK 会在客户端初始化时调用此端点校验模型名是否有效。
示例
curl https://api.eastx.ai/v1/models/claude-sonnet-4-6 \
-H "Authorization: Bearer $EASTX_API_KEY"- • 若 id 未知或已停用,返回 404 model_not_found。
/v1/chat/completions对话补全
兼容 OpenAI 的 chat completions 端点。支持流式(SSE)与非流式两种模式。token 用量在上游计费,您的余额会在每次请求结束时扣减。
请求体
{
"model": "claude-sonnet-4-6",
"messages": [
{"role": "system", "content": "You are concise."},
{"role": "user", "content": "Explain JWT in one sentence."}
],
"max_tokens": 256,
"temperature": 0.2,
"stream": false
}示例
curl https://api.eastx.ai/v1/chat/completions \
-H "Authorization: Bearer $EASTX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role":"user","content":"hi"}],
"max_tokens": 32
}'- • 如需流式响应,请设置 "stream": true。每个 SSE 事件形如 "data: {...}",承载一个 OpenAI 风格的 chunk,其中 "choices[0].delta.content" 为增量文本,最后一个非 DONE chunk 会带上 "choices[0].finish_reason"。请持续消费,直到读到 "data: [DONE]"。
- • Vision 与 tool / function calling 会透传到支持这些能力的上游模型(如 Claude、qwen-vl-*、GPT 系列)。详见下方示例。
- • 在调用前会按最坏情况(input + max_tokens × output 价格)预扣余额。余额不足返回 402。
- • 推理模型(如 gpt-5.5)会将思维链按 output_tokens 计费 —— 您看到的 usage.completion_tokens 可能超过可见消息的长度。思维链本身不会在响应中暴露,与 OpenAI o 系列保持一致。
Tool / function calling
请求体
{
"model": "claude-sonnet-4-6",
"messages": [
{"role": "user", "content": "What's the weather in Paris?"}
],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a city.",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}]
}- • 由模型自主决定是否调用工具。一旦调用,响应的 "choices[0].message.tool_calls" 会列出函数名与 JSON 参数,"finish_reason" 为 "tool_calls"。请将工具执行结果以 {"role":"tool", ...} 的消息形式继续发起后续请求。
- • 并非所有上游都支持工具调用。当前 Anthropic Claude、Qwen 系列以及大多数 OpenAI 兼容模型支持;小型开源模型往往不支持。
Vision(图像输入)
请求体
{
"model": "claude-sonnet-4-6",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "What is in this image?"},
{"type": "image_url", "image_url": {"url": "https://example.com/cat.jpg"}}
]
}]
}- • 将每条 user 消息的 "content" 由字符串改为分段数组。"image_url" 同时接受 HTTPS URL 与 "data:image/<mime>;base64,<...>" 形式的 data URL。
- • 请选用支持视觉的模型(如 claude-sonnet-4-6、qwen-vl-plus)。向纯文本模型发送图像的行为取决于上游 —— 可能返回 400,也可能静默丢弃图像。
/v1/responsesResponses API(兼容)
兼容 OpenAI Responses 的文字和图片输入,支持文字流式输出。鉴权、模型白名单、额度和计费与 Chat Completions 相同。
请求体
{
"model": "kimi-k3",
"input": [{"role":"user","content":[{"type":"input_text","text":"Say hello"}]}],
"max_output_tokens": 128,
"stream": false
}示例
curl https://api.eastx.ai/v1/responses \
-H "Authorization: Bearer $EASTX_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"kimi-k3","input":"Say hello","max_output_tokens":128}'- • 请求使用 input 和 max_output_tokens,响应包含 output 和 usage;流式输出为 response.* 命名 SSE 事件。
- • 工具调用、previous_response_id、服务端保存的会话状态和不支持的字段会明确返回 400,不会静默忽略。
- • input_video 是实验性的上游扩展,会映射到 video_url;图片和视频能否成功取决于所选上游,协议兼容层不能代替上游支持媒体格式。
/v1/messagesAnthropic Messages(兼容)
Anthropic Messages API 兼容端点。基于 Anthropic SDK 的工具(Claude Code、ZCode 等)把 base URL 指向这里即可直接使用 EastX。请求在内部翻译为 chat-completions 处理,鉴权、模型名单、限速、计费与 OpenAI 端点完全一致。
请求体
{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"system": "You are concise.",
"messages": [
{"role": "user", "content": "Explain JWT in one sentence."}
],
"stream": false
}示例
curl https://api.eastx.ai/v1/messages \
-H "x-api-key: $EASTX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 256,
"messages": [{"role":"user","content":"hi"}]
}'- • 鉴权同时接受 Anthropic 风格的 "x-api-key: <key>" 和 "Authorization: Bearer <key>" —— 用的都是同一把 sk-eastx-* 密钥。
- • 流式输出为标准 Anthropic SSE 事件(message_start、content_block_delta、message_delta、message_stop)。工具调用与图像输入双向翻译。
- • 请求中的 "thinking" 参数会被接受但不转发 —— 模型是否思考由上游自行决定。会输出推理过程的模型(如 DeepSeek)以标准 Anthropic "thinking" 内容块返回。
- • POST /v1/messages/count_tokens 返回本地估算值(约 4 字符/token),不打上游、不计费。
在 ZCode 中使用 EastX
请求体
// %USERPROFILE%\.zcode\cli\config.json (macOS/Linux: ~/.zcode/cli/config.json)
{
"provider": {
"eastx": {
"kind": "openai-compatible",
"name": "EastX",
"options": {
"baseURL": "https://api.eastx.ai/v1",
"apiKey": "sk-eastx-...",
"apiKeyRequired": true,
"includeUsage": true
},
"models": {
"claude-sonnet-4-6": { "name": "Claude Sonnet 4.6" },
"deepseek-v4-pro": { "name": "DeepSeek V4 Pro" }
}
}
},
"model": { "main": "eastx/claude-sonnet-4-6", "lite": "eastx/deepseek-v4-pro" }
}- • ZCode 桌面版:模型设置 → 添加供应商 → API 格式选 "Chat Completions",Base URL 填 "https://<api-host>/v1"(必须带 /v1 后缀),API Key 填 sk-eastx-...,再从 /models 页或 GET /v1/models 原样复制模型 id 加入模型列表。
- • ZCode CLI(无界面):按上方示例创建 config.json。模型引用必须写成 "供应商id/模型id" 格式。
- • 给模型配置思考档位后,ZCode 会改走 /v1/messages 而非 /chat/completions —— 本端点上线后两条路都通。
/v1/embeddings向量
为一个或多个字符串生成向量。此端点仅接受 modality=embedding 的模型(对话模型会返回 400 wrong_endpoint)。
请求体
{
"model": "text-embedding-v3",
"input": "Hello, world."
}示例
curl https://api.eastx.ai/v1/embeddings \
-H "Authorization: Bearer $EASTX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "text-embedding-v3",
"input": ["hello", "world"]
}'- • input 支持单个字符串或字符串数组。
- • 仅按 input token 计费(output_tokens = 0)。
/v1/images/generations图像生成
根据文本提示词生成图像。EastX 封装了阿里云的异步任务 API,因此客户端看到的是同步响应 —— 典型延迟 3-10 秒。按张计费,与分辨率无关。
请求体
{
"model": "qwen-image-plus",
"prompt": "a red apple on a wooden table",
"n": 1,
"size": "1024x1024"
}示例
curl https://api.eastx.ai/v1/images/generations \
-H "Authorization: Bearer $EASTX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-image-plus",
"prompt": "a red apple on a wooden table",
"n": 1,
"size": "1024x1024"
}'- • 响应结构:{"created":<ts>,"data":[{"url":"<signed-oss-url>","revised_prompt":"..."}]}。
- • n 最多为 4。可选尺寸取决于具体模型;1024x1024 各模型均支持。
- • URL 是临时签名的 OSS 链接 —— 请在约 1 小时内下载并自行托管。
- • 内部轮询超时为 90 秒;过长的任务返回 504 upstream_timeout。
计费说明
按次计费,以美元结算,请求完成后从余额扣除。定价页给出的单价均为每 100 万 tokens 的价格。
- • 按实际用量结算:以上游返回的本次请求 token 数(输入 + 输出)计费,不按估算值。请求失败不计费。
- • 调用前的余额校验:转发前会按最坏情况估算本次花费(input + max_tokens,且按该请求可能落到的最贵档计价)来校验余额。余额不足时在调用上游之前就返回 402。
- • 阶梯计价:部分模型不是单一价,而是分档计价 —— 单价取决于输入有多长、模型是否进行了推理,少数模型还取决于调用时段。最便宜档与最贵档可能相差 10 倍,每次请求按其真实输入 token 数落到的那一档计费。所有分档模型都会在定价页标注「阶梯计价」徽章,展开即可看到每一档的单价。这类模型在目录里显示的价格是它最便宜的那一档。
- • 思考档如何判定:请求中声明了思考(enable_thinking、reasoning_effort 或 thinking.type),**或者**响应中实际包含推理内容,两者满足其一即按思考档计费。部分模型不需要显式声明就会默认思考,上游此时同样按思考档收费。
- • 缓存命中:当上游报告命中提示词缓存时,输入中命中的那部分按该模型的缓存命中价计费,其余部分按常规输入价计费。分档模型的缓存命中价同样分档,与该次请求落到的档位一致。
- • 核对某一笔扣费:每次调用命中的档位会显示在控制台首页的调用记录里。若仍有疑问,请把 request id 发给我们,我们会与上游账单逐笔核对。
错误码
所有错误均以以下 JSON 结构返回:{"error":{"code":"...","message":"...","type":"..."}}。HTTP 状态码与 error.code 的对应关系如下表。
type 字段按家族对错误码归类,便于您据此分支处理,而无需逐个匹配名称:auth_error(密钥问题)、invalid_request_error(请求输入)、rate_limit(RPM 上限)、billing_error(余额 / 上限)、upstream_error(上游服务商)、server_error(少见 —— EastX 自身问题)。
| HTTP | error.code | 触发场景 |
|---|---|---|
| 400 | bad_request | 缺少必填字段,或请求体格式有误。请查看 error.message 获取详情。 |
| 400 | wrong_endpoint | 模型 modality 与端点不匹配(例如把对话模型用于 /v1/embeddings)。 |
| 401 | missing_key | 缺少 Authorization 请求头。请发送 "Authorization: Bearer sk-eastx-..."。 |
| 401 | invalid_key | 密钥不存在或已吊销。请到 /keys 重新创建。 |
| 402 | insufficient_balance | 最坏情况成本超过账户余额。请前往 /recharge 充值。 |
| 402 | cap_reached | 已达到单密钥消费上限(balanceCapUsd)。请调高上限或更换新密钥。 |
| 403 | disabled | API 密钥被管理员停用。 |
| 403 | expired | API 密钥的 expiresAt 已过期。 |
| 403 | model_not_allowed | 该密钥设置了可用模型名单,所请求的模型不在其中。请到 /keys 编辑名单,或改用未限制的密钥。 |
| 404 | model_not_found | 未知的模型 id。请调用 /v1/models 查看可用列表。 |
| 429 | rate_limit_exceeded | 触发了单密钥的 RPM 速率限制。请降低请求速率或拆分到多个密钥。 |
| 429 | tenant_rate_limit_exceeded | 触发了租户级 RPM 上限 —— 该上限是租户下所有密钥的合计。与上方单密钥 429 不同。请联系租户管理员调高上限。 |
| 500 | pricing_misconfigured | 该模型在 EastX 侧缺少价格配置(少见的管理端 bug)。请稍后重试;如持续出现,请将模型 id 告知支持。 |
| 502 | upstream_unreachable | 无法连接上游服务商。通常是临时性问题 —— 请配合退避策略重试。 |
| 502 | upstream_error | 上游返回错误。响应 message 中包含上游详情及 upstream_status。 |
| 502 | image_generation_failed | 上游图像任务未成功(返回 FAILED 或为空)。请重试、调整提示词,或更换图像模型。 |
| 503 | upstream_unavailable | 该渠道下所有上游 token 均处于冷却或停用状态。EastX 已感知到该问题。 |
| 504 | upstream_timeout | 图像生成耗时超过 90 秒。可再次提交,相同提示词可能成功。 |
Seedance 视频任务
使用 EastX API Key 创建视频任务,再用返回的 id 查询。成功后从 content.video_url 读取视频地址。视频任务不使用对话接口。
seedance-2-0/seedance-2-0-fast/seedance-2-0-mini: 4–15 秒;seedance-2-5: 4–30 秒.- 分辨率和价格:用 GET /v1/models/{model} 查询 video_pricing;未配置价格的分辨率不能提交。
- 比例:16:9、9:16、1:1、21:9、4:3、3:4。默认时长 4 秒,默认不生成音频。
创建任务
curl 'https://api.eastx.ai/v1/contents/generations/tasks' \
-H "Authorization: Bearer $EASTX_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: my-video-001' \
-d '{"model":"seedance-2-5","content":[{"type":"text","text":"A paper plane glides over a lake at sunrise."}],"resolution":"720p","duration":4,"ratio":"16:9","generate_audio":false}'查询任务
curl 'https://api.eastx.ai/v1/contents/generations/tasks/<task_id>' \
-H "Authorization: Bearer $EASTX_API_KEY"queued 为排队,processing 为生成中,succeeded 为成功,failed 为失败。每隔约 10 秒查询同一任务即可。创建时预占余额与 Key 额度,成功按 usage.total_tokens 结算,明确失败退回预占;查询不会重复扣费。
同一任务重试创建时保持相同 Idempotency-Key 和请求参数,避免重复生成。pending_confirmation 表示提交结果待核实,请查询原任务并联系支持,不要重新创建。billing_pending 表示结果已生成但需要补足余额或提高原 Key 额度,结清后才能获取视频。
参考素材放在 content[]:图片使用 image_url 与 reference_image、first_frame 或 last_frame;视频使用 video_url 与 reference_video;音频使用 audio_url 与 reference_audio。URL 为 HTTPS 或已有权限的 asset:// 引用,不接受本地文件路径或 Base64。
模型服务状态
GET /v1/models 和模型详情返回 service_status:normal 表示存在可用上游,paused 表示服务暂停中。暂停型号保留在列表中,仍可使用原模型 ID 发起请求以触发恢复尝试;人工停用或维护的型号不会自动恢复。
上游明确返回额度不足时自动暂停;多个上游中只要有一个可用,模型保持正常。冷却 10 分钟后,由下一次实际请求尝试恢复,同一上游只放行一次并发恢复尝试。没有后台定时探测或额外测试请求。全部不可用时返回 503,请稍后重试。
智能路由
在 API Key 设置中选择默认路由、智能自动、价格优先、速度优先或成功率优先。仅在同一对话模型有多个可用报价时生效,不改变模型权限与 IP 限制。
{
"model": "gpt-6.1-sol",
"routing_priority": "price",
"messages": [
{
"role": "user",
"content": "Hello"
}
]
}请求覆盖顺序:routing_priority → provider.sort → x-eastx-routing 请求头 → API Key 设置。有效值为 default、auto、price、speed、success_rate。支持 /v1/chat/completions 和 /v1/messages。
价格优先按请求预计费用排序;速度和成功率使用当前租户近 24 小时记录,无历史时采用保守估计,不能保证每次最快。默认路由保留原顺序并追加备用来源。目录显示各报价最高单价,实际按成功渠道的价格及档位结算;商户自定义零售价保持有效。余额预检覆盖可能故障切换的最高报价。
速率限制与配额
- • 单密钥 RPM:每个 API 密钥都有每分钟请求数上限(默认 60)。超出后返回 429 rate_limit_exceeded。可在 /keys 页面调整单密钥的上限。
- • 租户级 RPM 上限:在白标租户中,租户管理员可设置租户级 RPM 上限,作用于该租户下所有密钥的合计请求。触发时返回 429 并附带
tenant_rate_limit_exceeded—— 与单密钥 429 区分开,便于您在重试逻辑中分别处理。此时增加密钥数无法绕过;请联系租户管理员调高上限。 - • 账户余额:每次成功请求都会从您的 USD 余额扣费。余额不足返回 402;请前往 /recharge 充值。
- • 单密钥消费上限:可选的 balanceCapUsd 在累计消费达到上限后停用该密钥。适合在客户端 App 中嵌入短期密钥的场景。
- • 上游冷却:若某渠道下所有上游 token 都处于冷却或异常状态,gateway 将返回 503 upstream_unavailable。请配合退避策略重试。