鑑權與速率限制
Bearer / X-API-Key / query 三種寫法、套餐速率上限、HTTP 狀態碼語意。
開放平台所有端點統一透過 API Key 鑑權。本頁講清楚三種 Token 寫法、套餐速率限制、以及錯誤回應的語意。
三種鑑權寫法
1. Authorization: Bearer(推薦)
bash
curl https://braidrun.com/api/v1/workflows \
-H "Authorization: Bearer dyk_<id>_<secret>"最標準的寫法,所有 SDK 預設支援。生產環境優先使用。
2.X-API-Key Header
bash
curl https://braidrun.com/api/v1/workflows \
-H "X-API-Key: dyk_<id>_<secret>"適合某些封閉網路的代理人無法轉送 Authorization Header 的場景。功能等同於 Bearer。
3. Query 參數 ?api_key=(僅限不能寫 Header 的場景)
text
https://braidrun.com/api/webhook-trigger/approval/appr-123/approve?api_key=dyk_<id>_<secret>謹慎使用 query 參數
Query 參數會被記錄在瀏覽器歷史、Referer Header、HTTP server 存取日誌、CDN 日誌中。僅用於必須以 GET 連結形式觸發的場景(例如郵件 / Slack / Telegram 一鍵審批連結),並配合短 TTL 的 Key。絕對不要把 Bearer 優先權讓位給 query 參數。
優先級
Authorization: Bearer dyk_…X-API-Key: dyk_…?api_key=dyk_…
從上到下依序嘗試,找到一個非空就停止解析。
速率限制
每個 API Key 各自有「每分鐘」和「每日」兩個上限,按 Key owner 的套餐自動應用。 每個 Key 獨立配額,不與同賬號的其他 Key 共享。
套餐對照表
| 套餐 | 每分鐘 | 每日 |
|---|---|---|
| Free | 60 | 2,000 |
| Pro | 300 | 50,000 |
| Team | 1,200 | 500,000 |
| Enterprise | 6,000 | 不限 |
視窗語義
- 每分鐘(minute window) · 使用 epoch 分鐘做 key,每分鐘邊界自動重置(不是從第一次調用算起的滑動窗口)
- 每日(day window) · 使用 UTC 日期做 key,每日 00:00 UTC 自動重置
達到限額時
http
HTTP/1.1 429 Too Many Requests
Retry-After: 38
X-RateLimit-Limit: 60
X-RateLimit-Window: minute
Content-Type: application/json
{
"error": "Rate limit exceeded",
"window": "minute",
"limit": 60,
"retryAfterSeconds": 38
}客戶端應當:
- 讀取 Retry-After Header(秒數),延遲相應時長後再重試
X-RateLimit-Window告訴您是哪個窗口被命中(minute / day)- 指數退避 + jitter;不要在收到 429 後立即重試
多 Key 切分流量
需要更高吞吐?為不同環境 / 不同集成簽發獨立 Key,每個 Key 都拿到完整額度。一個 Pro 用戶開 3 個 Key 等於 900 RPM 總能力。這也是事故定位的最佳實踐——出問題時只需看哪個 Key 的用量異常。
HTTP 回應碼
| 狀態碼 | 含義 | 因應策略 |
|---|---|---|
200 | 成功 | — |
202 | 已接受(啟動 execution 時) | 用傳回的 executionId 輪詢狀態 |
400 | 請求體非法(JSON / 字段錯誤) | 修正請求;不要重試 |
401 | Token 缺失 / 格式錯誤 / 已撤銷 / 已過期 / scope 不足 | 重新核對 Token 與 scope;不要重試 |
403 | Token owner 帳號已停用 / 鎖定 | 聯絡帳號管理員;不要重試 |
404 | 資源不存在或無可見性 | 檢查 ID / scope;不要重試 |
409 | 狀態衝突(例如審批已被決策) | 重新查詢目前狀態 |
429 | 速率限制 | 遵守 Retry-After 後重試 |
500/502/503 | 服務端錯誤 | 指數退避 + jitter,重試 3-5 次 |
為什麼 401 不區分原因
Token 缺失、過期、吊銷、scope 不足全部統一返回 401,不暴露具體失敗原因——這避免了攻擊者通過試錯探測哪些 Key 存在 / 哪些 scope 已開啟。審計日誌中保留了完整的失敗原因(reason 欄位),管理員可以查到。