管理金鑰
管理金鑰讓你用自己的程式碼管理工作區:為客戶或裝置建立推論金鑰並設定上限,讀取用量、日誌和設定。它不能呼叫模型。
權限範圍允許的事,管理金鑰在整個工作區都能做。請把它留在你的伺服器上,只給它用得到的權限範圍,並限制為你伺服器的 IP 位址。
建立管理金鑰
- 在主控台開啟 API 金鑰 › 管理金鑰,點選建立管理金鑰。管理員和工作區擁有者可以建立。
- 選擇金鑰歸誰所有、帶哪些權限範圍。
- 複製金鑰。它以
sk-syn-admin-開頭,只顯示一次。
權限範圍
一個權限範圍對應管理 API 的一部分。寫入權限包含對應的讀取權限。金鑰沒有相應的權限範圍時,請求會回傳 403 insufficient_scope。
| 權限範圍 | 可存取的內容 | 端點 |
|---|---|---|
keys.readkeys.write | 推論金鑰及其上限 | /api/v1/keys |
billing.read | 工作區的用量、費用和餘額 | /api/v1/billing/* |
logs.read | 請求、鏈路和工作階段。不含提示詞和回答。 | /api/v1/requests/api/v1/traces/api/v1/sessions |
usage.read | 依標籤彙總的用量 | /api/v1/usage/labels |
prompts.readprompts.write | 提示詞庫:提示詞、版本和標籤 | /api/v1/prompts |
evals.readevals.write | 測試集和評測執行紀錄 | /api/v1/prompts/{id}/test-sets/api/v1/prompts/{id}/eval-runs |
audit.read | 稽核日誌 | /api/v1/audit-logs |
members.read | 成員和邀請 | /api/v1/members/api/v1/invites |
byok.read | BYOK 設定。不含供應商金鑰。 | /api/v1/byok |
exports.read | 匯出目的地,不含憑證 | /api/v1/export-destinations |
金鑰歸誰所有
- 你。你離開工作區後,金鑰會被停用。你還在工作區但不再是管理員時,請求會回傳
403 key_creator_not_authorized。 - 工作區。建立者離開或角色變更後,金鑰照常可用。適合 CI 和整合。建立者離開時,這把金鑰會連同用它建立的推論金鑰一起移交給工作區擁有者,全部照常可用。
歸屬在建立金鑰時選定,之後無法變更。
驗證
把金鑰當作 Bearer token 傳送。管理金鑰只能用於管理 API:/v1/ 底下的模型端點會拒絕它;反過來,管理 API 也會拒絕推論金鑰(sk-syn-),回傳 401 wrong_key_kind。
Authorization: Bearer sk-syn-admin-... 建立推論金鑰
POST /api/v1/keys
| 參數 | 類型 | 說明 |
|---|---|---|
name* | string | 顯示在主控台和用量資料中。必填。 |
limit_usd | number | 花費上限,單位為美元。不傳則不設上限;但如果管理金鑰所代表的成員在這個工作區有每日限額,就一定要傳:不能高於該限額,而且 limit_reset 要設為 daily。 |
limit_reset | string | 花費何時歸零:永不、每日、每週或每月。 |
allowed_models | string[] | 金鑰可以呼叫的模型。留空表示全部;如果管理金鑰所代表的成員只能使用部分模型,留空就是這些模型。不在該成員清單中的模型會被拒絕。 |
ip_allowlist | string[] | 允許使用這把金鑰的 IP 位址或 CIDR 範圍。留空表示不限。 |
expires_at | string | 金鑰的失效時間,RFC 3339 格式。 |
include_byok_in_limit | boolean | 用你自己的供應商金鑰送出的請求是否計入上限。預設計入。 |
rate_limit | object | 金鑰本身的每分鐘上限:請求數(rpm)和 token 數(tpm)。0 表示不限。 |
metadata | object | 你為金鑰加上的標籤,例如租戶 ID 或裝置 ID。列出金鑰時可以依它篩選。 |
curl https://synthorai.io/api/v1/keys \
-H "Authorization: Bearer sk-syn-admin-..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: device-abc-123" \
-d '{
"name": "Device abc-123",
"limit_usd": 5.0,
"limit_reset": "monthly",
"allowed_models": ["claude-haiku-4-5"],
"metadata": { "tenant_id": "acme", "device_id": "abc-123" }
}'import requests
resp = requests.post(
"https://synthorai.io/api/v1/keys",
headers={
"Authorization": "Bearer sk-syn-admin-...",
"Idempotency-Key": "device-abc-123",
},
json={
"name": "Device abc-123",
"limit_usd": 5.0,
"limit_reset": "monthly",
"allowed_models": ["claude-haiku-4-5"],
"metadata": {"tenant_id": "acme", "device_id": "abc-123"},
},
)
inference_key = resp.json()["data"]["key"] # full key - shown only once回應的 key 欄位是完整金鑰,只回傳這一次。請立即存好:之後再讀取,只會拿到 key_prefix。
{
"data": {
"id": 42,
"key": "sk-syn-d4f0...e91b",
"key_prefix": "sk-syn-d4f0...",
"name": "Device abc-123",
"enabled": true,
"status": "enabled",
"limit_usd": 5.0,
"used_usd": 0,
"limit_reset": "monthly",
"allowed_models": ["claude-haiku-4-5"],
"ip_allowlist": [],
"expires_at": null,
"include_byok_in_limit": true,
"rate_limit": { "rpm": 0, "tpm": 0 },
"metadata": { "tenant_id": "acme", "device_id": "abc-123" },
"created_via": "provisioning_api",
"created_at": "2026-10-01T12:00:00Z"
},
"meta": { "request_id": "01a1..." }
} 想安全地重試建立請求,請帶上 Idempotency-Key 標頭。用同一個值重送,會得到第一次的回應,但不含金鑰明文。同一個鍵在 24 小時內都會回傳這份回應,即使資源已被刪除;要重新建立,請換一個新的鍵。
列出和篩選金鑰
GET /api/v1/keys
用 ?metadata.<name>=<value> 可依任意 metadata 欄位篩選。結果分頁回傳:把 meta.next_cursor 當作 cursor 傳入,即可取得下一頁。
# all keys
curl https://synthorai.io/api/v1/keys \
-H "Authorization: Bearer sk-syn-admin-..."
# only keys tagged tenant_id=acme, 50 at a time
curl "https://synthorai.io/api/v1/keys?metadata.tenant_id=acme&limit=50" \
-H "Authorization: Bearer sk-syn-admin-..." 讀取、修改、輪換和刪除
- GET
/api/v1/keys/{id}回傳單一金鑰。 - PATCH
/api/v1/keys/{id}只修改你傳入的欄位。"enabled": false會停用金鑰,但不會刪除它。 - POST
/api/v1/keys/{id}/rotate為金鑰換一組新的金鑰值,舊的立即失效。 - DELETE
/api/v1/keys/{id}刪除金鑰,使用它的請求會立即回傳401。
# stop a key without deleting it
curl -X PATCH https://synthorai.io/api/v1/keys/42 \
-H "Authorization: Bearer sk-syn-admin-..." \
-H "Content-Type: application/json" \
-d '{ "enabled": false }'
# give it a new secret
curl -X POST https://synthorai.io/api/v1/keys/42/rotate \
-H "Authorization: Bearer sk-syn-admin-..."
# delete it
curl -X DELETE https://synthorai.io/api/v1/keys/42 \
-H "Authorization: Bearer sk-syn-admin-..." 管理金鑰代表一位成員操作:通常是它的建立者;如果金鑰屬於工作區且建立者已離開,則代表工作區擁有者。它只能修改、輪換和刪除這位成員的金鑰,包括它自己建立的;對其他成員的金鑰會回傳 403 not_key_creator,用擁有者的管理金鑰也一樣。在專屬執行個體上,工作區的任何管理金鑰都能管理所有成員的金鑰,和管理員在主控台中能做的一樣。管理員停用的金鑰只有管理員能重新啟用,其他人啟用會回傳 403 disabled_by_admin。
上限和花費
limit_usd 是金鑰最多能花多少,used_usd 是已經花了多少。達到上限後,status 會變成 limit_reached,請求會被拒絕,直到你調高上限或週期重設。
把你自己的客戶 ID 或裝置 ID 寫進 metadata,之後依它篩選,就能看到這位客戶的所有金鑰和每一把的花費。
正在為每把金鑰訂花費上限?用 LLM API 成本計算機 把客戶預估的 token 用量換算成每月金額,直接填進 limit_usd。
錯誤
錯誤沿用管理 API 的統一格式:error.code 說明原因,error.message 說明如何處理;在 /api/provisioning/keys 上,同樣的錯誤碼會放在 error.type 中。以下是管理金鑰和金鑰 API 特有的錯誤碼。
| 錯誤碼 | HTTP 狀態碼 | 含義 |
|---|---|---|
key_creator_not_authorized | 403 | 管理金鑰的建立者已不再是管理員或擁有者。 |
key_owner_not_member | 403 | 金鑰所代表的成員已不在工作區中。 |
not_key_creator | 403 | 你要修改、輪換或刪除的金鑰屬於其他成員。 |
disabled_by_admin | 403 | 金鑰已被管理員停用,只有管理員能重新啟用。 |
key_policy_refused | 400 | 金鑰超出了所屬成員的限制:每日限額、可用模型,或工作區允許的 IP 範圍。具體是哪一項,請看回傳的訊息。 |
key_policy_unavailable | 503 | 暫時讀不到這些限制,請稍後再試。 |
Provisioning 金鑰和 /api/provisioning
管理金鑰推出之前簽發的金鑰(sk-syn-prov-)仍可使用,帶有 keys.read 和 keys.write 兩個權限範圍。舊路徑 /api/provisioning/keys 仍然可用,欄位名稱維持原樣(quota、status)。新的整合請用 /api/v1/keys。
管理 API 還涵蓋帳單、請求日誌、提示詞和工作區設定,詳見 API 總覽和 OpenAPI 文件。