文档

调用 RealRelay.ai API

基础地址、身份认证、模型 ID、渠道路由、端点清单,以及 API 返回的错误码。

Quickstart

三个步骤。如果你已经接入过 OpenAI,那么只有第二步与你相关。

  1. 1

    安装官方 SDK

    没有私有客户端。使用你已经熟悉的 openai 或 anthropic 包即可。
  2. 2

    把它指向 RealRelay.ai

    将 base_url 设为 https://www.realrelay.ai/v1,并使用你的 RealRelay.ai 密钥。
  3. 3

    选择一个模型

    把 model 设为目录中的某个 ID。你代码里的其他部分都不用改。
1pip install openai
1npm install openai
1from openai import OpenAI23client = OpenAI(4    base_url="https://www.realrelay.ai/v1",5    api_key="sk-***",6)78response = client.chat.completions.create(9    model="jd/glm-5.2",10    messages=[{"role": "user", "content": "Hello"}],11)1213print(response.choices[0].message.content)
1import OpenAI from "openai";23const client = new OpenAI({4  baseURL: "https://www.realrelay.ai/v1",5  apiKey: process.env.REALRELAY_API_KEY,6});78const response = await client.chat.completions.create({9  model: "jd/glm-5.2",10  messages: [{ role: "user", content: "Hello" }],11});1213console.log(response.choices[0].message.content);
1curl https://www.realrelay.ai/v1/chat/completions \2  -H "Authorization: Bearer $REALRELAY_API_KEY" \3  -H "Content-Type: application/json" \4  -d '{5    "model": "jd/glm-5.2",6    "messages": [{ "role": "user", "content": "Hello" }]7  }'

Authentication

在控制台中创建一个密钥。默认方式是在 Authorization 头中使用 bearer 认证。为了让厂商 SDK 无需改动即可工作,另外还接受两种方式: 在 /v1/messages 上使用 x-api-key;在 /v1beta 上使用 x-goog-api-key,或使用 ?key= 查询参数。它们是等价的,你的 SDK 发哪种就用哪种。

1Authorization: Bearer sk-***2Content-Type: application/json

切勿把密钥放进前端代码,也不要提交到代码仓库。浏览器端的功能应当调用你自己的后端,由后端持有密钥并转发请求。

Model IDs

模型 ID 有两种形式,两者都是可以直接发送的真实地址。像 glm-5.2 这样的裸规范名会被路由到当前正在提供该模型的任意渠道。加上渠道前缀,例如 jd/glm-5.2,则会把请求固定到那一个渠道上。

1# Routed: any channel serving this model2model="glm-5.2"34# Pinned: exactly this channel5model="jd/glm-5.2"

目录中列出的是带前缀的形式,因为只有它对应唯一的价格。要获取你的密钥所接受的确切 ID 集合,请调用 GET /v1/models。

Channel routing

当你发送裸规范名时,由路由策略挑选渠道。共有三种策略,在控制台中按账户逐一选择:

  • lowest_price —— 提供该模型的最便宜的渠道。未设置任何策略时,这是默认值。

  • lowest_latency —— 近期响应时间最优的渠道。

  • default —— 平台顺序:先按渠道优先级,再按权重。

带前缀的模型 ID 不会查询策略。固定一个渠道和请求最便宜的渠道是两种不同的请求,而前缀优先。

Endpoints

基础地址是 https://www.realrelay.ai。不同模型支持哪些端点各不相同;目录会按模型逐一列出。其中一个端点是异步的 —— 请参见其所在行的轮询步骤。

POST/v1/chat/completionsChat Completions。兼容 OpenAI,也是多数集成的默认入口。
POST/v1/responsesResponses 接口,用于工具调用与结构化输出。
POST/v1/messagesAnthropic 请求形状,Anthropic SDK 无需改动即可使用。
POST/v1beta/models/{model}:generateContentGemini 原生请求形状,经协议兼容层提供。
POST/v1/images/generations图像生成与编辑。
POST/v1/video/generationsGET /v1/video/generations/{task_id}视频生成。异步:先提交,再轮询任务标识直到结束。
GET/v1/models列出你的密钥可以调用的模型。

Errors

错误使用标准 HTTP 状态码,并附带 JSON 主体。请根据状态码以及 error.code 来分支处理: error.type 表示失败来自何处 —— 平台失败时为 new_api_error,而当失败源自模型提供方时则为提供方自己的类型 —— 因此它太粗略,不适合用来做分支判断。

1{2"error": {3  "message": "...",4  "type": "new_api_error",5  "code": "insufficient_user_quota"6}7}
400bad_request_body请求体格式有误,或缺少必填字段。
401—API 密钥缺失、格式错误、已禁用或不存在。这类失败不带错误码。
403access_denied密钥存在但不允许发起该请求——例如调用方不在其 IP 允许列表内。
403insufficient_user_quota账户余额或订阅额度已用尽。
429—当前窗口内请求过多。请以指数退避重试;平台不返回 Retry-After 头。
503model_not_found当前没有已启用的渠道提供该模型 ID。
500do_request_failed请求已到达模型供应方但未能完成。可以重试。

Rate limits

限额按 API 密钥计算,并取决于你的套餐;当前数值显示在控制台中。超出限额会返回 429,并附带上文所示的错误主体。没有 X-RateLimit-* 头,也没有 Retry-After —— 状态码就是全部信号,因此请按你自己的节奏使用指数退避,而不要等待一个根本不会出现的提示。

还是卡住了?

在控制台中查看实时用量和请求日志,或联系我们获取接入帮助。