工具接入

把 Anthropic SDK 指向 apitoken.sale

每个官方 Anthropic SDK 都支持自定义 Base URL,所以迁移到 apitoken.sale 只是改一个参数的事。你的模型 ID、消息代码和流式逻辑完全不变——变的只有端点和每 token 的价格。

·

一个参数,切换端点

两个官方 Anthropic SDK——Python 和 TypeScript——都允许在构造客户端时覆盖 API 根地址。把它设为 https://router.apitoken.sale,代码里已有的每个请求就会由 apitoken.sale 的网关接管,而不再发往 api.anthropic.com。代码库中其他一切都不用动:同一个 anthropic 包、同一个 Messages API、同样的模型 ID(如 claude-opus-4-8)、同样的响应对象。

变化的是计费。每次调用按 Anthropic 官方 token 费率计量,再减去固定 50% 折扣,净额从你的预付余额中扣除——余额按整数美元金额充值。没有订阅、没有按席位收费,闲置的日子一分钱不花。

另见: Claude API 快速上手:完成配置并发出第一次调用

Python:客户端上的 base_url

from anthropic import Anthropic

client = Anthropic(
    base_url="https://router.apitoken.sale",
    api_key="sk-pool-•••",
)
msg = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)

异步客户端接受完全相同的关键字参数:AsyncAnthropic(base_url=..., api_key=...)。通过 client.messages.stream 的流式输出、工具调用、系统提示词和提示词缓存都走同一条连接——没有需要单独配置的端点。

传裸根地址,不要带路径。SDK 会自己补上 /v1/messages,所以 base_url=".../v1" 会产生指向 /v1/v1/messages 的请求并返回 404。TypeScript SDK 同样遵循这条规则。

TypeScript:客户端上的 baseURL

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://router.apitoken.sale",
  apiKey: "sk-pool-•••",
});
const msg = await client.messages.create({
  model: "claude-opus-4-8",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});

@anthropic-ai/sdk 包会自动替你发送 x-api-key 和 anthropic-version 请求头,与访问官方端点时完全一样。重试、超时和错误类(APIError、RateLimitError 等)的行为完全一致,现有的错误处理逻辑照常工作。

共享代码优先用环境变量

当构造函数参数缺省时,两个 SDK 都会从环境变量读取 ANTHROPIC_BASE_URL 和 ANTHROPIC_API_KEY。这让切换端点变成部署层面的细节,而不是代码改动——当同一个仓库在开发和生产环境要打不同端点时尤其有用。

export ANTHROPIC_BASE_URL=https://router.apitoken.sale
export ANTHROPIC_API_KEY=sk-pool-•••

# your code now constructs Anthropic() with no arguments

基于 SDK 构建的工具会继承同一组环境变量。比如 Claude Code 直接读取 ANTHROPIC_BASE_URL 和 ANTHROPIC_API_KEY;LangChain、LiteLLM 这类框架也会把同样的环境传递给底层的 Anthropic 客户端。两者同时设置时,显式的构造函数参数优先于环境变量,所以脚本里的一次性覆盖不会泄漏进你的部署配置。

原样穿过网关的能力

  • 完整的 Messages API 接口:POST /v1/messages,请求和响应 JSON 完全一致。
  • SSE 流式输出——增量分块的表现与 api.anthropic.com 一模一样。
  • 工具调用与函数调用,包括多轮 tool_result 循环。
  • 系统提示词、视觉输入,以及带 cache_control 断点的提示词缓存。
  • 每个响应都带 usage 对象,你的 token 与成本统计代码照常工作。
  • 模型 ID:claude-opus-4-8、claude-sonnet-5、claude-haiku-4-5 以及支持目录中的其余模型。

一个密钥覆盖所有支持的模型——Claude 与 GPT、Gemini、Kimi 并列——多供应商项目只需一份凭证、一份余额。每次调用后,控制台会显示该请求的消费和已应用的折扣。

支持的模型 ID 与各模型定价

在成本计算器中估算月度开销

首次请求检查清单与常见错误

  1. 01注册免费账户,打开控制台并生成密钥——它形如 sk-pool-…,可用于支持的 Claude、GPT、Gemini 和 Kimi 模型。
  2. 02在代码中把 base_url / baseURL 设为 https://router.apitoken.sale,或导出 ANTHROPIC_BASE_URL 和 ANTHROPIC_API_KEY。
  3. 03运行一次上面的 Python 或 TypeScript 示例,确认你能收到正常的 Anthropic 消息响应。
  4. 04打开控制台,确认该请求连同它的 token 用量、费用和折扣都已显示。
状态码含义解决办法
401 Unauthorizedx-api-key 缺失或错误,或 Base URL 不对重新检查密钥,并确认 URL 是裸根地址
400 Bad Request请求体有误,或 named field 上的 documented_limitation / unsupported_parameter检查模型 ID 和 max_tokens;若 details.error_code 有值则去掉该字段
402 billing_error预付余额不足——error.type 是 billing_error,不是 429在控制台按整数美元金额充值
429 Too Many Requests并发超出当前限额遵守 Retry-After 并降低并行度

由于 SDK、线上格式和错误分类在两个端点上完全一致,切换随时可逆:把 base_url 指回 api.anthropic.com(或删掉覆盖项),同一份代码就重新直接对接 Anthropic。很多团队在迁移周会让两个客户端并存,先把一小部分流量路由到新端点,再全量切换。

旧的 https://api.apitoken.sale 主机上的既有集成继续可用。新接入建议使用统一路由器 router.apitoken.sale,因为一个 Base URL 即可服务全部四家供应商。

常见问题

我还能继续用官方 Anthropic SDK 吗?

可以。把 base_url(Python)或 baseURL(TypeScript)设为 https://router.apitoken.sale,其余一切——import、模型 ID、流式、错误处理——都保持不变。

切换 Base URL 后模型 ID 会变吗?

不会。沿用官方 API 上的模型 ID,例如 claude-opus-4-8、claude-sonnet-5 和 claude-haiku-4-5。

Base URL 要以 /v1 结尾吗?

不要。SDK 会在你传入的根地址后面自己补上 /v1/messages,末尾带 /v1 会把路径弄错。原样传入 https://router.apitoken.sale 即可。

自定义 Base URL 下,流式和工具调用能用吗?

可以。网关服务的是标准 Anthropic Messages API,所以 SSE 流式、工具调用、系统提示词和提示词缓存的表现与 api.anthropic.com 完全一致。

以后怎么切回 Anthropic?

删掉 base_url / baseURL 参数,或取消设置 ANTHROPIC_BASE_URL。SDK 会默认回到 https://api.anthropic.com——不需要其他任何代码改动。

使用 Google 或 GitHub 创建账户并获得 $5 平台欢迎奖励余额,充值前先跑通配置。