管理キー
管理キーは、自分のコードからワークスペースを管理するためのキーです。顧客やデバイスが使う推論キーを作成して上限を設定し、使用量、ログ、設定を読み取れます。モデルの呼び出しには使えません。
管理キーは、スコープが許す範囲でワークスペース全体を操作できます。サーバー側だけに保管し、用途に必要なスコープだけを与え、サーバーの IP アドレスに制限してください。
管理キーを作成する
- コンソールで API キー › 管理キーを開き、管理キーを作成を選びます。作成できるのは管理者とワークスペースの所有者です。
- キーの所有者と、付与するスコープを選びます。
- キーをコピーします。
sk-syn-admin-で始まり、表示されるのは一度だけです。
スコープ
スコープ 1 つにつき、管理 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 トークンとして送ります。管理キーが使えるのは管理 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 | このキーの 1 分あたりの上限。リクエスト数(rpm)とトークン数(tpm)で指定します。0 は上限なしです。 |
metadata | object | テナントやデバイスの 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> で、メタデータの任意のフィールドによる絞り込みができます。結果はページ単位で返ります。次のページを取得するには、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}は、キーを 1 件返します。 - 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-..." 管理キーは 1 人のメンバーの代理として動作します。代理するのはキーの作成者で、ワークスペースのキーの場合、作成者が退出した後は所有者になります。変更、ローテーション、削除ができるのはそのメンバーのキーだけで、このキーで作成したキーも含まれます。他のメンバーのキーには、所有者の管理キーを使っても 403 not_key_creator が返ります。専用インスタンスでは、管理者がコンソールでできるのと同じく、ワークスペースのどの管理キーでも全メンバーのキーを管理できます。管理者が無効にしたキーを再び有効にできるのは管理者だけで、ほかの人が有効にしようとすると 403 disabled_by_admin が返ります。
上限と利用額
limit_usd はキーが使える金額、used_usd はこれまでに使った金額です。上限に達すると status が limit_reached になり、上限を引き上げるか期間がリセットされるまでリクエストは拒否されます。
metadata に自社の顧客 ID やデバイス ID を入れておくと、一覧をその値で絞り込んで、その顧客のキーとキーごとの利用額を確認できます。
キーごとの利用上限を決めるときは、 LLM API コスト計算ツール が使えます。顧客の想定トークン量を月額に換算できるので、その金額を 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 | 制限を読み取れませんでした。少し待ってから再試行してください。 |
プロビジョニングキーと /api/provisioning
管理キーの導入前に発行されたキー(sk-syn-prov-)は、keys.read と keys.write のスコープを持つキーとして引き続き使えます。以前のアドレス /api/provisioning/keys も、独自のフィールド名(quota、status)のまま提供しています。新しく連携を作る場合は /api/v1/keys を使ってください。
管理 API では、請求、リクエストログ、プロンプト、ワークスペース設定も扱えます。API の概要と OpenAPI ドキュメントを参照してください。