メインコンテンツまでスキップ

Admin API:Claude 組織を自動化する

上級
What you'll learn
  • Admin API が受け入れる 2 種類の資格情報(Admin API キー vs org:admin OAuth トークン)、そして OAuth 経路が必須のエンドポイント
  • 自組織タイプで実際に呼び出せるエンドポイント — Claude Console(Platform)vs Claude Enterprise(claude.ai)
  • ロールモデルをやさしく解説:user、claude_code_user、developer、billing、admin(Console) — そして user、managed、membership_admin、owner、primary_owner(Enterprise)
  • 実装をぶち壊す 3 つの落とし穴:シートプールの 400、SCIM の 400、ce-user-management-2026-07-13 ベータヘッダ
  • コピペで使える 2 つのプレイブック:クリーンな社員オフボーディングと、四半期グループ監査

Console で人間がクリックできる操作は、たいてい Admin API でスクリプト化できます。そして Claude で本気のチームを回すなら、いずれ必要になります。これは、最初の統合でよくハマる 3 つの落とし穴を踏まずに進めるためのガイドです。

Admin API とは何か(そして何でないか)

**ベース:**すべてのエンドポイントは https://api.anthropic.com/v1/organizations/ 配下にあります。専用ホストも専用 SDK もありません — curlrequests、いつも使っている HTTP クライアントで素の HTTPS を呼び出すだけです。

**できること:**組織メンバー、ロール、招待、ワークスペースとそのメンバー、既存の API キー、サービスアカウント、フェデレーション issuer/rules の一覧と管理。そして Claude Enterprise では RBAC グループと(読み取り専用の)カスタムロール。

できないこと:

  • **新しい API キーの作成。**セキュリティ上、新規キーは Console でしか作成できません。API は既存キーの一覧・改名・無効化のみ可能です。
  • admin メンバーの変更。adminownerprimary_owner を持つメンバーは、API 経由でロール変更や削除ができません — Console で行います。
  • **アイデンティティプロバイダの回避。**ある領域を SSO/SCIM が管理しているなら、API は IdP と戦うのではなく 400 を返します。SSO + Admin API を参照。

2 種類の資格情報

すべてのリクエストにはどちらか一方が必要 — 呼び出しごとではなく環境ごとに選びます。

Pro tip
  • 人間には専用の OAuth プロファイルの方が安全な既定(短命トークン、監査ログに実ユーザーが残る)。
  • 長命な Admin API キーは CI にはシンプル、ただし本番シークレット扱いにして定期的にローテートすること。
  • サービスアカウント、フェデレーション issuer、フェデレーション rule のエンドポイントは org:admin OAuth トークンのみを受け入れます — これらのルートでは Admin API キーは拒否されます。
資格情報送り方発行できる人備考
Admin API キー(sk-ant-admin…)x-api-key: $ANTHROPIC_ADMIN_KEYadmin ロールを持つメンバー長命。ほとんどのエンドポイントをカバー。
OAuth ベアラトークン(org:admin スコープ)authorization: Bearer $ANTHROPIC_OAUTH_TOKENadminownerprimary_owner を持つメンバー短命。ant CLI で更新。サービスアカウント/フェデレーションのエンドポイントには必須。

どちらも、すべてのリクエストで anthropic-version: 2023-06-01 を送る必要があります(Claude Enterprise のグループとカスタムロールへのリクエストは唯一の例外 — 後述の「ベータヘッダのルール」を参照)。

最初の呼び出し:私は誰?

# With an Admin API key
curl -sS "https://api.anthropic.com/v1/organizations/me" \
-H "anthropic-version: 2023-06-01" \
-H "x-api-key: $ANTHROPIC_ADMIN_KEY"

# With an OAuth bearer token (org:admin scope)
curl -sS "https://api.anthropic.com/v1/organizations/me" \
-H "anthropic-version: 2023-06-01" \
-H "authorization: Bearer $ANTHROPIC_OAUTH_TOKEN"

レスポンスは組織の idtypename。401 なら資格情報が不正、403 ならロールが足りません。

Console vs Claude Enterprise:呼び出せるもの

2 つの組織タイプは URL 空間を共有していますが、公開されるサブセットは異なります。これが Admin API で最も混乱する点です。

エンドポイントClaude Console(Platform)Claude Enterprise(claude.ai)
メンバーと招待✅ GAベータ(追加ヘッダ不要)
ワークスペース + ワークスペースメンバー✅ GA❌ 利用不可
API キー(一覧/改名/無効化)✅ GA❌ 利用不可
使用量・コストレポート、レート制限✅ GA❌ 利用不可
サービスアカウント、フェデレーション issuer/rule✅ GA(OAuth のみ)❌ 利用不可
RBAC グループ + グループメンバー❌ 利用不可ベータ(ヘッダ必須)
カスタムロール(読み取り専用カタログ)❌ 利用不可ベータ(ヘッダ必須)
Spend Limits API❌ 利用不可✅ GA

