API documentationAPI 文档Documentation de l'APIDocumentación de la API

Early access.抢先体验。Accès anticipé.Acceso anticipado. This is a preview of the API: keys are issued to approved customers within 3 business days of a request, see the wholesale page.以下是接口预览:提出申请后 3 个工作日内向通过审核的客户发放 Key,详见批发页。Ceci est un aperçu de l'API : les clés sont délivrées aux clients approuvés dans les 3 jours ouvrables suivant la demande, voir la page de gros.Esto es una vista previa de la API: las claves se entregan a los clientes aprobados en un plazo de 3 días hábiles tras la solicitud, consulta la página mayorista.

The gateway exposes two familiar protocols on one host. If your code already works with OpenAI or Anthropic, you only change the base URL, the API key and the model name. 网关在同一个域名下提供两种常见协议。如果你的代码已经能调用 OpenAI 或 Anthropic,只需更换 base URL、API Key 和模型名。La passerelle expose deux protocoles courants sur un même hôte. Si votre code fonctionne déjà avec OpenAI ou Anthropic, il vous suffit de changer l'adresse de base, la clé API et le nom du modèle.La pasarela expone dos protocolos conocidos en un mismo host. Si tu código ya funciona con OpenAI o Anthropic, solo tienes que cambiar la URL base, la clave de API y el nombre del modelo.

Quickstart快速开始Démarrage rapideInicio rápido

  1. Create an account and top up your balance in the console.注册账号,在控制台充值余额。Créez un compte et rechargez votre solde dans la console.Crea una cuenta y recarga tu saldo en la consola.
  2. Create an API key under API keys. It is shown once; store it somewhere safe.在 API 密钥 页面创建 Key。Key 只显示一次,请妥善保存。Créez une clé API sous Clés API. Elle n'est affichée qu'une fois ; conservez-la en lieu sûr.Crea una clave de API en Claves de API. Se muestra una sola vez; guárdala en un lugar seguro.
  3. Send your first request:发送第一个请求:Envoyez votre première requête :Envía tu primera solicitud:
curl {{BASE}}/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seed-2.1-lite",
    "messages": [{"role": "user", "content": "Say hello in three languages."}]
  }'

Authentication认证AuthentificationAutenticación

Send your key as a bearer token. Anthropic-style clients may use the x-api-key header instead; both work on both endpoints. 以 Bearer Token 方式传入 Key。Anthropic 风格的客户端也可使用 x-api-key 请求头;两个接口都支持两种方式。Envoyez votre clé comme jeton Bearer. Les clients de style Anthropic peuvent utiliser l'en-tête x-api-key à la place ; les deux fonctionnent sur les deux points d'accès.Envía tu clave como token Bearer. Los clientes al estilo Anthropic pueden usar en su lugar el encabezado x-api-key; ambos funcionan en los dos endpoints.

Authorization: Bearer YOUR_API_KEY
# or
x-api-key: YOUR_API_KEY

Keep keys on your server. Anyone who has a key can spend your balance. If one leaks, revoke it in the console and create a new one.请将 Key 保存在服务端。任何持有 Key 的人都能消耗你的余额。如果泄露,请在控制台吊销并重新创建。Gardez vos clés sur votre serveur. Quiconque possède une clé peut dépenser votre solde. En cas de fuite, révoquez-la dans la console et créez-en une nouvelle.Guarda las claves en tu servidor. Quien tenga una clave puede gastar tu saldo. Si se filtra una, revócala en la consola y crea una nueva.

POST /v1/chat/completions

OpenAI Chat Completions format. All request fields (messages, temperature, tools, response_format, stream, …) are forwarded to the model provider unchanged, so anything the provider supports works here too. OpenAI Chat Completions 格式。所有请求字段(messages、temperature、tools、response_format、stream 等)都会原样转发给模型厂商,厂商支持的功能这里都能用。Format OpenAI Chat Completions. Tous les champs de la requête (messages, temperature, tools, response_format, stream, …) sont transmis tels quels au fournisseur du modèle : tout ce que le fournisseur prend en charge fonctionne donc ici aussi.Formato OpenAI Chat Completions. Todos los campos de la solicitud (messages, temperature, tools, response_format, stream, …) se reenvían sin cambios al proveedor del modelo, así que todo lo que el proveedor admita funciona también aquí.

Python

from openai import OpenAI

client = OpenAI(base_url="{{BASE}}/v1", api_key="YOUR_API_KEY")

resp = client.chat.completions.create(
    model="doubao-seed-2.1-pro",
    messages=[{"role": "user", "content": "Explain CRDTs in two sentences."}],
)
print(resp.choices[0].message.content)
print(resp.usage)

Streaming

stream = client.chat.completions.create(
    model="doubao-seed-2.1-pro",
    messages=[{"role": "user", "content": "Write a haiku about caching."}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

Streaming responses are forwarded as server-sent events. The gateway always asks the provider to include token usage in the final chunk, so billing is exact. 流式响应以 SSE 转发。网关会自动要求上游在最后一个数据块中返回 token 用量,因此计费是精确的。Les réponses en streaming sont transmises sous forme d'événements envoyés par le serveur (SSE). La passerelle demande toujours au fournisseur d'inclure la consommation de tokens dans le dernier fragment, la facturation est donc exacte.Las respuestas en streaming se reenvían como eventos enviados por el servidor (SSE). La pasarela siempre pide al proveedor que incluya el uso de tokens en el último fragmento, así que la facturación es exacta.

Node.js

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "{{BASE}}/v1", apiKey: process.env.API_KEY });
const resp = await client.chat.completions.create({
  model: "doubao-seed-2.1-lite",
  messages: [{ role: "user", content: "Hi" }],
});
console.log(resp.choices[0].message.content);

POST /v1/messages

Anthropic Messages format, served from the providers' Anthropic-compatible endpoints. Use it with the Anthropic SDK or any tool built for it. Anthropic Messages 格式,由厂商提供的 Anthropic 兼容接口转发。可配合 Anthropic SDK 或基于它的工具使用。Format Anthropic Messages, servi par les points d'accès compatibles Anthropic des fournisseurs. Utilisez-le avec le SDK Anthropic ou tout outil conçu pour lui.Formato Anthropic Messages, servido desde los endpoints compatibles con Anthropic de los proveedores. Úsalo con el SDK de Anthropic o con cualquier herramienta creada para él.

import anthropic

client = anthropic.Anthropic(base_url="{{BASE}}", api_key="YOUR_API_KEY")

msg = client.messages.create(
    model="doubao-seed-2.1-pro",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello!"}],
)
print(msg.content[0].text)

Note that the Anthropic SDK appends /v1/messages itself, so the base URL has no /v1 suffix here, whereas the OpenAI SDK needs /v1. 注意:Anthropic SDK 会自行追加 /v1/messages,所以这里的 base URL 不带 /v1;而 OpenAI SDK 的 base URL 需要带 /v1。Notez que le SDK Anthropic ajoute lui-même /v1/messages : l'adresse de base n'a donc pas de suffixe /v1 ici, alors que le SDK OpenAI a besoin de /v1.Ten en cuenta que el SDK de Anthropic añade /v1/messages por sí mismo, así que la URL base no lleva el sufijo /v1 aquí, mientras que el SDK de OpenAI sí necesita /v1.

POST /v1/images/generations

Image generation (Seedream), in the same format as Volcengine's own API. Send a prompt, and optionally reference images to edit or combine. The answer lists image URLs, valid for 24 hours, so download them; or ask for response_format: "b64_json" to get the images inline.图片生成(Seedream),请求格式与火山引擎官方接口一致。传入提示词,也可以传入参考图做编辑或合成。返回结果是图片链接,24 小时内有效,请及时下载;也可以设置 response_format: "b64_json" 直接拿到图片数据。Génération d'images (Seedream), au même format que l'API de Volcengine. Envoyez un prompt et, au besoin, des images de référence à modifier ou à combiner. La réponse contient des URL d'images valables 24 heures : téléchargez-les ; ou demandez response_format: "b64_json" pour recevoir les images directement.Generación de imágenes (Seedream), con el mismo formato que la API de Volcengine. Envía un prompt y, si quieres, imágenes de referencia para editar o combinar. La respuesta incluye URLs de imágenes válidas durante 24 horas, así que descárgalas; o pide response_format: "b64_json" para recibir las imágenes directamente.

import requests

resp = requests.post(
    "{{BASE}}/v1/images/generations",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
        "model": "doubao-seedream-5.0-pro",
        "prompt": "A cat in a spacesuit, studio light",
        "size": "2K",
        "watermark": False,
    },
    timeout=300,
)
print(resp.json()["data"][0]["url"])

Video generation视频生成Génération de vidéoGeneración de video

