核心功能
GET /v1/models 是当前 Key 可调用模型的权威来源;可用性还受商品激活、路由健康、权限、余额、区域与私有接入策略影响。
- OpenAI 兼容 API — 任何 OpenAI SDK 客户端均可即插即用
- 智能路由,支持可配置策略(加权、轮询、基于延迟、故障转移)
- 内置断路器和速率限制,保护您的应用
RouterShift 提供统一的多协议 API,接入平台当前已审核上架的 AI 模型。使用单个 API Key 即可按可用路由发起请求,并使用负载均衡、故障转移和成本优化能力。
与 OpenAI 客户端库完全兼容。只需将 SDK 的 base_url 改为以下地址,配合您的 RouterShift API Key 即可使用。
https://api.routershift.com/v1适用于 Anthropic SDK 或 Claude Code。注意:不带 /v1 后缀,SDK 会自动追加 /v1/messages。
https://api.routershift.comOpenAI、Anthropic 与 Gemini 客户端通常可调整 Base URL 与凭据接入。原协议扩展不等于可跨协议移植:桥接仅支持能等价表达其语义的字段。已文档化接口以在线 OpenAPI 为准,实际路由与模型限制仍适用。
GET /v1/models 是当前 Key 可调用模型的权威来源;可用性还受商品激活、路由健康、权限、余额、区域与私有接入策略影响。
如果遇到问题或有疑问,请查看以下各节以获取详细指南。有关账单咨询,请通过控制台联系支持团队。如需实时状态更新,请访问状态页面。
下表是公开数据面的人工索引;机器契约以 /api/openapi.yaml 为准,交互式文档位于 /api/docs,且每个端点和模型仍受 Key 权限约束。
/v1/version数据面 API 版本与兼容性信息
/v1/models模型列表
/v1/requests/:id原请求回执——只读核对执行与账务证据,不重发
/v1/requests/:id/result已捕获音频结果——读取已支持的原结果,不重新生成
/v1/chat/completions聊天补全(OpenAI 兼容)
/v1/contracted/chat/completions聊天补全(OpenAI 兼容)
/v1/messages消息 API(Anthropic 兼容)
/v1/messages/count_tokens消息 token 估算(文本、思考与工具;不是精确原生用量)
/v1/models/gemini/:model/generateContentGemini 内容生成
/v1/models/gemini/:model/streamGenerateContentGemini 流式生成内容
/v1/embeddings文本嵌入向量
/v1/rerank重排序
/v1/chat/completions/estimate请求前 Token 与费用预估
/v1/images/generations图片生成
/v1/contracted/images/generations图片生成
/v1/images/tasks/:id图片任务——查询已有任务,不重新提交生成
/v1/audio/transcriptions音频转文字
/v1/audio/speech文字转语音
/v1/contracted/audio/speech文字转语音
/v1/tts扩展文字转语音
/v1/transcriptions扩展音频转写
/v1/contracted/transcriptions扩展音频转写
/v1/midjourney/imagineMidjourney 图片生成
/v1/suno/generateSuno 音乐生成
/v1/video/generations视频生成任务
/v1/contracted/video/generations视频生成任务
/v1/video/tasks/:task_id视频生成任务状态
/v1/chat/completions/async异步任务 — 提交
/v1/chat/completions/async/:task_id异步任务 — 查询状态
/v1/chat/completions/async/:task_id/result异步任务 — 获取结果
/v1/batch批处理
/v1/batch/:batch_id批处理任务状态
/v1/batch/:batch_id/results批处理结果下载
/v1/batch/:batch_id/cancel取消批处理任务
/v1/mcp/MCP JSON-RPC 工具网关
/v1/mcp/sseMCP SSE 传输
/v1/a2a/A2A JSON-RPC 网关
/v1/a2a/sseA2A SSE 事件流
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /v1/version | 数据面 API 版本与兼容性信息 |
| GET | /v1/models | 模型列表 |
| GET | /v1/requests/:id | 原请求回执——只读核对执行与账务证据,不重发 |
| GET | /v1/requests/:id/result | 已捕获音频结果——读取已支持的原结果,不重新生成 |
| POST | /v1/chat/completions | 聊天补全(OpenAI 兼容) |
| POST | /v1/contracted/chat/completions | 聊天补全(OpenAI 兼容) |
| POST | /v1/messages | 消息 API(Anthropic 兼容) |
| POST | /v1/messages/count_tokens | 消息 token 估算(文本、思考与工具;不是精确原生用量) |
| POST | /v1/models/gemini/:model/generateContent | Gemini 内容生成 |
| POST | /v1/models/gemini/:model/streamGenerateContent | Gemini 流式生成内容 |
| POST | /v1/embeddings | 文本嵌入向量 |
| POST | /v1/rerank | 重排序 |
| POST | /v1/chat/completions/estimate | 请求前 Token 与费用预估 |
| POST | /v1/images/generations | 图片生成 |
| POST | /v1/contracted/images/generations | 图片生成 |
| GET | /v1/images/tasks/:id | 图片任务——查询已有任务,不重新提交生成 |
| POST | /v1/audio/transcriptions | 音频转文字 |
| POST | /v1/audio/speech | 文字转语音 |
| POST | /v1/contracted/audio/speech | 文字转语音 |
| POST | /v1/tts | 扩展文字转语音 |
| POST | /v1/transcriptions | 扩展音频转写 |
| POST | /v1/contracted/transcriptions | 扩展音频转写 |
| POST | /v1/midjourney/imagine | Midjourney 图片生成 |
| POST | /v1/suno/generate | Suno 音乐生成 |
| POST | /v1/video/generations | 视频生成任务 |
| POST | /v1/contracted/video/generations | 视频生成任务 |
| GET | /v1/video/tasks/:task_id | 视频生成任务状态 |
| POST | /v1/chat/completions/async | 异步任务 — 提交 |
| GET | /v1/chat/completions/async/:task_id | 异步任务 — 查询状态 |
| GET | /v1/chat/completions/async/:task_id/result | 异步任务 — 获取结果 |
| POST | /v1/batch | 批处理 |
| GET | /v1/batch/:batch_id | 批处理任务状态 |
| GET | /v1/batch/:batch_id/results | 批处理结果下载 |
| POST | /v1/batch/:batch_id/cancel | 取消批处理任务 |
| POST | /v1/mcp/ | MCP JSON-RPC 工具网关 |
| GET | /v1/mcp/sse | MCP SSE 传输 |
| POST | /v1/a2a/ | A2A JSON-RPC 网关 |
| GET | /v1/a2a/sse | A2A SSE 事件流 |
RouterShift 兼容多种 API 协议。下表列出了各协议对应的基础 URL 和 SDK 配置方式。
OpenAI 兼容
https://api.routershift.com/v1
Models: <available-model-code>
Authorization: Bearer / x-api-key
Anthropic 兼容
https://api.routershift.com
Models: <available-model-code>
x-api-key: sk-xxx
Gemini 原生
https://api.routershift.com/v1
Models: <available-model-code>
Authorization: Bearer
| 基础 URL | 模型参数示例 | 认证 Header |
|---|---|---|
https://api.routershift.com/v1 标准 OpenAI SDK,只需改 base_url | <available-model-code> | Authorization: Bearer / x-api-key |
https://api.routershift.com 标准 Anthropic SDK,只需改 base_url | <available-model-code> | x-api-key: sk-xxx |
https://api.routershift.com/v1 Gemini 原生格式,直接调用 generateContent | <available-model-code> | Authorization: Bearer |
全平台使用统一的认证 Header。支持两种格式,效果完全相同:
OpenAI 兼容格式
Authorization: Bearer sk-xxxAnthropic 兼容格式
x-api-key: sk-xxx平台能力
RouterShift 提供统一的多协议 API,接入平台当前已审核上架的 AI 模型。使用单个 API Key 即可按可用路由发起请求,并使用负载均衡、故障转移和成本优化能力。
RouterShift 采用预付钱包和请求级价格快照。成功请求按客户售卖价扣费,图片、音频、视频等模型则按其已配置的原生计费维度结算。
GET /v1/models 是当前 Key 可调用模型的权威来源;可用性还受商品激活、路由健康、权限、余额、区域与私有接入策略影响。
在 3 分钟内上手 RouterShift。按照以下 5 步流程从注册到监控。
RouterShift 提供对话、嵌入、模型发现及其他受支持端点。请按所选 OpenAI、Anthropic 或 Gemini 兼容端点使用对应的请求与响应格式。
私有接入提供 BYOK 与外部账号池接入能力,支持增值服务化分层管理,并具备故障回退能力。
可通过 MCP 给 Agent 添加工具,也可在应用代码中使用 Python/Node SDK,两者是并列接入方式。请按下面四步配置本地 stdio,并避免把凭据放入共享配置或版本控制。
RouterShift 采用预付钱包和请求级价格快照。成功请求按客户售卖价扣费,图片、音频、视频等模型则按其已配置的原生计费维度结算。
在 3 分钟内上手 RouterShift。按照以下 5 步流程从注册到监控。
自助注册开放时创建账号;否则按管理员提供的邀请或账号开通流程操作。
创建有明确名称的 API Key,并按应用最小权限限制模型、预算、有效期、IP 范围等范围。
查询 GET /v1/models,核对已审批客户售卖价及原生计费维度,并确保对应人民币或美元钱包有足够可用余额。
使用下方 curl 或 SDK 示例,并将 YOUR_API_KEY 与 YOUR_MODEL_CODE 替换为控制台和运行时模型目录中的实际值。
curl "https://api.routershift.com/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ROUTERSHIFT_API_KEY" \
-d '{
"model": "YOUR_MODEL_CODE",
"messages": [
{
"role": "user",
"content": "Hello!"
}
],
"max_tokens": 100
}'按日期、模型与 API Key 核对状态、延迟、Token 或原生用量维度、缓存来源和客户支出,并按需配置预算与告警。
现在即可使用标准兼容客户端,也可采用平台自有的 Python 与 Node.js 数据面 SDK;两种方式共享同一份在线 API 契约。
本页固定版本下载对应 Python 0.3.7 与 Node 0.3.7,包内已包含模型详细发现方法。Python 需要 3.9 或更高版本;Node.js 和本地 MCP 需要 Node 20 或更高版本。这些安装包不代表已在 npm 或 PyPI 发布。普通 Node SDK 用户无需安装可选 MCP 依赖。
无需客户源码或供应商凭据。只需对齐语言/运行环境与 SDK 版本、model_code + operation + mode、脱敏参数、媒体限制与 URL 有效期、超时/恢复方式、币种预算和并发目标。REST 是执行合同;SDK 是可选薄客户端,本地 MCP 是 Agent 的 stdio 入口。自有 SDK 的 Base URL 使用不带 /v1 的 origin。厂商 SDK 可能需要字段映射和重试调整,不能承诺只换 Key 或 Base URL 即兼容多模态。还需对齐脱敏请求/响应样例与预期结果;先用合成响应验证 200/202、GET 待完成、SSE 不完整、提交未知和重复交付,真实付费验收另需明确授权与预算。
python -m pip install "https://routershift.com/downloads/sdk/routershift-0.3.7-py3-none-any.whl"请先运行这个只读请求,再把返回的准确模型代码复制到下方示例。列表只说明该密钥可以看见哪些模型,不证明每个模型已启用全部操作或模式。
使用实际执行的同一 Key 读取 GET /v1/models?details=1:不创建任务、不预留资金、不调用供应商,认证、日志和限流仍适用。逐项查看 details.operations 的端点/模式、constraints.status 与 import_contract.status/reason,完整保留维度、条件、币种、精度、selector、观察时间及 semantic_sha256。参考价格不等于可执行合同;限制缺失/未知不等于无限制,available 也不保证资金可用。当前不是完整的每模型输入 Schema,也不代表非 Token 合同已统一投影。models.list() 默认仍是普通列表;请用本版已包含的 SDK 方法或 REST 显式请求详情。constraints 的 available 仅声明该操作已审子集,unsupported 须查对应操作说明。
须区分 details.constraints.operations[].scope:reviewed_subset 只表示操作的审核子集;finite_admission_opt_in 仅适用于显式启用有限上界的请求,不是普通聊天的全局限制。parameters 不是完整模型输入 Schema。若存在 details.admission,应查看 status、profile、/details/admission/required_headers 和声明的输入/输出范围;未知模型保持 unavailable。发现响应不授予资金或通用费用上界。
Node 0.3.7 已包含 listDetails() 及 models.list 的 details=true 选项;Python 0.3.7 已包含 models.list(details=True) 与 list_details()。这些详细发现方法已随本版本安装包交付。models.list() 默认仍返回普通列表,旧安装不会自动获得新方法。
curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/models?details=1" \
-H "Authorization: Bearer $ROUTERSHIFT_API_KEY"Python、Node SDK 与 MCP 都可调用文本模型。Agent 可以继续使用自己的主模型,按需调用 RouterShift;模型权限和费用仍由同一套 API 管理。
import os
from routershift import RequestOptions, RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
response = client.chat.completions.create(
model="YOUR_TEXT_MODEL_CODE",
messages=[{"role": "user", "content": "Summarize this project in one sentence."}],
request_options=RequestOptions(max_retries=0),
)
print(response.choices[0].message.content)下例使用 WAV 音频输入,并通过 HTTP 流式响应请求文本和音频输出。请选用已验收的 OpenAI 兼容路由,按模型支持选择 stream 和音色;仅支持 SSE 的模型必须使用 stream:true,MCP 的 routershift_chat 也接受此参数。SDK 保留内容块、audio、modalities、工具调用和音频响应。HTTP Omni 不等于 Realtime WebSocket,也不代表可跨任意供应商协议转换。
import base64
import os
from pathlib import Path
from routershift import RequestOptions, RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
audio_data = base64.b64encode(Path("/absolute/path/to/sample.wav").read_bytes()).decode()
response = client.chat.completions.create(
model="YOUR_OMNI_MODEL_CODE",
messages=[{"role": "user", "content": [
{"type": "text", "text": "Describe the sound."},
{"type": "input_audio", "input_audio": {"data": audio_data, "format": "wav"}},
]}],
stream=True,
modalities=["text", "audio"],
audio={"voice": "YOUR_MODEL_VOICE", "format": "wav"},
request_options=RequestOptions(max_retries=0),
)
for chunk in response:
if chunk.choices:
delta = chunk.choices[0].delta or {}
print(delta.get("content", ""), end="")
if delta.get("audio"):
print(delta["audio"].get("transcript", ""), end="")audio.speech 调用 /v1/audio/speech。Python 返回音频字节;Node 返回 data 字节及实际 contentType。请使用模型支持的音色和格式;返回音频不会自动保存到本地。精确 qwen3-tts-flash-2025-11-27 的 bailian.tts.characters 合同是仅支持 REST 的 URL-TTS:向 /v1/tts 或 /v1/audio/speech 提交 response_mode=json,返回 audio_url 而非内嵌音频,普通 SDK 字节方法及本地 MCP 音频工具不支持此返回形式。其计费证据是原生加权 usage.characters,不能用本地字符数、字节数或播放时长替代。Seed Audio 的计费量是原生 original_duration,不是播放 duration 或字幕时间。上述合同仍须独立完成商品、报价、绑定和验收;文档不代表草稿已激活。
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
speech = client.audio.speech(
model="YOUR_SPEECH_MODEL_CODE",
input="Welcome to RouterShift.",
voice="YOUR_MODEL_VOICE",
response_format="wav",
)
print(len(speech))audio.transcribe 将明确指定的音频文件以 multipart 提交到 /v1/audio/transcriptions。文件名应保留真实格式。下例请求 JSON 并读取 text;模型的语言与格式支持以实际路由为准。
import os
from pathlib import Path
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
transcript = client.audio.transcribe(
model="YOUR_TRANSCRIPTION_MODEL_CODE",
file=Path("/absolute/path/to/sample.wav").read_bytes(),
filename="sample.wav",
response_format="json",
)
print(transcript.text)Python 使用 audio.transcribe_url,Node.js 使用 audio.transcribeURL;也可向 /v1/transcriptions 直接提交含 file_url 的 JSON。SDK 只校验 HTTPS URL,不在本地下载录音。FunASR/Qwen ASR 的公有 JSON 仅在原生回执提供有效时间信息时返回 segments/words;start/end 以秒表示,由原生毫秒转换,缺失或无效时间不补造,并以 timestamps_omitted 标记。字幕时间和播放时长不是计费证据;计费使用该合同的原生最终或累计 duration,累计报告不相加,缺失或冲突需对账,不重发请求。Go 与 Java 标签使用各自标准 HTTP 客户端;RouterShift 不宣称提供自有 Go 或 Java SDK。
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
transcript = client.audio.transcribe_url(
"YOUR_TRANSCRIPTION_MODEL_CODE",
"https://media.example/recording.wav",
language="en",
audio_format="wav",
response_format="json",
)
print(transcript.text)通过 images.generate 调用已启用生图能力的模型。支持异步图片的模型可在 Python 中添加 async_=True,在 Node.js 中添加 async: true,再用返回的 id 调用 images.retrieve。完成响应的 data 包含图片 URL;等待中的响应包含 id 和 status。
import os
from routershift import ImageTaskResponse, RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
image = client.images.generate(
model="YOUR_IMAGE_MODEL_CODE",
prompt="A quiet garden in watercolor",
)
print(image)
if isinstance(image, ImageTaskResponse):
print(client.images.retrieve(image.id))videos.create 提交一个视频任务并返回 task_id。请先保存任务 ID,再用 videos.retrieve 查询;等待中的任务可能尚无 video_url。两个 SDK 也提供 videos.poll 进行有期限的等待。API 路径为 /v1/video/generations,其中 video 为单数。
已验证的原生 Seedance 与 Wan 3.0 路由支持 generate_audio:不填写保留上游默认值,false 无音轨,true 有音轨。Wan 映射为 parameters.audio,当前默认有声,开关声音使用相同视频价格,不另加音频计费。其他路由不保证支持,不能静默删掉显式值。
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
task = client.videos.create(
model="YOUR_VIDEO_MODEL_CODE",
prompt="A slow camera movement through a garden",
)
print(task.task_id)
result = client.videos.retrieve(task.task_id)
print(result.status, result.video_url)只发送所选模型及操作已验收的参数。保留显式 false 和 seed=0;省略字段表示沿用上游默认值。下列说明描述代码实现,不代表线上可用性已验证。
代码支持不等于已部署,已部署不等于商品已验收。离线开发中的高级编辑、视频延长、MOV、Draft、HappyHorse、Wan 2.7、Animate、VACE 不代表商品已开通。付费提交前确认具体模型、操作及参数。
此例用三张非人像 HTTPS 参考图生成一张图片,再把返回的 HTTPS URL 作为视频首帧的 image_url。两个模型占位符都应替换为密钥在 /v1/models 可见、且分别已验收相应操作的代码;可见不等于获准调用。示例中的 720p 和 5 秒还需所选视频路由支持。
方舟:选用已验收的 Seedream Pro 图像编辑路由和 Seedance 首帧路由。只有支持三张参考图的模型才能这样传入;2048x1152 不是全局尺寸。真人肖像另有规则,同账号文生图例外不授权三照片融合。
百炼:已验收的 Qwen Image 3.0 编辑路由支持一至三张参考图,返回 URL;不要预期 b64_json,也不要假设异步图片模式已启用。Wan 首帧视频使用 image_url。分辨率和时长须以所选路由验收范围为准;供应商控制台的能力不证明平台路由已开通。
各标签展示同一顺序,并非自动重试。REST 或 MCP 应逐步调用。若已直接返回完成图片 URL,就跳过图片任务查询;否则只查询原图片任务一次,取得可用 HTTPS URL 后才继续。保存视频 task_id 并查询同一任务一次;待处理任务可稍后再查。
REST 和 SDK 的图片任务返回 id,视频任务返回 task_id。本地 MCP 如有任务标识,会在 structuredContent.task_id 中给出;先检查 isError 与 next_action,再读取 structuredContent.outputs[].url 或附带的 MCP 图片内容。只有实际 HTTPS URL 才能传入视频 image_url;单独的图片内容不是 URL。不要假设 MCP 返回 REST 的 data[0].url。
curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/models?details=1" \
-H "Authorization: Bearer $ROUTERSHIFT_API_KEY"
curl --fail-with-body --connect-timeout 10 --max-time 120 -i -X POST "https://api.routershift.com/v1/images/generations" \
-H "Authorization: Bearer $ROUTERSHIFT_API_KEY" -H "Content-Type: application/json" \
-d '{"model":"YOUR_ACCEPTED_IMAGE_MODEL_CODE","prompt":"Combine three landscapes into one scene","image":["https://media.example/landscape-1.png","https://media.example/landscape-2.png","https://media.example/landscape-3.png"],"n":1,"response_format":"url"}'
curl --fail-with-body --connect-timeout 10 --max-time 30 -i "https://api.routershift.com/v1/images/tasks/IMAGE_TASK_ID" \
-H "Authorization: Bearer $ROUTERSHIFT_API_KEY"明确返回的 400 拒绝与提交结果未知的传输超时不同。失败时保留安全的错误代码、消息和 X-Request-ID(若有任务 ID 也保留);不要期待上游原始原因,也不要自动重发付费 POST。任务查询失败只表示状态暂不可得,不等于生成失败。等待超时不代表取消或退款。预算、扣费和结算以平台记录为准,不以本示例或供应商展示价格为准。
可通过 MCP 给 Agent 添加工具,也可在应用代码中使用 Python/Node SDK,两者是并列接入方式。请按下面四步配置本地 stdio,并避免把凭据放入共享配置或版本控制。
请使用 Node 20 或更高版本。此 MCP 专用安装会加入两个协议对等依赖;普通 Node SDK 安装不需要它们。
mkdir routershift-mcp
cd routershift-mcp
npm init -y
npm install "https://routershift.com/downloads/sdk/routershift-sdk-0.3.7.tgz" @modelcontextprotocol/server@2.0.0 zod@4.6.4请在新目录中运行。命令会输出经过 JSON 转义的绝对路径,可直接粘贴到配置的 args 数组。
node -p "JSON.stringify(require('node:path').resolve('node_modules/@routershift/sdk/dist/mcp/cli.js'))"替换示例路径,仅在本地环境中设置 API Key,并保留可信 API origin,不要添加 /v1、凭据、查询参数或片段。Codex 标签使用其文档规定的 stdio 与 env_vars 语法。
{
"mcpServers": {
"routershift": {
"command": "node",
"args": [
"/absolute/path/to/your/project/node_modules/@routershift/sdk/dist/mcp/cli.js"
],
"env": {
"ROUTERSHIFT_API_KEY": "sk-REPLACE_LOCALLY",
"ROUTERSHIFT_BASE_URL": "https://api.routershift.com"
}
}
}
}重启或重新加载 MCP 客户端,确认十个工具全部出现,再先调用只读的 routershift_list_models。只有确实要提交相应操作时才调用计费模型工具。
提供十个工具:routershift_list_models, routershift_estimate_chat, routershift_chat, routershift_generate_image, routershift_create_video, routershift_get_task, routershift_get_request, routershift_speech, routershift_transcribe, routershift_transcribe_url。先选择支持所需操作的模型;图像和视频任务通过 routershift_get_task 查询,传入 kind(image 或 video)和 task_id。 使用只读的 routershift_get_request 和 request_id 查询请求回执,不会提交或激活付费操作。 0.3.7 可用 details:true 读取详细模型与合同;routershift_estimate_chat 只读试算有限费用上界,不调用供应商、不预留资金、不自动执行,funds_verified=false。报价不是最终账单或调用授权。
routershift_chat 支持 HTTPS 图片/视频引用;audio_file 可读取你明确指定的 WAV/MP3 绝对路径,单文件最多 16 MiB。routershift_transcribe 通过 file_path 读取一个指定的本地音频文件;routershift_transcribe_url 传递一个 HTTPS file_url 而不下载。音频生成和 Omni 音频输出以内联音频返回。routershift_generate_image 可选 response_format url 或 b64_json;对大小受限且格式有效的 PNG、JPEG、WebP 或 GIF b64_json 输出,会返回 MCP 原生 image content,不写入、下载或转托管文件,也不会把 Base64 塞进文本 JSON。超限或未知格式的图片数据会被明确省略;不要为取回被省略的输出重发付费请求。适配器不扫描目录,也不自动保存结果。
JSON 标签展示常见的 mcpServers 结构;TOML 标签展示 Codex 文档规定的语法。不同客户端的配置位置与子进程权限不同;仅支持远程 MCP 的客户端需要另行支持的传输方式。这些示例不宣称已在所有 Agent 界面实测。
本地 MCP 适配器让 Agent 调用 RouterShift 的文本、多模态、音频和任务查询 API。平台现有 /v1/mcp 网关用于接入已配置的外部工具,其 HTTP/SSE 配置不能替代此处的本地模型工具配置。
UGC 平台:只提交一次,保存任务编号和原始 X-Request-ID,再查询同一任务。业务作业编号不等于服务端重放保证。REST、SDK、MCP 共用任务和计费合同;切换接入方式不能重发结果未知的生成请求。
仅当 import_contract 可用且操作已支持时,按其 endpoint_prefix/request_header (X-RouterShift-Customer-Contract) 使用 /v1/contracted/...,提交完整请求与 semantic_sha256。普通 /v1 路径加同名头并不启用保护;合同不支持、404 或摘要漂移时停止,不降级无保护重发。受保护聊天另需 X-RouterShift-Token-Bound、X-RouterShift-Max-Admission-Quote、X-RouterShift-Quote-Currency 及已核实的有限输入/输出/思考合同,不能从摘要或上下文长度猜填。公开报价试算,以及 bound_proven=false 或 funds_verified=false 的 admission_quote,不是资金授权或全模型费用上界。
提交、任务执行、产物交付和计费分别记录。缺少任务编号先核查,不发新的 POST;GET 失败只代表状态暂不可用。生成完成但下载失败时恢复同一已知产物的交付。released 和 reconciliation_required 结束轮询,但不证明生成成功或已退款。
保存原请求编号,以 GET /v1/requests/ORIGINAL_REQUEST_ID 读取原回执;GET /v1/requests/ORIGINAL_REQUEST_ID/result 仅重取已支持的已捕获音频结果,不是通用产物仓库。Python 0.3.7(自 0.3.6 起) 的 audio.retrieve/poll 封装原生 ASR 202 查询,Node 0.3.7 不宣称有同等方法。上述 GET 不重提生成,也不认领账务恢复。同步结果和真实异步任务编号由客户保存;提交未知、交付失败和待结算分别处理,超时不是重发收费 POST 的许可。
receipt.metering.basis=recorded_settlement_context 只投影已经结算记录中保存的维度,不是供应商原始回执、供应商账单或完整费用分项。须保留 quantity/unit/pricing_unit_divisor 字符串;缺失或不支持的证据保持 unavailable,不将未知用量补零,不据此推算最终扣费或触发恢复。
curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/requests/ORIGINAL_REQUEST_ID" \
-H "Authorization: Bearer $ROUTERSHIFT_API_KEY"
curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/requests/ORIGINAL_REQUEST_ID/result" \
-H "Authorization: Bearer $ROUTERSHIFT_API_KEY"异步文字状态/列表保留 status,并增加 execution_status、billing_status、reason_code、next_action 和 retry_allowed: false。completed 仅表示结果可读取,不表示账务已结算;unknown 不代表免单或已退款。图片 SDK 的 _billing_status 与 MCP 的 billing_status 只透传实际、白名单中的 X-Billing-Status 响应头,缺失或非法时不填值。查询不认领账务恢复,也不授权重新提交。
在用户费用页或管理员请求日志页复制完整请求编号,再按 request_id 精确查询:非空有效 UTF-8、最多 256 字节,不含空白或控制字符。原有权限、时间和模型筛选仍生效;无匹配不证明未受理或没有费用。原提交编号、任务编号和后续查询编号分别保留。CSV 导出仍覆盖整个所选时间范围,不会缩成编号筛选结果。
用业务平台自己的队列和每用户限额控制新提交,采用有界、错峰轮询。超时仅结束本地等待,不取消上游执行。模拟并发测试不等于供应商已通过同时生成容量认证。
请将 YOUR_* 占位符替换为自己的模型代码、音色或任务 ID。/v1/models 返回密钥可见的模型代码,不证明文本、Omni、图像、视频、音频或每种模式都已启用。请核实所选模型的输入输出与已启用模式;不宣称所有模型通用或支持 Realtime。
SDK 普通聊天/Messages 保留兼容性自动重试;UGC 聊天/Omni 提交必须显式使用 Python RequestOptions(max_retries=0) 或 Node maxRetries=0、redirect=error。专用媒体方法零重试不覆盖所有方法。图片、视频、语音生成和转写提交不会自动重试;MCP 聊天也只提交一次。请求超时或取消等待不代表上游已取消、已退款或可安全重发。请保存图像 id、视频 task_id 后查询;released 和 reconciliation_required 是终态,但不代表生成成功。
SDK、MCP 与直接请求共享同一套 API、价格、计量、钱包和结算,不增加独立余额或计费体系。返回结果 URL 不等于结算已完成;请结合 API 提供的计费状态与现有控制台记录查看。
价格试算的 as_of 是查询时间,不是锁价有效期。已受理任务按冻结的价格合同与原生实际用量结算,后续改价或刷新 Key 价格不追溯改写旧任务;冻结单价不等于最终金额固定。用量缺失或矛盾时进入待对账,不猜测费用。恢复时查询原任务,不按新参数重发生成。
类型化客户端覆盖模型发现、对话、Messages、向量、媒体和异步任务,不暴露控制台会话接口。
OpenAI、Anthropic 与 Gemini 兼容客户端仅承诺已支持的协议子集。须核对其 Base URL 前缀、字段映射、响应解析和重试设置;只换 Key 或 Base URL 不保证非聊天多模态兼容。
MCP 与 A2A 为工具和 Agent 提供稳定互操作边界,应用只依赖功能契约,不依赖路由技术路线。
SDK 独立于平台部署发布。本版 Python 0.3.7 与 Node 0.3.7 已包含详细发现方法;固定版本下载须核对 SHA-256 校验值。这些安装包不代表 npm 或 PyPI 注册表发布,也不代表模型已通过原生验收;在线 OpenAPI 仍是权威契约。
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
models = client.models.list()
print([model.id for model in models])
response = client.chat.completions.create(
model="YOUR_MODEL_CODE",
messages=[{"role": "user", "content": "Hello"}],
)所有 API 请求均需使用 Bearer Token 进行身份认证。您可以在控制台中生成和管理 API Key。
API Key 以 sk- 开头,后跟唯一标识符。请妥善保管您的 API Key,切勿在客户端代码或版本控制中暴露。
在每次请求的 Authorization 请求头中包含您的 API Key:
Authorization: Bearer YOUR_API_KEY用户 Webhook 投递通过 X-RS-Signature 携带请求体的 HMAC-SHA256 十六进制摘要;X-RS-Event 与 X-RS-Delivery 分别标识事件和投递。
RouterShift 提供对话、嵌入、模型发现及其他受支持端点。请按所选 OpenAI、Anthropic 或 Gemini 兼容端点使用对应的请求与响应格式。
发送聊天补全请求,需包含模型名称、消息数组以及可选参数如 temperature、max_tokens 和 top_p。RouterShift 根据您的路由配置将请求路由到适当的提供商。
通过设置 stream: true 启用流式输出。RouterShift 支持服务器发送事件(SSE)进行实时 Token 流式输出。流式格式与 OpenAI 流式规范兼容。
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.routershift.com/v1",
api_key=os.environ["ROUTERSHIFT_API_KEY"],
)
stream = client.chat.completions.create(
model="YOUR_MODEL_CODE",
messages=[{"role": "user", "content": "Tell me a story"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)对于长时间运行的任务或批处理,使用异步模式。提交请求并轮询结果——适用于超出典型超时限制的工作负载。
向 POST /v1/batch 上传 JSONL 文件,再轮询任务状态与结果。处理时长和价格取决于所选执行模式及模型契约;提交批次本身不保证折扣或固定完成时限。
使用 /v1/embeddings 端点生成文本向量嵌入。嵌入可用于语义搜索、聚类和检索增强生成(RAG)。
将对话请求体提交到 POST /v1/chat/completions/estimate,可在调用前估算 Token 与费用。预估不等于最终扣费;账单以实际用量和适用价格契约为准。
实际限制来自 API Key、客户策略、模型路由与上游容量;请把响应头和控制台配置视为运行时事实。
平台 Key 返回 x-ratelimit-limit-{tps,rpm,tpm,tph},启用的限额另返回 x-ratelimit-remaining-{tps,rpm,tpm,tph}。仅等待可恢复容量的拒绝返回 Retry-After,向上取整为秒,不保证重试成功。缺少该头时先核对单请求额度及策略;结果未知的 POST 不自动重发,仅对确认可重试的请求使用有限、带抖动的退避。
429429 Too Many Requests — 您已超出速率限制。检查 Retry-After 头并退避。402402 Payment Required — 您的账户余额不足。请在计费部分添加资金。403403 Forbidden — 已认证 Key 无权使用该模型、路由或操作;请检查 Key 范围与客户策略。503503 Service Unavailable — 当前请求的模型没有可用提供商。断路器可能已临时禁用所有提供商。401401 Unauthorized — 缺少或格式不正确的 Authorization 请求头。400400 Bad Request — 请求参数无效。请查看错误消息了解详情。RouterShift 采用预付钱包和请求级价格快照。成功请求按客户售卖价扣费,图片、音频、视频等模型则按其已配置的原生计费维度结算。
实际扣费使用平台已审批的客户售卖价,并在请求级锁定模型、币种、价格版本和计费维度。公开模型页展示开发商刊例价用于比较;供应商成本价属于平台与供应商结算事实,不用于客户扣费。
在控制台按日期、模型和 API Key 核对调用、Token、缓存维度和消费金额。账单、发票与退款均引用服务端保存的请求级价格证据,调价不会重写历史记录。
人民币与美元钱包独立记账。可用现金已扣除冻结额,请勿再次相减。个人延停与平台保障默认关闭,需单独审核授信及保障资金;信用占用与未偿本金不是现金余额,也不自动授予模型调用权限。请求仍按已审核计量合同及费用上界准入;实时进度不是最终账单,结果或用量未知时保留待核算责任。充值请以当前开放的支付方式和真实到账状态为准。
仅在平台已配置相应规则时,套餐、促销、代金券或节省计划才会影响客户价格;代金券资金来源与供应商原生应付款保持分离。
经销商从受邀用户的每次请求中获取平台利润的百分比分成。支持按模型设置差异化佣金率——例如 GPT-4o 分成 15%、Claude 分成 10%。通过邀请链接自动归因,每次请求实时结算。
私有接入提供 BYOK 与外部账号池接入能力,支持增值服务化分层管理,并具备故障回退能力。
启用私有接入后可绑定自己的供应商密钥。上游供应商向你的账户单独计费;RouterShift 服务费按所选套餐及适用减免执行。BYOK 不等于所有用量免费。
对接外部账号池(含终端代理/CLI 账号池)时,以统一配置层进行接入和策略控制。
私有接入是可选增值服务。启用前请核对所选套餐的固定月费或按量服务费、计费币种、续费设置与适用减免。平台基础 API 仍按量付费。
私有来源不可用时,可在密钥与区域权限允许范围内,顺序尝试同一模型的合格平台路由。平台用量仍按适用售价计费,并须通过余额和预算校验;私有接入订阅或服务费减免不代表平台兜底免费。
不是简单换算显示,而是贯穿定价、扣费、分账、退款、支付和开票的资金事实链。一个账户即可采购国内外模型:国内客户保持人民币采购与发票体验,海外供应链成本在后台按原生币种结算,双方口径互不污染。
国内商品以人民币销售和开票;即使上游按美元收费,客户也不会在每次请求中承担实时汇率波动。
跨币种请求锁定已审批的汇率版本、价格版本和真实资金腿,后续汇率变化不会重写历史账单。
供应商应付按上游原生币种形成;平台利润、经销商佣金和税额分别记账,避免把人民币销售额误当美元成本。
钱包退款按原始人民币/美元扣款腿退回;真实二次换汇单独记录汇兑损益,账单、发票和贷项凭证均由服务器权威数据生成。
了解常见的 API 错误以及如何在应用中优雅地处理它们。
所有错误均遵循标准格式,包含一个 error 对象,其中包含 message、type、code 和 param(如适用)。
{
"error": {
"message": "no upstream available",
"type": "upstream_error",
"code": "UPSTREAM_UNREACHABLE"
},
"request_id": "example-request-id"
}响应包含 Retry-After 时应优先遵循。仅重试具备幂等性或可安全重放的操作,使用带随机抖动且有上限的指数退避,并按应用设定的次数或总时长预算停止。
OpenAI 兼容推理错误使用机器可读字段 error.code。程序化处理时请读取该字段,不要依赖错误消息文本。
AUTH_INVALID登录凭证无效AUTH_EXPIRED登录已过期AUTH_EMAIL_NOT_VERIFIED邮箱未验证AUTH_INSUFFICIENT权限不足WALLET_LOW余额不足,请充值后再试WALLET_EMPTY钱包为空RATE_LIMIT_GLOBAL全站速率限制RATE_LIMIT_KEYAPI 密钥速率限制RES_MODEL_NOT_FOUND模型未找到UPSTREAM_UNREACHABLE上游供应商不可达UPSTREAM_ERROR上游供应商错误UPSTREAM_TIMEOUT上游供应商超时INTERNAL_ERROR服务器内部错误| error.code | 描述 |
|---|---|
| AUTH_INVALID | 登录凭证无效 |
| AUTH_EXPIRED | 登录已过期 |
| AUTH_EMAIL_NOT_VERIFIED | 邮箱未验证 |
| AUTH_INSUFFICIENT | 权限不足 |
| WALLET_LOW | 余额不足,请充值后再试 |
| WALLET_EMPTY | 钱包为空 |
| RATE_LIMIT_GLOBAL | 全站速率限制 |
| RATE_LIMIT_KEY | API 密钥速率限制 |
| RES_MODEL_NOT_FOUND | 模型未找到 |
| UPSTREAM_UNREACHABLE | 上游供应商不可达 |
| UPSTREAM_ERROR | 上游供应商错误 |
| UPSTREAM_TIMEOUT | 上游供应商超时 |
| INTERNAL_ERROR | 服务器内部错误 |
请根据工作负载和模型延迟分别设置连接、请求及流式空闲超时。同步、流式、异步和批处理操作不应共用一个固定超时值。