Claude Platform on AWS は第 3 のケースで、ワークスペースエンドポイント(/v1/organizations/workspaces)のみが動作します。他はすべて 404。

ロールモデル

ロール名は組織タイプごとに異なります。耳で照合しないこと。

Claude Console のロール

ロールできること
userWorkbench を使う
claude_code_userWorkbench + Claude Code
developerWorkbench + API キー管理
billingWorkbench + 請求管理
admin上記すべて + ユーザー管理

admin の上に ownerprimary_owner があります — Console にも存在しますが、API 上はスーパー管理者として扱われます。

Claude Enterprise のロール

5 種類ですが、API で割り当てられるのは 2 つだけ(usermanaged)。残りは claude.ai の組織設定で決まり、API では変更・削除できません。

ロール意味
user標準メンバー — 権限はプランのデフォルト。
managed権限は所属グループに紐づくカスタムロールから来る(これが RBAC の経路)。
owner組織のオーナー。
membership_adminメンバー管理可能だが、請求/設定は不可。
primary_owner常に 1 人。削除不可。

Enterprise できめ細かい権限が欲しいなら、レシピは:対象者を managed にしてから、望むロールを持つグループに追加する。

ベータヘッダのルール

Enterprise で最も多い統合バグ。

Watch out
  • メンバーと招待:追加のベータヘッダは NG — anthropic-version: 2023-06-01 のみ。
  • グループとカスタムロール:anthropic-beta: ce-user-management-2026-07-13 を送信すること。付けないと 404。
  • グループとカスタムロールへのリクエストは anthropic-version を要求しない — 公式サンプルも省いています。ベータ卒業時の予期せぬドリフトを避けるため公式パターンに合わせましょう。

すべてを 1 つの HTTP クライアントで扱うなら、URL でゲートします:

BETA_ROUTES = ("/v1/organizations/rbac_groups", "/v1/organizations/rbac_roles")

def headers(path: str, key: str) -> dict:
h = {"x-api-key": key}
if path.startswith(BETA_ROUTES):
h["anthropic-beta"] = "ce-user-management-2026-07-13"
else:
h["anthropic-version"] = "2023-06-01"
return h

Enterprise Admin キーのスコープ

Claude Enterprise の Admin API キーはスコープ付き — プライマリオーナーが作成時に各キーの権限を選びます。動く最小セットを選ぶこと。

スコープ付与範囲
read:membersメンバー・招待・すべてのカスタムロールエンドポイントへの GET(ロール専用スコープは存在しない)
write:membersメンバー・招待への POST/DELETE
read:rbac_groupsグループとグループメンバーへの GET
write:rbac_groupsグループとグループメンバーへの POST/DELETE。招待作成時に rbac_group_ids を渡すためにも必須 — 権限を付与できるため。
read:org_audit読み取り専用の「監査統合」スコープ — この API のすべての GET と Compliance API の読み取りをカバー。セキュリティチームの監視ボットに最適。

ページネーション — 2 つの異なるスタイル

小さな面倒、しかし「なぜリストが空?」の大きな原因:

  • メンバーと招待ID ベースのページネーション:limit(デフォルト 20、最大 1000)に加え、before_id または after_id のどちらかひとつ。first_id / last_id でページングし、has_morefalse になったら停止。
  • グループ、グループメンバー、カスタムロール不透明カーソル:各レスポンスから next_page を読み、そのまま page として送り返す。next_pagenull になったら停止。

すべての Admin API エンドポイントのレート制限は組織あたり 1 分間 100 リクエストを共有します。ただし招待作成だけは1 時間 1,200 リクエストの独自枠。いずれも超過で 429。

よくあるレシピ

全メンバーの一覧(ページング)

import os, requests

API = "https://api.anthropic.com/v1/organizations/users"
H = {"anthropic-version": "2023-06-01", "x-api-key": os.environ["ANTHROPIC_ADMIN_KEY"]}

after = None
while True:
params = {"limit": 1000}
if after:
params["after_id"] = after
page = requests.get(API, headers=H, params=params).json()
for m in page["data"]:
print(m["email"], m["role"])
if not page["has_more"]:
break
after = page["last_id"]

メールでメンバー検索(大文字小文字を無視、+tags にも対応)

curl "https://api.anthropic.com/v1/organizations/users?email=jane%2Bhiring@example.com" \
-H "x-api-key: $ANTHROPIC_ADMIN_KEY" \
-H "anthropic-version: 2023-06-01"

jane@example.com でも同じヒット — サーバー側で両辺を正規化します。

メンバーのロール変更

Enterprise では user または managed のみ、Console では userclaude_code_userdeveloperbilling のみ割り当て可能。admin ロールを割り当てようとした場合、またはすでに admin を持つメンバーを変更しようとした場合は 400 を返します。

