📚 API 开发文档
AutoList Token - 统一 API 代理平台接口说明
Base URL: https://token.autolist.top
1️⃣ 认证说明
1.1 获取 API Key
所有 API 调用都需要认证。登录 控制台 在「账户信息」中获取 API Key。
1.2 认证方式
Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X-API-Key: tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Session 认证(用于前端页面)
- 登录后服务器自动设置 session cookie
- 前端通过
credentials: 'include'自动携带 cookie
2️⃣ 用户 API
2.1 用户注册
POST/api/auth.php?action=register
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| string | 是 | 邮箱地址 | |
| password | string | 是 | 密码(至少8位,需包含大小写字母和数字) |
curl -X POST https://token.autolist.top/api/auth.php?action=register \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"Abc12345"}'响应:注册成功自动赠送 ¥10 初始余额并发送欢迎邮件。限频:每小时每 IP 最多 5 次。
2.2 用户登录
POST/api/auth.php?action=login
参数同上。限频:每分钟每 IP 最多 10 次,每分钟每邮箱最多 5 次。
2.3 退出登录
GET/api/auth.php?action=logout
2.4 获取用户资料
GET/api/user.php?action=profile
curl https://token.autolist.top/api/user.php?action=profile \
-H "Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"2.5 查询余额
GET/api/user.php?action=balance
curl https://token.autolist.top/api/user.php?action=balance \
-H "Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
{"success":true,"balance":246.50}2.6 获取交易记录
GET/api/user.php?action=transactions
2.7 充值
POST/api/user.php?action=charge
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| amount | int | 是 | 充值金额(元),最低200,最高50000 |
| method | string | 否 | 支付方式:alipay / wxpay,留空为聚合收银台 |
| csrf_token | string | 是 | 通过 ?action=csrf 获取的安全令牌 |
2.8 重新生成 API Key
POST/api/user.php?action=regenerate-key
2.9 修改密码
POST/api/user.php?action=change-password
参数:current_password、new_password、confirm_password
2.10 更新资料
POST/api/user.php?action=update-profile
参数:company_name、license_number、invoice_title
3️⃣ 扣费 API
用于第三方应用对用户余额进行扣费、回滚和查询操作。
3.1 扣费
POST/api/consume.php?action=consume
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| user_id | string | 是 | 目标用户 ID |
| amount | number | 是 | 扣费金额(元),必须大于 0 |
| note | string | 否 | 扣费备注,默认 "API 扣款" |
| idempotent_key | string | 否 | 幂等键,防止重复扣费(强烈建议传入) |
curl -X POST https://token.autolist.top/api/consume.php?action=consume \
-H "Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"user_id": "a1000000-0000-4000-8000-000000000004",
"amount": 3.00,
"note": "SEO 优化扣费",
"idempotent_key": "550e8400-e29b-41d4-a716-446655440000"
}'响应:
{
"success": true,
"message": "扣款成功 ¥3.00",
"data": {
"consume_id": "tx_a1b2c3d4e5f6789012345678",
"user_id": "a1000000-...",
"amount": 3.00,
"balance_before": 100.00,
"balance_after": 97.00
}
}3.2 回滚
POST/api/consume.php?action=rollback
参数:consume_id(必填)。一笔扣费只能回滚一次。
3.3 查询扣费记录
POST/api/consume.php?action=query
参数:consume_id(必填)。返回扣费状态和是否已回滚。
3.4 幂等性说明
传入 idempotent_key 后,若因网络问题重试,系统检测到相同幂等键则返回首次结果,不会重复扣费:
{
"success": true,
"message": "重复请求,返回已有结果",
"data": {
"consume_id": "tx_...",
"amount": 3.00,
"balance_after": 97.00,
"idempotent": true
}
}4️⃣ 文本生成 API
完全兼容 OpenAI Chat Completions 接口格式。系统自动计算 Token 消耗并从余额扣费。
4.1 获取模型列表
GET/api/v1/models
curl https://token.autolist.top/api/v1/models \
-H "Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"返回所有可用模型及其定价信息(token_based 或 fixed 计费方式)。
4.2 聊天补全
POST/api/v1/chat/completions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型 ID(从 /api/v1/models 获取) |
| messages | array | 是 | 消息数组(OpenAI 标准格式) |
| stream | boolean | 否 | 是否流式输出 SSE |
| temperature | float | 否 | 温度参数 0-2 |
| max_tokens | integer | 否 | 最大生成 token 数 |
curl -X POST https://token.autolist.top/api/v1/chat/completions \
-H "Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash",
"messages": [{"role": "user", "content": "你好"}],
"stream": false
}'4.3 OpenAI SDK 兼容
from openai import OpenAI
client = OpenAI(
api_key="tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://token.autolist.top/api/v1",
)
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "你好"}],
)
print(response.choices[0].message.content)5️⃣ 图片生成 API
5.1 生成图片
POST/api/v1/images/generations
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 图片模型 ID |
| prompt | string | 是 | 图片描述提示词 |
| n | integer | 否 | 生成数量,默认 1 |
| size | string | 否 | 图片尺寸,如 1024x1024 |
curl -X POST https://token.autolist.top/api/v1/images/generations \
-H "Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-image-2", "prompt": "A cute orange cat", "n": 1, "size": "1024x1024"}'6️⃣ 视频生成 API
6.1 生成视频
POST/api/v1/videos/generations
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 视频模型 ID |
| prompt | string | 是 | 视频描述 |
| duration | integer | 否 | 视频时长(秒) |
curl -X POST https://token.autolist.top/api/v1/videos/generations \
-H "Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"model": "cogvideo", "prompt": "A butterfly flying over flowers", "duration": 5}'7️⃣ 兑换码 API
7.1 兑换
POST/api/redeem.php?action=redeem
参数:code(兑换码字符串)。用户兑换后余额自动增加。
7.2 管理员:生成兑换码
POST/api/redeem.php?action=generate
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| count | int | 否 | 数量,默认1,最多100 |
| amount | number | 是 | 每个兑换码面值(元) |
| expire_days | int | 否 | 过期天数,默认30 |
7.3 管理员:列出/删除
GET/api/redeem.php?action=list — 列出所有兑换码
POST/api/redeem.php?action=delete — 参数:code
8️⃣ 发票 API
8.1 查询可开票记录
GET/api/invoice.php?action=list
8.2 查询我的发票
GET/api/invoice.php?action=my
8.3 申请发票
POST/api/invoice.php?action=apply
参数:tx_ids(交易ID数组)、company_name、tax_id、invoice_type
8.4 下载发票
GET/api/invoice.php?action=download&id=INV202607140001
8.5 撤销发票
POST/api/invoice.php?action=delete
9️⃣ 错误码说明
| 状态码 | 说明 |
|---|---|
| 200 | 请求成功 |
| 400 | 请求参数缺失或格式错误 |
| 401 | API Key 无效 / 未登录 / 未提供认证信息 |
| 402 | 余额不足(大模型API返回 insufficient_balance) |
| 403 | 账户被禁用 / CSRF 验证失败 |
| 404 | 模型或资源不存在 |
| 405 | 不支持的请求方法(仅限 POST/GET) |
| 429 | 请求过于频繁,请稍后再试 |
| 502 | 上游 AI 模型服务异常 |
{"success":false,"message":"余额不足,当前余额: ¥0.50,扣款金额: ¥1.00"}
大模型API错误格式:
{"error":{"message":"余额不足","type":"insufficient_balance"}}
🔟 SDK 代码示例
Python SDK
import uuid
import requests
class TokenProxy:
def __init__(self, api_key, base_url="https://token.autolist.top"):
self.api_key = api_key
self.base_url = base_url
self.session = requests.Session()
self.session.headers.update({
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
})
def get_balance(self):
"""查询余额"""
resp = self.session.get(f"{self.base_url}/api/user.php?action=balance")
return resp.json()["balance"]
def consume(self, user_id, amount, note=""):
"""扣费"""
resp = self.session.post(
f"{self.base_url}/api/consume.php?action=consume",
json={
"user_id": user_id,
"amount": amount,
"note": note,
"idempotent_key": str(uuid.uuid4()),
},
)
return resp.json()
def chat(self, model, messages):
"""AI 聊天"""
resp = self.session.post(
f"{self.base_url}/api/v1/chat/completions",
json={"model": model, "messages": messages},
)
return resp.json()
def generate_image(self, model, prompt):
"""生成图片"""
resp = self.session.post(
f"{self.base_url}/api/v1/images/generations",
json={"model": model, "prompt": prompt},
)
return resp.json()
# 使用示例
client = TokenProxy("tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
print(f"当前余额: ¥{client.get_balance()}")
# 扣费
result = client.consume("a1000000-...-000000000004", 3.0, "SEO 优化")
print(f"扣费后余额: ¥{result['data']['balance_after']}")
# AI 聊天
resp = client.chat("deepseek-v4-flash", [{"role":"user","content":"Hello!"}])
print(resp["choices"][0]["message"]["content"])JavaScript SDK
class TokenProxy {
constructor(apiKey, baseUrl = 'https://token.autolist.top') {
this.headers = {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
};
this.baseUrl = baseUrl;
}
async getBalance() {
const res = await fetch(`${this.baseUrl}/api/user.php?action=balance`, {
headers: this.headers,
});
return (await res.json()).balance;
}
async consume(userId, amount, note) {
const res = await fetch(`${this.baseUrl}/api/consume.php?action=consume`, {
method: 'POST',
headers: this.headers,
body: JSON.stringify({
user_id: userId,
amount,
note,
idempotent_key: crypto.randomUUID(),
}),
});
return res.json();
}
async chat(model, messages) {
const res = await fetch(`${this.baseUrl}/api/v1/chat/completions`, {
method: 'POST',
headers: this.headers,
body: JSON.stringify({model, messages}),
});
return res.json();
}
}
// 使用
const client = new TokenProxy('tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
console.log(await client.getBalance());