Video generation (Seedance) takes a while, so it works in three steps: start a task, check on it, download the result. The paths are the same as Volcengine's own API.视频生成(Seedance)需要一段时间,所以分三步:创建任务、查询任务、下载结果。接口路径与火山引擎官方一致。La génération de vidéo (Seedance) prend du temps ; elle se fait donc en trois étapes : créer une tâche, la consulter, télécharger le résultat. Les chemins sont les mêmes que ceux de l'API de Volcengine.La generación de video (Seedance) tarda un rato, así que se hace en tres pasos: crear una tarea, consultarla y descargar el resultado. Las rutas son las mismas que las de la API de Volcengine.

import time, requests

BASE, HEADERS = "{{BASE}}/v1", {"Authorization": "Bearer YOUR_API_KEY"}

# 1. start the task
task = requests.post(f"{BASE}/contents/generations/tasks", headers=HEADERS, json={
    "model": "doubao-seedance-2.0",
    "content": [{"type": "text", "text": "A cat on a skateboard, cinematic"}],
    "resolution": "720p",
    "duration": 5,
}).json()

# 2. check until it is done (usually a minute or two)
while True:
    info = requests.get(f"{BASE}/contents/generations/tasks/{task['id']}", headers=HEADERS).json()
    if info["status"] in ("succeeded", "failed", "cancelled", "expired"):
        break
    time.sleep(10)

# 3. download the video (the link works for 24 hours)
if info["status"] == "succeeded":
    print(info["content"]["video_url"])

Using Volcengine's own SDK? Set its base URL to {{BASE}}/api/v3: chat, images and video tasks all work there, with the same paths as at Volcengine.在用火山引擎官方 SDK?把它的 base URL 设成 {{BASE}}/api/v3,对话、图片和视频任务的路径都与火山引擎官方一致,直接可用。Vous utilisez le SDK de Volcengine ? Définissez son adresse de base sur {{BASE}}/api/v3 : la conversation, les images et les tâches vidéo y fonctionnent avec les mêmes chemins que chez Volcengine.¿Usas el SDK de Volcengine? Pon su URL base en {{BASE}}/api/v3: el chat, las imágenes y las tareas de video funcionan ahí con las mismas rutas que en Volcengine.

Claude Code & IDE toolsClaude Code 与 IDE 工具Claude Code & outils d'IDEClaude Code & herramientas de IDE

Tools that accept a custom Anthropic or OpenAI endpoint can use the gateway. For Claude Code, set these environment variables: 支持自定义 Anthropic 或 OpenAI 接口地址的工具都可以接入。Claude Code 请设置以下环境变量:Les outils qui acceptent un point d'accès Anthropic ou OpenAI personnalisé peuvent utiliser la passerelle. Pour Claude Code, définissez ces variables d'environnement :Las herramientas que aceptan un endpoint personalizado de Anthropic u OpenAI pueden usar la pasarela. Para Claude Code, define estas variables de entorno:

export ANTHROPIC_BASE_URL="{{BASE}}"
export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY"
export ANTHROPIC_MODEL="doubao-seed-2.1-pro"
export ANTHROPIC_SMALL_FAST_MODEL="doubao-seed-2.1-lite"
claude

For OpenAI-style tools (Cursor, Cline, Continue, Open WebUI, …) choose "OpenAI-compatible" or "custom provider", then enter {{BASE}}/v1 as the base URL, your key, and a model ID from the table below. 对于 OpenAI 风格的工具(Cursor、Cline、Continue、Open WebUI 等),选择“OpenAI 兼容”或“自定义提供商”,填入 {{BASE}}/v1 作为 base URL,再填你的 Key 和下表中的模型 ID。Pour les outils de style OpenAI (Cursor, Cline, Continue, Open WebUI, …), choisissez « compatible OpenAI » ou « fournisseur personnalisé », puis saisissez {{BASE}}/v1 comme adresse de base, votre clé et un identifiant de modèle du tableau ci-dessous.Para herramientas al estilo OpenAI (Cursor, Cline, Continue, Open WebUI, …) elige «compatible con OpenAI» o «proveedor personalizado» y escribe {{BASE}}/v1 como URL base, tu clave y un ID de modelo de la tabla de abajo.

Models模型ModèlesModelos

Use the Model ID as the model parameter. GET /v1/models returns the current list. Prices are USD per 1M tokens. 将 模型 ID 作为 model 参数。GET /v1/models 返回当前列表。价格单位为美元 / 每百万 token。Utilisez l'ID du modèle comme paramètre model. GET /v1/models renvoie la liste actuelle. Les prix sont en USD par million de tokens.Usa el ID del modelo como parámetro model. GET /v1/models devuelve la lista actual. Los precios son en USD por millón de tokens.