メンバーを developer に昇格(Console)

curl -sS "https://api.anthropic.com/v1/organizations/users/$USER_ID" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_ADMIN_KEY" \
-d '{"role": "developer"}'

新入社員を招待し、事前にグループへ割り当て(Enterprise)

rbac_group_ids を渡すにはキーに write:rbac_groups スコープが必要 — グループが権限を付与するため。

招待 + Engineering への自動追加

curl -sS -X POST "https://api.anthropic.com/v1/organizations/invites" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_ADMIN_KEY" \
-d '{
  "email": "newhire@example.com",
  "role": "managed",
  "rbac_group_ids": ["rbac_group_01UvWxYzAbCdEfGhIjKlMn"]
}'

クリーンな社員オフボーディング(両組織タイプで動作)

Guided walkthrough1 of 5
  1. GET /v1/organizations/users?email=<address>。配列が空なら参加履歴なし — ステップ 3 へ。

四半期グループ監査(Enterprise)

Console を凝視することなく、機密グループにいるべきでないメンバーを見つけます。

import os, requests

H_BETA = {"x-api-key": os.environ["ANTHROPIC_ADMIN_KEY"],
"anthropic-beta": "ce-user-management-2026-07-13"}

groups = requests.get("https://api.anthropic.com/v1/organizations/rbac_groups?limit=1000",
headers=H_BETA).json()["data"]

for g in groups:
if "prod" not in g["name"].lower():
continue
members = requests.get(
f"https://api.anthropic.com/v1/organizations/rbac_groups/{g['id']}/members?limit=1000",
headers=H_BETA).json()["data"]
print(f"{g['name']} ({len(members)} members)")
for m in members:
print(f" {m['email']}")

出力を IdP のロスターと差分比較し、古いメンバーは DELETE /rbac_groups/{group_id}/members/{user_id} で削除します。SCIM でプロビジョニングされたグループ(source_type: "scim")は変更で 400 が返るので、IdP 側で対応します。

SSO + Admin API

領域を IdP が管理していれば、API は IdP に譲ります:

IdP がやることブロックされる API 操作HTTP
JIT または SCIM ユーザープロビジョニング招待作成400
Advanced SSO / SCIM ロールプロビジョニングメンバーロール更新400
SCIM メンバーシッププロビジョニング組織からメンバー削除400
SCIM グループプロビジョニング(source_type: "scim")グループ改名、削除、メンバー追加/削除400

読み取りは常に可能。設計上そうなっています:IdP が所有するものについては IdP が信頼できる唯一の情報源であり、Admin API はスクリプトが黙って IdP から乖離することを拒否します。

シート、招待、そして一度はハマる 400

有限シートプランでは:

  • **保留中の招待はシートを消費します。**撤回するか期限切れを待てばプールに戻ります。
  • **招待作成に tier パラメータはありません。**サーバーが空きのある最も低いティアを選びます。
  • 空きシートがない場合、招待作成は 400 を返します — 購入ではありません。プラン設定でシートを購入してからリトライ。
  • 招待は 21 日で期限切れ、延長不可。保留中招待のメールやロールを変更するには撤回して作り直します。

注意点

Watch out
  • Admin API キーは作成者が退職しても失効しません。手動でローテートする必要があります — オフボーディングプレイブックのステップ 4 参照。
  • Enterprise の 'managed' ロールは単体では無力。グループ未所属の managed メンバーは事実上プロダクトアクセスがありません。ロール変更は常にグループ割り当てとセットで。
  • グループの roles フィールドは、ロールデータが一時的に取得できないとき [] ではなく null で返ることがあります。ゼロロールと結論付ける前にリトライ。
  • ロール権限の capability_access_all および capability_access_all_ga は包括的な付与 — 他の行と合算すると二重計上になります。これらはモデルアクセスと permission_ プレフィックスの admin 権限を除く、そのバリアント全体をカバーします。

Admin API vs Compliance API

関連していて混同されがち:

  • Admin API(このページ)は組織に誰がいるかその人が何をできるかを管理します。
  • Compliance APIその人が何をしたかを公開:監査イベント、アクティビティフィード、そして(Enterprise で)リーガルホールド向けのコンテンツ取得と削除。

セキュリティツールでは、read:org_audit を持つ 1 本のキーで両 API の読み取りをカバーできます。

クイズ

Check yourself

0/3
  1. anthropic-beta: ce-user-management-2026-07-13 ヘッダなしで /v1/organizations/rbac_groups に POST しました。何が起きる?
  2. 退職する社員が CI で使う Admin API キーを 3 本作っていました。そのユーザーを DELETE しました。キーはどうなる?
  3. Claude Enterprise で、Admin API が割り当てられるロールは 2 つ。どれ?

次に