Skip to content

jackjin011/tenbin-api-proxy

Repository files navigation

Tenbin API Proxy

将 tenbin.ai (天秤AI by GMO) 的 Web API 转换为标准 Anthropic Messages API 格式的代理服务器,并附带账号池、API Key 管理、二级中转商(reseller)、在线支付与代理池等运营功能。

一句话:Tenbin web2api / Claude 逆向代理——把 tenbin.ai 网页版能力封装成 Anthropic 兼容接口,支持 Claude Opus 4.8 / 4.7 / 4.6 / 4.5、Claude Sonnet 4.6 / 4.5、Claude Haiku 4.5,可直接接入 Claude Code、Cursor、Cline 等客户端。

关键词 / Keywords:Tenbin、天秤AI、web2api、web2api 代理、Claude Opus 4.8、Claude Sonnet 4.6、Claude Haiku 4.5、Anthropic Messages API、Anthropic API 代理、Claude API proxy、Claude 逆向 / reverse proxy、Claude Code、Cursor、Cline、Turnstile、Capsolver、Redis、Docker 部署。

工作原理

Client (Anthropic API format)
  │
  ▼
┌──────────────────────┐
│  tenbin-api-proxy    │
│  localhost:8282      │
├──────────────────────┤
│ 1. Solve Turnstile   │  ← Capsolver / Manual
│ 2. Issue exec token  │  ← GraphQL
│ 3. Start conversation│  ← GraphQL mutation
│ 4. Poll for response │  ← GraphQL query (polling)
│ 5. Format response   │  → Anthropic API format
└──────────────────────┘
  │
  ▼
tenbin.ai GraphQL API

数据层为 Redis 优先lib/db.js / lib/redis-client.js):配置了 Redis 时所有账号、API Key、订单等持久化在 Redis;未配置 Redis 时首次启动会自动从本地 db.json 迁移并回退到本地文件。账号池与 API Key 不再写在 config.json 里,而是在 dashboard 管理。

快速开始

1. 安装依赖

cd tenbin-api-proxy
npm install

生产部署建议走 Docker(node:20-slim,glibc 2.36)。cycletls 依赖 glibc 2.32+,CentOS 7/8、RHEL 8 等老系统裸跑会报 GLIBC_2.34 not found。详见 deploy/部署指南.md

2. 配置 config.json

复制模板 config.example.jsonconfig.json 并填入真实密钥(config.json 已在 .gitignore,不会上传):

{
  "port": 8282,
  "turnstile": {
    "siteKey": "0x4AAAAAABGR2exxRproizri",
    "websiteUrl": "https://tenbin.ai",
    "solver": "capsolver",                      // "capsolver" 或 "manual"
    "capsolverKey": "CAP-xxx...",               // Capsolver API Key
    "manualToken": ""                           // solver=manual 时填入
  },
  "polling": {
    "interval": 500,                            // 轮询间隔 (ms)
    "timeout": 300000                           // 超时时间 (ms)
  },
  "defaultModel": "AnthropicClaude46Opus",
  "proxy": {                                    // 代理池,全部留空表示未配置,需在 dashboard 配置
    "enabled": false,
    "apiUrl": "",
    "apiKey": "",
    "defaultTime": null,
    "defaultCount": null,
    "maxAccountsPerIp": null
  }
}

账号(sessionId)与对外 API Key 在启动后通过 dashboard 添加,不写进 config.json。

3. 获取 sessionId

  1. 浏览器登录 https://biz.tenbin.ai
  2. F12 → Application → Cookies → sessionId
  3. 在 dashboard 的账号池里粘贴该 sessionId(或用账号登录功能自动获取)

4. 启动

npm start          # node index.js
# 或开发模式:npm run dev   (node --watch)

启动后:

API 用法

POST /v1/messages

完全兼容 Anthropic Messages API 格式(同时提供别名 POST /messages):

curl http://localhost:8282/v1/messages \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -d '{
    "model": "claude-opus-4-8",
    "max_tokens": 4096,
    "messages": [
      {"role": "user", "content": "你好,请介绍一下自己"}
    ]
  }'

不传 model 时使用默认模型 claude-sonnet-4-6;传入不受支持的模型会返回 400 invalid_request_error,并附上受支持模型列表。

流式响应

curl http://localhost:8282/v1/messages \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -d '{
    "model": "claude-opus-4-8",
    "max_tokens": 4096,
    "stream": true,
    "messages": [
      {"role": "user", "content": "写一首诗"}
    ]
  }'

带 System Prompt

curl http://localhost:8282/v1/messages \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 4096,
    "system": "你是一个专业的翻译助手",
    "messages": [
      {"role": "user", "content": "翻译:Hello World"}
    ]
  }'

多轮对话

