|
Download docs/external-api-quickstart.md from webhook/codex: direct link, hf CLI and curl.
- Browser
- Download file 5.88 kB
-
https://huggingface.co/spaces/webhook/codex/resolve/main/docs/external-api-quickstart.md
- Command line
-
hf download hf://spaces/webhook/codex/docs/external-api-quickstart.md
-
curl -L -o external-api-quickstart.md https://huggingface.co/spaces/webhook/codex/resolve/main/docs/external-api-quickstart.md
5.88 kB
External API 第三方对接速览
如果你是第三方调用方,只需要记住下面这套最小流程。
详细字段说明见:
1. 先查能力
调用:
GET /api/external/capabilities
目的:
- 看当前支持哪些邮箱类型
- 看有哪些上传目标可用
- 看
temp_mail是否有可用服务
你要重点关注返回中的:
email_types[].typeemail_types[].services[].idemail_types[].services[].nameupload_providers[].providerupload_providers[].services[].idupload_providers[].services[].name
示例:
{
"email_types": [
{
"type": "temp_mail",
"available": true,
"services": [
{"id": 3, "name": "Worker temp mail A", "priority": 0},
{"id": 7, "name": "Worker temp mail B", "priority": 0}
]
}
],
"upload_providers": [
{
"provider": "sub2api",
"available": true,
"services": [
{"id": 1, "name": "sub2-main", "priority": 0},
{"id": 4, "name": "sub2-backup", "priority": 10}
]
}
]
}
这时:
email.service_id=3表示选Worker temp mail Aemail.service_id=7表示选Worker temp mail Bupload.service_id=1表示选sub2-mainupload.service_id=4表示选sub2-backup
不是 0/1 猜出来的,而是以
capabilities当前返回的id + name为准。
2. 再创建批次
调用:
POST /api/external/registration/batches
你只需要决定 4 件事:
- 要注册多少个:
count - 用哪种邮箱:
email.type - 是否上传:
upload.enabled - 怎么执行:
execution.mode
最小示例:
{
"count": 10,
"email": {
"type": "temp_mail"
},
"upload": {
"enabled": false
},
"execution": {
"mode": "pipeline",
"concurrency": 1,
"interval_min": 0,
"interval_max": 0
}
}
如果你不传:
email.service_idupload.service_id
则系统会自动选择当前可用服务。
如果你想固定某一个邮箱服务或上传目标,就必须先通过 capabilities 拿到对应 id。
3. 保存 batch_uuid
创建成功后,响应里会返回:
{
"batch_uuid": "..."
}
后续所有查询和取消都依赖这个值。
4. 轮询状态
调用:
GET /api/external/registration/batches/{batch_uuid}
你只需要关注:
statusrequested_countcompleted_countsuccess_countfailed_countupload_success_countupload_failed_countrecent_errors
终态只有这几个:
completedcompleted_partialfailedcancelled
5. 如需终止就取消
调用:
POST /api/external/registration/batches/{batch_uuid}/cancel
仅 pending / running 批次可以取消。
6. 推荐调用策略
推荐 1:始终传 idempotency_key
这样你的上游系统在重试创建请求时,不会重复创建同一批任务。
推荐 2:先看 capabilities,再决定参数
不要写死:
- 邮箱类型
- 上传 provider
- service_id
否则后台一改配置,你的调用方就会直接打空。
尤其不要假设:
1永远是某个邮箱1永远是某个上传渠道
service_id 的意义完全取决于当前环境里的实际配置。
推荐 3:把“成功标准”定义成批次维度
不要要求“必须全部成功”。
更合理的是读取:
success_countfailed_count
再由你的系统决定是否接受这次结果。
7. 常见错误处理
| 状态码 | 含义 | 建议处理 |
|---|---|---|
401 |
API Key 错误 | 检查请求头 |
403 |
外部 API 未启用 | 联系后台启用 |
404 |
批次不存在 | 检查 batch_uuid |
422 |
请求体格式不合法 | 修正参数结构 |
400 |
业务参数非法 | 修正业务参数 |
503 |
服务暂时不可用 | 稍后重试 |
8. 第三方最小接入步骤
建议接入顺序:
- 接入
GET /capabilities - 接入
POST /batches - 接入
GET /batches/{batch_uuid} - 最后再接
POST /cancel
这样最快能形成闭环。
9. 一句话理解
外部调用方只负责:
- 下发批次
- 轮询状态
- 读取成功/失败统计
系统内部负责:
- 选邮箱
- 真正执行注册
- 上传账号
- 失败回收与重启恢复
10. API Key 从哪里拿
外部调用方使用的:
X-API-Key: 你的APIKey
这个值不是通过接口获取的,而是由系统管理员在本项目配置里设置后,直接发给对接方。
11. failure_category 字段
批次响应现在会额外返回:
"failure_category": null
或:
"failure_category": "config"
允许值只有四种:
configbusinesstransientnull
推荐按下面方式消费:
transient:可按你的策略做退避重试config:不要自动重试,先人工检查配置business:不要自动重试,先人工检查业务约束null:当前批次还没有失败分类,通常表示批次未失败
说明:
failure_reason继续保留,主要给人看failure_category主要给程序判断POST /api/external/registration/batches/{batch_uuid}/cancel的响应也可能带上该字段;这是为了和其他批次响应保持一致,不需要时可直接忽略
返回规则
pending/running/completed/completed_partial/cancelledfailure_category = null
failedfailure_category一定是config | business | transient之一
也就是说:
- 对接方自己拿不到
- 必须由项目维护者提供
- 如果项目维护者修改了 Key,对接方也要同步更新请求头