Model IDContext上下文ContexteContextoInput输入EntréeEntradaCached缓存CacheCachéOutput输出SortieSalida
…

GET /v1/models lists chat models; add ?type=all to include image and video models.GET /v1/models 默认只列出对话模型;加上 ?type=all 可包含图片和视频模型。GET /v1/models liste les modèles de chat ; ajoutez ?type=all pour inclure les modèles d'image et de vidéo.GET /v1/models lista los modelos de chat; añade ?type=all para incluir los de imagen y video.

Billing计费FacturationFacturación

Errors & limits错误与限制Erreurs & limitesErrores & límites

Errors use the shape of the protocol you called: {"error": {"message", "type", "code"}} on /v1/chat/completions and {"type": "error", "error": {…}} on /v1/messages. 错误响应沿用你所调用协议的格式:/v1/chat/completions 为 {"error": {"message", "type", "code"}},/v1/messages 为 {"type": "error", "error": {…}}。Les erreurs suivent le format du protocole appelé : {"error": {"message", "type", "code"}} sur /v1/chat/completions et {"type": "error", "error": {…}} sur /v1/messages.Los errores usan el formato del protocolo que llamaste: {"error": {"message", "type", "code"}} en /v1/chat/completions y {"type": "error", "error": {…}} en /v1/messages.

HTTPMeaning含义SignificationSignificado
400Invalid request (malformed JSON, or the provider rejected a parameter).请求无效(JSON 格式错误,或上游拒绝了某个参数)。Requête invalide (JSON mal formé, ou paramètre refusé par le fournisseur).Solicitud no válida (JSON mal formado o parámetro rechazado por el proveedor).
401Missing or invalid API key.缺少或无效的 API Key。Clé API manquante ou invalide.Clave de API ausente o no válida.
402Balance is empty. Top up in the console.余额不足,请在控制台充值。Solde épuisé. Rechargez dans la console.Saldo agotado. Recarga en la consola.
402Video only: the balance cannot cover the held estimate of the video. The message says how much is needed.仅视频:余额不足以预留这条视频的预估费用,错误信息中会说明需要多少。Vidéo uniquement : le solde ne couvre pas l'estimation réservée pour la vidéo. Le message indique le montant nécessaire.Solo video: el saldo no cubre la estimación reservada para el video. El mensaje indica cuánto hace falta.
403Account disabled.账号已被停用。Compte désactivé.Cuenta desactivada.
404Unknown model ID. The message lists valid IDs.未知的模型 ID,错误信息中会列出有效 ID。ID de modèle inconnu. Le message liste les ID valides.ID de modelo desconocido. El mensaje enumera los ID válidos.
429Rate limit reached: 120 requests per minute per key by default, or the provider is rate-limiting. Retry with backoff.触发速率限制:默认每个 Key 每分钟 120 次,或上游正在限流。请退避重试。Limite de débit atteinte : 120 requêtes par minute et par clé par défaut, ou le fournisseur limite le débit. Réessayez avec un délai croissant.Límite de frecuencia alcanzado: 120 solicitudes por minuto por clave por defecto, o el proveedor está limitando. Reintenta con espera creciente.
429Video only: you already have 3 unfinished video tasks. Wait for one to finish or cancel it.仅视频:你已经有 3 个未完成的视频任务,请等其中一个完成或取消它。Vidéo uniquement : vous avez déjà 3 tâches vidéo non terminées. Attendez qu'une se termine ou annulez-la.Solo video: ya tienes 3 tareas de video sin terminar. Espera a que termine una o cancélala.
502 / 503The upstream provider is unreachable or temporarily unavailable. Safe to retry; nothing is charged.上游不可达或暂时不可用。可安全重试,不会扣费。Le fournisseur en amont est injoignable ou temporairement indisponible. Vous pouvez réessayer sans risque ; rien n'est facturé.El proveedor de origen no está accesible o no está disponible temporalmente. Puedes reintentar sin problema; no se cobra nada.

Every response carries an x-relay-request-id header. Quote it if you contact support.每个响应都带有 x-relay-request-id 头,联系客服时请附上。Chaque réponse contient un en-tête x-relay-request-id. Indiquez-le si vous contactez l'assistance.Cada respuesta incluye un encabezado x-relay-request-id. Indícalo si contactas con soporte.