curl http://localhost:8282/v1/messages \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -d '{
    "model": "claude-opus-4-8",
    "max_tokens": 4096,
    "messages": [
      {"role": "user", "content": "1+1等于多少?"},
      {"role": "assistant", "content": "1+1等于2。"},
      {"role": "user", "content": "那再加3呢?"}
    ]
  }'

认证方式

对外通过 dashboard 创建的 API Key(sk- 前缀) 鉴权,支持两种 header(任选其一):

# 1. Authorization: Bearer
curl -H "Authorization: Bearer sk-xxxxxxxx" ...

# 2. x-api-key
curl -H "x-api-key: sk-xxxxxxxx" ...

每个 API Key 可在 dashboard 设置:绑定账号、有效期、启用/禁用、并发上限、每日 Capsolver 上限等。 若系统中尚未创建任何 API Key,则鉴权中间件会跳过校验(向下兼容,便于本地自用)。

GET /v1/models

获取受支持的模型列表(只暴露 iddisplay_name):

curl http://localhost:8282/v1/models

GET /v1/credits

查询当前账号池的积分余额。

GET /health

健康检查:

curl http://localhost:8282/health

支持的模型

经 Tenbin GraphQL 验证、当前实际支持的模型(见 lib/models.js)。对外使用语义化短名,不接受带日期的旧式 id;Claude 3.x / 3.5 / 3.7 已不支持(Tenbin 会返回 "Old model using" 错误),因此不再映射。

对外 id(短名) 显示名 Tenbin 内部名
claude-opus-4-8 Claude Opus 4.8 AnthropicClaude48Opus
claude-opus-4-7 Claude Opus 4.7 AnthropicClaude47Opus
claude-opus-4-6 Claude Opus 4.6 AnthropicClaude46Opus
claude-opus-4-5 Claude Opus 4.5 AnthropicClaude45Opus
claude-sonnet-4-6 Claude Sonnet 4.6 AnthropicClaude46Sonnet
claude-sonnet-4-5 Claude Sonnet 4.5 AnthropicClaude45Sonnet
claude-haiku-4-5 Claude Haiku 4.5 AnthropicClaude45Haiku
  • 默认模型(不传 model 时):claude-sonnet-4-6
  • 也接受形如 claude-4-8-opus 的别名;同样接受直接传 Tenbin 内部名(如 AnthropicClaude48Opus)。
  • 响应里的 model 字段始终回写为对外短名,不会泄露 Tenbin 内部代号。

运营功能(dashboard)

管理后台 /dashboard 提供整套运营能力:

  • 账号池管理:添加 / 批量补号(bulk-login)/ 健康探测 sessionId 是否仍可用。
  • API Key 管理:签发 sk- Key、绑定账号、有效期 / 并发 / 每日 Capsolver 上限、用量统计。
  • 二级中转商 reseller:管理员创建 reseller,reseller 用自己的 loginKey 登录,仅可见自己的 API Keys 与设置(含各自的 capsolverKey)。详见 lib/reseller-manager.js
  • 代理 / 经办人(agent)标签与分润:给每个 Key 打上经办人标签,聚合统计 Key 数 / Capsolver 消耗 / token 总量,并支持优惠码与分润。详见 lib/agent-manager.jslib/payment-manager.js
  • 在线支付:EasyPay 聚合支付(支付宝 / 微信)与 epusdt(USDT)收款,回调后自动签发并绑定 API Key。用户购买页为 /user。详见 lib/payment-manager.js
  • 代理池:支持山辰代理(lib/shanchendaili.js)与手动代理录入,可按 IP 维度限制每 IP 账号数。

在第三方工具中使用

Cursor / Continue / Cline

将 Base URL 设为 http://localhost:8282,API Key 填 dashboard 签发的 sk- Key。

Python SDK

import anthropic

client = anthropic.Anthropic(
    base_url="http://localhost:8282",
    api_key="sk-xxxxxxxx"
)

message = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello!"}]
)
print(message.content[0].text)

注意事项

  • 每次请求需要解决 Turnstile 验证,Capsolver 约需 5–15 秒。
  • sessionId 有效期有限,过期后需要在 dashboard 重新获取 / 补号。
  • 多轮对话通过 context 注入实现,非原生多轮。
  • 建议配置多个账号实现负载均衡,并按需配置代理池。
  • 生产环境推荐 Docker 部署 + Redis 持久化,详见 deploy/部署指南.md

交流与支持

  • QQ 群:1078971512

如果这个项目对你有帮助,欢迎请作者喝杯咖啡 ☕

支付宝 微信支付
支付宝打赏 微信打赏

About

Tenbin(天秤AI)→ Anthropic Messages API 代理 / web2api,支持 Claude Opus 4.8/4.7/4.6、Sonnet 4.6、Haiku 4.5,含账号池 / API Key / 在线支付 / dashboard

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors