Account Site
导入账号 支持 CSV 上传或文本粘贴
格式:email,password,备注(每行一个,也可用 ----、Tab 或 | 分隔)
账号列表
API Key 管理 为每个使用方生成独立 Key,可改名、启停、查看统计
站点设置
账号获取请求地址
修改管理员密码 默认密码 admin123 任何人都能登录,请尽快修改
API 接口文档
🔐 认证方式:请求头 X-API-Key: {key} 或 URL 参数 ?key=。账号与 IP 池接口共用同一密钥。POST 接口均传 JSON Body。
📌 请求字段规则:client_id = 客户端标识,任意字符串、无格式限制,建议使用本机硬件指纹 / 授权机器码(每台电脑唯一,换机后需重新绑定);account_key = 账号唯一标识,使用账号邮箱(即 /api/accounts 返回的 email)。
📌 绑定与占用:绑定(bound) = 账号与 IP 的长期关联,一个 IP 可绑定多个账号,新绑定自动均衡分配到绑定数最少的 IP;占用(held) = 实时使用状态,同一时刻一个 IP 只服务一个账号,占用方每 30s 心跳续期,超过 3 分钟自动释放;被占用时 acquire 返回 code="ip_busy",客户端可等待后重试或更换账号。IP 均为 SOCKS5 代理,接口返回含 protocol="socks5" 字段。
🔄 标准调用流程(客户端)
GET /api/accounts?key=&count=N → 得到 email+password(随机选取可用账号,取走即标记已用、不可退回,请按需取用)2. 绑定:
POST /api/ip/bind {client_id, account_key} → 拿到 IP(也可跳过,acquire 会自动绑定)3. 占用:
POST /api/ip/acquire {client_id, account_key} → 占用该 IP(被占用则返回 ip_busy,等 3 分钟内自动释放或换账号)4. 使用:
socks5h://username:password@host:port 连接(协议见返回的 protocol 字段)5. 心跳:每 30s 调
POST /api/ip/heartbeat 续期(超 3 分钟无心跳自动释放占用)6. 释放:用完调
POST /api/ip/release(幂等;不调也会 3 分钟自动释放,但建议显式释放)7. 解绑(可选):账号不再使用时可调
POST /api/ip/unbind 解除该账号的 IP 绑定(幂等),该 IP 绑定数立即更新;之后该账号可重新绑定到其他 IP
🛠 故障自动换绑(代理连不上时)
处理流程:调
POST /api/ip/rebind {client_id, account_key} → 成功则返回新 IP(已自动占用,直接可用,无需再 acquire)→ 更新代理配置继续任务 → 继续每 30s 心跳。重试策略:返回
code="ip_busy"(新 IP 被他人占用)→ 等 10-30s 重试 rebind;同一账号最多重试 3 次,仍失败则放弃该账号、换下一个账号。注意:仅在真实连接失败时调用,勿频繁轮询换绑。
401(HTTP) | API Key 无效 / 缺失 / 已禁用 | 检查 Key 是否正确,或联系管理员 |
ip_busy | 目标 IP 正被其他账号占用 | 等待 ≤3 分钟自动释放,或 rebind / 换账号 |
quota_exceeded | 该 Key 账号获取额度已用完(默认每 Key 100 个) | 调 GET /api/quota 查看剩余额度,联系管理员调整额度,或使用其他 Key |
not_held | heartbeat 时该账号没有活跃占用 | 重新 acquire 后再心跳 |
| 参数缺失 | client_id / account_key 必填 | 检查请求体 |
📌 客户端必备要点:① 账号被 count=N 取走即标记已用,不可退回;② 一个账号同时只绑定一个 IP(rebind 会替换旧绑定);③ 一个 IP 可绑多个账号,但同一时刻只服务一个账号(占用互斥);④ 所有 IP 均为 SOCKS5,用返回的 protocol 字段连接;⑤ 若某 IP 在后台被检测为「不可达」(dola 检测列 ❌),客户端使用时应直接 rebind 换绑,不要死等;⑥ 账号被管理员删除/清空时,其 IP 绑定与占用会自动解除,绑定数量实时更新——客户端下次调用 acquire 会自动重新绑定新 IP,无需手动处理。
| 端点 | 说明 |
|---|---|
GET /api/accounts?key=&count=10 | 随机获取 N 个未使用账号(每次随机挑选可用账号,获取即标记已使用,count 1-100)。额度限制:每个 Key 累计最多获取 quota 个(默认 100,管理员可增),请求超出剩余额度时只发放剩余部分,响应含 quota:{limit,used,remaining};额度用尽返回 code="quota_exceeded"、msg「账号额度已用完」。已获取(used)为历史累计消耗,获取即入账、只增不减,账号之后被删除不影响已获取数量。返回格式为「邮箱+密码」,无 cookie:{"accounts":[{"email","password"}],"total","available"} |
GET /api/stats?key= | 账号统计(total/available/used) |
GET /api/quota?key= | 查询当前 Key 的账号获取额度:返回 {"success":true,"quota":{"limit":100,"used":N,"remaining":M}};used 为历史累计已获取数(只增不减,账号删除不影响),客户端可随时调用查看还剩多少额度 |
POST /api/ip/status | IP 池统计,返回 {"remaining", "total"}(Body 可为空) |
POST /api/ip/fetch | 随机获取 N 个 IP(旧版计数模式){"count": 5} |
POST /api/ip/bind | 账号预绑定 IP(幂等,重复绑定返回原 IP)。一个 IP 可绑定多个账号,新绑定自动均衡分配到「绑定账号数最少」的 IP |
POST /api/ip/acquire | 占用绑定 IP(未绑定自动绑定)。同一时刻一个 IP 只允许一个账号占用:被占用时返回 code="ip_busy",msg「该 IP 已被占用,请等待其释放(最长 3 分钟)或更换账号使用」 |
POST /api/ip/rebind | 账号换绑(代理连不上时自愈):解旧绑 + 均衡换到新 IP(排除旧 IP)并直接占用;新 IP 被占用返回 code="ip_busy"(原绑定保持不变),可等待后重试或再次换绑 |
POST /api/ip/unbind | 客户端解绑(幂等):解除该账号的 IP 绑定并关闭其占用会话,该 IP 绑定数立即 -1;账号之后可重新 bind/acquire。与 rebind 区别:unbind 只解绑不换新 IP |
POST /api/ip/release | 释放占用(幂等,释放后其他绑定账号可占用) |
POST /api/ip/heartbeat | 心跳续期(建议 30s 一次,超过 3 分钟自动释放占用) |
GET /api/ip/bind-status?key=&client_id=&account_key= | 查询状态:bound=绑定状态(该账号绑定了哪个 IP);held=实时占用状态(该账号当前是否占用中);last_heartbeat_at=最近心跳 |
{
"accounts": [
{"email": "xxx@xxx.com", "password": "xxx"}
],
"total": 50,
"available": 50
}
响应示例(bind / acquire / rebind 成功):
{
"success": true,
"bound": false,
"data": {"ip_id": 326, "host": "1.2.3.4", "port": 8022,
"username": "user", "password": "pass",
"protocol": "socks5"}
}
acquire 被他人占用:
{"success": false, "code": "ip_busy",
"msg": "该 IP 已被占用,请等待其释放(最长 3 分钟)或更换账号使用",
"data": {"ip_id": 326, ...}}
rebind 成功:
{"success": true, "data": {"ip_id": 327, "host": "5.6.7.8", ...},
"rebound": true}
系统信息
数据库:/Users/wml/account-site/accounts.db
管理账号:admin / admin123(可通过 ACCOUNT_ADMIN_USER / ACCOUNT_ADMIN_PASS 环境变量修改)
危险操作
删除数据库中全部账号记录(含可用和已使用),此操作不可恢复。