文档 · 参考

模型 API

用一把账号 API Token,从 https://api.origingame.ai/v1 调用平台目录里的文本、图像、语音、视频和 3D 模型;接口兼容 OpenAI、Anthropic 和 Gemini 的官方 SDK。

基础地址与认证

所有模型调用只走一个地址:

用途地址
OpenAI 兼容接口https://api.origingame.ai/v1
Anthropic SDK 的 base URLhttps://api.origingame.ai
Gemini 接口https://api.origingame.ai/v1beta

origingame.ai 站点本身不转发模型请求,浏览器也不经过 Portal 中转模型调用。请在服务端或脚本里直接请求 api.origingame.ai。

认证用账号 API Token(以 og- 开头),在 /me/access 创建、复制或轮换。每个账号一把;轮换后旧值立即失效。已登录的设备和已连接的应用各有自己的凭据,不用这把 Token。

获取 API Token
请求头适用说明
Authorization: Bearer og-...所有接口默认方式
x-api-key: og-.../v1/messages、/v1/messages/count_tokensAnthropic SDK 的原生方式
x-goog-api-key: og-.../v1beta/models/*Gemini SDK 的原生方式;也接受 ?key=,但查询参数会进访问日志,建议用请求头
X-Origin-Org: <组织 id>可选用组织的钱包和私有渠道调用,需要你在该组织有使用权限
注意:2026-12-31 之前,已发出的 sk- 旧 Key 仍可使用;新复制和轮换只会给出 og-。

Token 代表你的账号并从你的余额扣费。只放在服务端环境变量里,不要写进网页、游戏或提交到仓库。

兼容的协议与 SDK

把官方 SDK 的 base URL 换成 Origin,API Key 换成你的 og- Token 即可。

OpenAI

支持 Chat Completions(/v1/chat/completions)和 Responses(POST /v1/responses)。Responses 不提供 WebSocket 传输,请用 HTTP。

import OpenAI from 'openai'

const client = new OpenAI({
  baseURL: 'https://api.origingame.ai/v1',
  apiKey: process.env.OG_API_KEY,
})
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.origingame.ai/v1", api_key=os.environ["OG_API_KEY"])

Anthropic

支持 Messages(/v1/messages)和不计费的 POST /v1/messages/count_tokens(返回 {input_tokens, estimated})。Anthropic SDK 会自己拼上 /v1,所以 base URL 不带 /v1。

import os
import anthropic

client = anthropic.Anthropic(base_url="https://api.origingame.ai", api_key=os.environ["OG_API_KEY"])
message = client.messages.create(
    model="MODEL_ID",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
print(message.content[0].text)

把 MODEL_ID 换成 列出模型 结果里 supported_endpoint_types 含 anthropic 的 id。

Gemini

支持 POST /v1beta/models/{model}:generateContent 和 :streamGenerateContent,其他 Gemini 动作返回 404。

curl "https://api.origingame.ai/v1beta/models/MODEL_ID:generateContent" \
  -H "x-goog-api-key: $OG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contents":[{"parts":[{"text":"Hello"}]}]}'
import os
from google import genai
from google.genai import types

client = genai.Client(
    api_key=os.environ["OG_API_KEY"],
    http_options=types.HttpOptions(base_url="https://api.origingame.ai"),
)
response = client.models.generate_content(model="MODEL_ID", contents="Hello")
print(response.text)

MODEL_ID 选 supported_endpoint_types 含 gemini 的模型。

列出模型

GET /v1/models 返回你的 Token 能用的模型。目录随运营配置变化,账号和 Token 的模型限制也会影响结果,所以请以这次请求的返回为准,不要写死。

curl https://api.origingame.ai/v1/models \
  -H "Authorization: Bearer $OG_API_KEY"

默认返回 OpenAI 格式({"object":"list","data":[…]})。每项的 supported_endpoint_types 写明这个模型能用哪些接口,例如 openai、openai-response、anthropic、gemini、image-generation、audio-tts、openai-video。同时带 x-api-key 和 anthropic-version 请求时返回 Anthropic 格式;带 x-goog-api-key 时返回 Gemini 格式({"models":[…]})。

每个模型的价格、能力和带示例的接入说明在 模型目录,单个模型在 /tools/models/<模型 id>。

原生 GPT-Realtime-2.1 语音的接口元数据使用 audio-realtime (GET /v1/realtime?model={model}),与独立转写的 audio-stt-realtime (GET /v1/realtime?intent=transcription&model={model})不同。

对话与流式输出

下面的示例用 gpt-5.6-sol。如果你的 模型列表 里没有它,换成列表里任一 supported_endpoint_types 含 openai 的 id。

curl https://api.origingame.ai/v1/chat/completions \
  -H "Authorization: Bearer $OG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-sol","messages":[{"role":"user","content":"用一句话介绍你自己"}]}'

流式输出加 "stream": true,响应是 SSE:

curl -N https://api.origingame.ai/v1/chat/completions \
  -H "Authorization: Bearer $OG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-sol","stream":true,"messages":[{"role":"user","content":"写一首关于像素的短诗"}]}'
import OpenAI from 'openai'

const client = new OpenAI({
  baseURL: 'https://api.origingame.ai/v1',
  apiKey: process.env.OG_API_KEY,
})

const stream = await client.chat.completions.create({
  model: 'gpt-5.6-sol',
  messages: [{ role: 'user', content: '写一首关于像素的短诗' }],
  stream: true,
})
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? '')
}
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.origingame.ai/v1", api_key=os.environ["OG_API_KEY"])

stream = client.chat.completions.create(
    model="gpt-5.6-sol",
    messages=[{"role": "user", "content": "写一首关于像素的短诗"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

接口一览

所有路径都在 https://api.origingame.ai 下,认证方式见 基础地址与认证。请求和响应格式与对应厂商的原生接口一致;每个模型的具体请求示例在 模型目录 的模型页。

文本

方法路径说明
POST/v1/chat/completionsOpenAI Chat Completions,支持 stream
POST/v1/responsesOpenAI Responses(仅 HTTP)
POST/v1/messagesAnthropic Messages
POST/v1/messages/count_tokens计算输入 token,不生成、不计费
POST/v1/embeddings向量
POST/v1beta/models/{model}:generateContentGemini,:streamGenerateContent 为流式
GET/v1/models模型列表

图像

方法路径说明
POST/v1/images/generations文生图
POST/v1/images/edits图像编辑

语音与音频

方法路径说明
POST/v1/audio/speech文字转语音(OpenAI 格式);Gemini TTS 模型走下面的任务流程,可能返回 202 和任务信息
POST/v1/audio/speech/tasksGemini TTS 异步任务,必须带 Idempotency-Key(1–128 个可见 ASCII 字符)
GET/v1/audio/speech/tasks/{id}查询语音任务
GET/v1/audio/speech/tasks/{id}/content下载生成的音频(仅任务所有者)
GET/v1/audio/voices?model=...可用的预置音色
POST/v1/audio/transcriptions录音转文字,multipart 上传 file(如 model=gpt-transcribe,最大 25 MiB)
GET/v1/realtime?model=gpt-realtime-2.1原生 GA 实时语音 WebSocket(wss://);整场会话预冻结预算,按终态上游 usage 结算(见下文)
POST/v1/realtime/client_secrets可重复使用的 Gateway ogrt_ 客户端凭证,不是上游密钥
POST/v1/realtime/callsWebRTC:multipart sdp/session,或使用凭证默认会话配置的 application/sdp;返回本地、有归属的通话 Location
GET/v1/realtime?call_id=...通话 sideband WebSocket
POST/v1/realtime/calls/{id}/{action}SIP accept、reject、refer、hangup;签名 webhook 准入后使用原始上游 call id
POST/v1/realtime/webhooks/{binding}校验签名的上游 SIP 收件端点,不是客户端凭证认证的创建通话接口
GET/v1/realtime?intent=transcription&model=gpt-live-transcribe实时转写 WebSocket(wss://),PCM16 单声道 24 kHz,每段最长 60 秒
POST/elevenlabs/v1/text-to-speech/{voice_id}ElevenLabs 原生接口,另有 /stream、/with-timestamps
POST/elevenlabs/v1/text-to-dialogue、/elevenlabs/v1/speech-to-text、/elevenlabs/v1/speech-to-speech/{voice_id}ElevenLabs 对话、转写、变声
POST/elevenlabs/v1/sound-generation、/elevenlabs/v1/music、/elevenlabs/v1/audio-isolation、/elevenlabs/v1/forced-alignmentElevenLabs 音效、音乐、人声分离、对齐
GET/elevenlabs/v1/voices、/elevenlabs/v1/modelsElevenLabs 音色与模型
POST/v1/sound-generation、/v1/music、/v1/music/stream、/v1/audio-isolation、/v1/audio-isolation/stream、/v1/forced-alignment、/v1/speech-to-speech/{voice_id}上面 ElevenLabs 接口的免前缀别名

实时转写的 WebSocket 需要在握手时带 Authorization 请求头,浏览器无法设置,只能从服务端连接。

原生 GPT-Realtime-2.1

这里描述当前工作区的实现,不代表已部署到生产或已完成全部验证。GA 原生协议透传事件, 包括并发与带外(out-of-band)响应、VAD、工具、图像、音频编解码及打断。 会话最长 60 分钟;序列化 WebSocket 消息的 32 MiB 上限是 Gateway 限制, 不是上游通用上限。未实现旧 beta 会话接口。上面的严格 intent=transcription GPT-Live 路径保持独立,不等同于原生语音及其输入 ASR。

客户端凭证有效期为 10–7200 秒,可重复使用,每次使用重新校验父凭证,不返回上游密钥。 SIP 由管理员配置 root 运行时秘密 realtime.sip_bindings 数组,字段为 route、project_id、channel_id、user_id、webhook_secret。 租户归属由签名收件绑定确定,绝不从电话请求头推断。用户通过单独注册的项目 webhook 接收原始 OpenAI 事件。真实 SIP 接听仍需已配置的项目 webhook、trunk 和测试电话; 这些条件目前尚不具备,也尚未验证。

可选请求头 X-Origin-Realtime-Budget 以美元指定整场会话的预冻结预算上限 (gpt-realtime-2.1 的保守默认值为 $6.144)。会话价格快照固定, 响应和输入 ASR 的权威终态 usage 分开记账,用户结算不超过预冻结上限。 超额、未定价及未观测到的用量由平台承担。失去用量观测或预算保护时会请求终止, 不保证瞬间停止。客户端断开后短暂等待取消产生的 usage;所有关闭都保守标记为 观测不完整,不虚构用量。

视频

方法路径说明
POST/v1/videos创建视频任务
GET/v1/videos/{id}查询任务
GET/v1/videos/{id}/content下载完成的视频

3D

方法路径说明
POST/v1/3d/tasksHunyuan3D 任务;Idempotency-Key 可选(最长 256 字节)
GET/v1/3d/tasks/{id}、/v1/3d/tasks/{id}/content查询任务、下载 GLB
POST/v1/tripo/tasksTripo 任务(生成、贴图、重拓扑、绑骨、动画、转换);必须带 Idempotency-Key(最长 256 字节)
GET/v1/tripo/tasks/{id}、/v1/tripo/tasks/{id}/content查询任务、下载结果
POST/meshy/openapi/v2/text-to-3dMeshy 文生 3D
POST/meshy/openapi/v1/{resource}Meshy 其他任务:image-to-3d、multi-image-to-3d、remesh、convert、resize、retexture、rigging、animations、uv-unwrap、text-to-motion
GET/meshy/openapi/{版本}/{resource}/{id}Meshy 原生任务查询,/stream 为流式进度
GET/meshy/openapi/v1/animations/libraryMeshy 动作库(不计费)
GET/meshy/tasks/{id}、/meshy/tasks/{id}/content平台保存的 Meshy 任务状态与主结果
GET/meshy/tasks/{id}/artifacts、/meshy/tasks/{id}/artifacts/{name}/content列出并下载任务的全部产物

判定与分类

方法路径说明
POST/v1/decisionsOpenAI Decisions,模型 gpt-6-luna-decisions;只按输入 token 计费
POST/v1/systemoneTypeSafe 分类(jev-* 模型)

媒体文件

方法路径说明
POST/v1/media/uploads、/v1/media/upload-authorizations、/v1/media/{id}/complete上传输入文件
GET, DELETE/v1/media/{id}读取或删除媒体元数据
GET/v1/media/{id}/{file}下载媒体内容
POST/v1/media/download-authorizations换取短时下载链接,例如 {"task_id":"...","kind":"speech"}

异步任务

视频、语音任务和 3D 都是异步的:创建请求立即返回任务对象(通常是 202,部分视频渠道为 200),然后轮询查询接口,完成后下载结果。

  1. 创建任务,保存返回的 id。需要 Idempotency-Key 的接口,为每个新任务生成一个唯一值。
  2. 每隔几秒查询 .../{id},直到 status 变成 completed 或 failed。
  3. completed 后从 result_url 或 .../{id}/content 下载结果。
curl https://api.origingame.ai/v1/tripo/tasks \
  -H "Authorization: Bearer $OG_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"model":"tripo-v3.1","operation":"text","parameters":{"prompt":"A low-poly treasure chest","texture":true,"pbr":true}}'

curl https://api.origingame.ai/v1/tripo/tasks/TASK_ID \
  -H "Authorization: Bearer $OG_API_KEY"

curl https://api.origingame.ai/v1/tripo/tasks/TASK_ID/content \
  -H "Authorization: Bearer $OG_API_KEY" -o model.bin

常见状态:queued、in_progress、completed、failed、submission_unknown。

  • 用同一个 Idempotency-Key 重发相同的请求,会拿回原来的任务,不会再创建一个;同一个 Key 配不同的参数返回 409。
  • submission_unknown 表示无法确定上游是否已接单。不要换新的 Key 重新提交,否则可能付两次费;这类任务的预扣费会保留,等平台对账处理。
  • 生成的文件按平台的保存期限存放,请及时下载到自己的存储。

错误

接口按原协议的格式返回错误。OpenAI 兼容接口和 Gemini 接口:

{"error":{"message":"...","type":"new_api_error","param":"","code":"..."}}

/v1/messages 返回 Anthropic 格式:{"type":"error","error":{"type":"...","message":"..."}}。不存在的路径返回 404,error.code 为 not_found。

状态code 示例含义与处理
400model_price_error请求无效,或该模型还没有发布价格
401Token 缺失、无效或已轮换
403insufficient_user_quota余额或套餐额度不足,见 计费
403pre_consume_token_quota_failed这把 Token 的预算用完了
403risk_blocked账号被风控限制
403Token 不允许使用该模型
409同一个 Idempotency-Key 配了不同的参数
429rate_limited超出频率或并发限制;按 Retry-After 秒数等待后重试
5xx平台或上游暂时不可用;生成类请求先查询任务状态,再决定是否重试

环境变量

平台的脚本和技能使用这两个变量,自己的代码沿用同样的名字即可:

变量值说明
OG_API_KEYog-...账号 API Token
OG_AI_GATEWAYhttps://api.origingame.aiAPI 主机,不带 /v1;默认就是这个值,只有连本地或测试环境时才需要改
export OG_API_KEY=og-...
export OG_AI_GATEWAY=https://api.origingame.ai
curl "$OG_AI_GATEWAY/v1/models" -H "Authorization: Bearer $OG_API_KEY"