TokenAPI接入文档
接口文档

两步接入: 改 base URL,换 API Key。

TokenAPI 支持 OpenAI Chat Completions、Responses 格式和 Anthropic Messages 格式。直接使用官方 SDK,无需改动,从模型列表里选一个模型 ID 即可。

快速开始

Base URL

https://tokenapi.biz/v1

全部接口:

GET/v1/models

模型列表

公开模型 ID 及其能力、上下文长度和价格。

GET/v1/models/{id}

查询单个模型

返回单个模型对象。

POST/v1/chat/completions

Chat Completions

OpenAI Chat Completions 格式,支持流式与非流式。

POST/v1/responses

Responses

OpenAI Responses 格式(无状态),支持流式与非流式。

POST/v1/messages

Messages

Anthropic Messages 格式,供 Anthropic SDK 使用。

curl
curl https://tokenapi.biz/v1/chat/completions \
  -H "Authorization: Bearer $TOKENAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tokenapi-pro",
    "messages": [{ "role": "user", "content": "Hello!" }]
  }'
Node.js · openai
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://tokenapi.biz/v1",
  apiKey: process.env.TOKENAPI_KEY,
});

const res = await client.chat.completions.create({
  model: "tokenapi-pro",
  messages: [{ role: "user", content: "Hello!" }],
});
console.log(res.choices[0].message.content);
Python · openai
import os
from openai import OpenAI

client = OpenAI(base_url="https://tokenapi.biz/v1", api_key=os.environ["TOKENAPI_KEY"])

res = client.chat.completions.create(
    model="tokenapi-pro",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(res.choices[0].message.content)
鉴权

以 Bearer Token 方式携带 Key。

Authorization: Bearer sk-tk-…

也支持 Anthropic 风格的 x-api-key 请求头。Key 以 sk-tk- 开头,只在创建时显示一次,每个 Key 可单独设置限制(每分钟请求数、消费上限、可用模型、有效期)。请只在服务端保存 Key,切勿放进网页或移动端代码。申请 Key 请发邮件至 hello@tokenapi.biz。

模型

稳定的模型 ID

把 GET /v1/models 返回的 id 作为 model 参数传入。模型 ID 是一个稳定的产品:为保证质量和可用性,我们可能升级或切换它背后的后端,而你这边无需任何改动。响应中返回的始终是你调用的模型 ID。

GET /v1/models
{
  "object": "list",
  "data": [
    {
      "id": "tokenapi-pro",
      "object": "model",
      "owned_by": "tokenapi",
      "display_name": "TokenAPI Pro",
      "capabilities": ["streaming", "tools", "json_output"],
      "context_length": 131072,
      "pricing": {
        "currency": "USD",
        "prompt": "0.0000015",
        "completion": "0.000006",
        "input_per_million": 1.5,
        "output_per_million": 6
      }
    }
  ]
}

pricing.prompt / pricing.completion 为每 token 美元价格(字符串);input_per_million / output_per_million 为每百万 token 美元价格。

POST /v1/chat/completions

Chat Completions

请求和响应遵循 OpenAI 格式:支持含文本和图片的 messages、tools / tool_choice、response_format、temperature、top_p、stop、max_tokens 或 max_completion_tokens。每个响应都带有 x-request-id 响应头,联系售后时请提供。

不传 max_tokens 时,按该模型的最大输出长度执行。

流式输出

Server-Sent Events

设置 stream: true。数据以 data: 行逐块返回,并以 data: [DONE] 结束。加上 stream_options.include_usage 可在最后一块中拿到 token 用量。

Node.js
const stream = await client.chat.completions.create({
  model: "tokenapi-pro",
  messages: [{ role: "user", content: "Write a haiku." }],
  stream: true,
  stream_options: { include_usage: true }, // final chunk carries usage
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
POST /v1/responses

Responses API

支持字符串或数组形式的 input、instructions、函数工具、text.format(JSON Schema),以及完整的流式事件序列(response.output_text.delta、response.completed 等)。

Node.js
const res = await client.responses.create({
  model: "tokenapi-pro",
  instructions: "Answer in one sentence.",
  input: "What is a token?",
});
console.log(res.output_text);
POST /v1/messages

Anthropic Messages

适用于基于 Anthropic SDK 编写的代码。支持 system、文本和图片块、带 tool_use / tool_result 的 tools,以及流式事件。错误按 Anthropic 的错误格式返回。

Node.js · @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic({
  baseURL: "https://tokenapi.biz",   // SDK appends /v1/messages
  apiKey: process.env.TOKENAPI_KEY,
});

const msg = await anthropic.messages.create({
  model: "tokenapi-pro",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello!" }],
});
错误码

OpenAI 风格的错误对象

示例
{
  "error": {
    "message": "The model 'nope' does not exist or is disabled.",
    "type": "invalid_request_error",
    "code": "model_not_found",
    "param": null
  }
}
400invalid_request_error

JSON 格式错误、缺少 model / messages,或使用了不支持的参数。

401invalid_api_key

API Key 缺失、错误、已停用或已过期。

402insufficient_quota

余额不足以覆盖本次请求的最高费用,或已达到该 Key 的消费上限。请充值或调小 max_tokens。

403model_not_allowed

该 Key 被限制只能使用其他模型。

404model_not_found

模型 ID 不存在或已停用。可通过 GET /v1/models 查看有效 ID。

429rate_limit_exceeded

超过该 Key 每分钟请求数限制。请按 Retry-After 响应头的时间后重试。

502upstream_unavailable

该模型的所有后端路由都失败了,可以安全重试。

上游失败会先自动切换到其他路由重试,之后才会返回错误。返回 502 表示所有路由都失败了,且不会扣费。

计费与限额

预充值、按 token 计费、绝不透支。

  • 每个模型单独定价,单位为美元 / 百万输入、输出 token(见模型)。
  • 请求执行前,会从余额中冻结其最高可能费用(提示词 + max_tokens)。余额不足时返回 402,请求不会发往上游。
  • 请求结束后按实际 token 扣费,剩余冻结额度立即返还。
  • 在模型开始回答之前就失败的请求(任何 4xx/5xx 错误响应)不扣费。流式请求如中途取消或中断,只对已生成的 token 计费。
  • 速率限制按 API Key 计算,单位为每分钟请求数;超出时返回 429 并带 Retry-After 响应头。
兼容性说明

暂不支持

  • /v1/responses:previous_response_id(请改为发送完整对话)、web_search 等内置工具,以及 file_id 输入。
  • /v1/messages:扩展思考 thinking 和 cache_control 会被忽略。
  • Chat Completions 的 n > 1。
有疑问?联系我们