/orgs/:id/webhooks
家族 —— 见 Tier 3 组织文档(上线后)。
端点家族
| Method | Path | 用途 |
|---|---|---|
GET | /api/v1/me/webhooks | 列出你的订阅 |
POST | /api/v1/me/webhooks | 创建订阅 |
PUT | /api/v1/me/webhooks/:id | 更新 URL / event_types / status |
DELETE | /api/v1/me/webhooks/:id | 删除订阅 |
GET | /api/v1/me/webhooks/:id/deliveries?page=&page_size= | 查看投递尝试 |
Authorization: Bearer … 或 x-api-key)。所有
非修改端点免费;create/update/delete 也免费 —— webhook 不消耗 credits。
Create
Body
| Field | Type | Required | Notes |
|---|---|---|---|
url | string | yes | 生产环境必须 HTTPS。每次事件我们都向这里 POST JSON。 |
event_types | string[] | yes | 来自 事件目录 的至少一个事件。 |
secret | string | no | 自带 HMAC secret。省略让网关生成 32 位 hex(推荐)。 |
Response —— create
唯一会带原始secret 的响应。立即保存 —— 之后的 list/update
响应都会省略它。
List
{ items: [...], total }。每行 secret 都被省略。
Update
| Field | Type | Notes |
|---|---|---|
url | string | 更新目的地。我们保留 secret。 |
event_types | string[] | 替换整个订阅集合。 |
status | string | active / disabled。disabled 行不再投递,但为投递历史保留。 |
Delete
204 No Content。该 webhook 的投递历史在删除后保留 30 天,然后清理。
Deliveries
attempt: 2 / 3 落在同一 event_type 下。
response_status: 0 表示网络 / 超时失败(没收到 HTTP 响应)。
事件目录 [#event-catalog]
把任意子集传给event_types。按来源分组:
user.* —— 你账户的自配置写入
user.webhook.create/user.webhook.update/user.webhook.delete
system.* —— 网关侧
system.balance.notify.dispatched—— 低余额定时任务通知你时触发system.payment.received—— 充值到账时触发
org.* —— 仅当你是组织 owner/admin 时
org.settings.updateorg.member.concurrencyorg.member.allowed_models/org.member.allowed_models.bulkorg.api_key.create/org.api_key.revokeorg.webhook.create/org.webhook.update/org.webhook.delete
admin.* —— 仅当你有平台管理员角色时
admin.org.create/admin.org.update/admin.org.deleteadmin.org.member.add/admin.org.member.role/admin.org.member.removeadmin.org.member.allowed_models/admin.org.member.allotmentadmin.org.allowed_modelsadmin.user.create/admin.user.update/admin.user.deleteadmin.group.create/admin.group.update/admin.group.deleteadmin.balance.adjust
Payload 签名
外发的 POST body 由网关签名。信任前先验证:X-ByteSpike-Signature 请求头。签名校验不过的 payload 一律
拒绝 —— 我们把这条当契约。
重试与失败模型
- 重试:5xx / 网络失败时最多 3 次尝试。退避:30s,然后 5min。
- fail_count:自上次成功投递以来的累计。下次 2xx 时清零。
- 自动禁用:
fail_count达到50时,网关把status翻为disabled并停止派发。webhook 行被保留,便于你查看 deliveries 和通过 PUT 重新启用。 - 无绕过:4xx 响应算一次投递(你的端点拒了 payload);4xx 不触发重试。
错误
| Status | error.type | 触发条件 |
|---|---|---|
| 400 | invalid_request_error | URL 不是 HTTPS、event_types 空 / 事件未知、body 格式错。 |
| 401 | authentication_error | key 缺失 / 已撤销。 |
| 403 | permission_error | 没有所需角色就订阅了 admin.* / org.* 事件。 |
| 404 | not_found_error | webhook :id 不属于调用方。 |
| 409 | conflict_error | 同一 URL 已订阅(每个用户一个 URL,请在已有行上改 events)。 |