GitHub REST APIにコストセンター逆引きを追加:ユーザー、組織、リポジトリ、エンタープライズチームから直接取得、カスタムロールの権限範囲は変更履歴とドキュメントで書き方が異なる
2026年11月3日、GitHubはユーザー、組織、リポジトリ、エンタープライズチームが属するコストセンターを返すRESTエンドポイントを追加しました。すべてのコストセンターを一覧にして走査する必要はなくなりました。応答にはコストセンターのIDと名前が入り、なければmembershipsは空です。ドキュメントはresource_type(user、repository、organization、team)とname、APIバージョン2026-03-10、細かい権限のトークンとしてGitHub Appのユーザーアクセストークンとインストールトークンのみ、Enterprise billingの読み取り権限を示します。権限は両方を合わせて読む必要があり、変更履歴はカスタムロールのユーザーが見えるものしか調べられないとし、ドキュメントは同様の保有者が「閲覧もできる」とだけ書いて制限を示しません。実際のカスタムロールで試してください。速度やレート制限の数値はありません。
2026年11月3日、GitHubはあるリソースがどのコストセンターに属するかを返すREST APIのエンドポイントを追加しました。変更履歴によれば、ユーザー、組織、リポジトリ、またはエンタープライズチームを調べられます。これまでは、すべてのコストセンターを一覧にして、それぞれのリソースを走査する必要がありました。今は、リソースの種類と名前を一つのエンドポイントに渡せば、応答にコストセンターのIDと名前が入ります。リソースがどのコストセンターにも属していなければ、memberships配列は空で返ります。
RESTのドキュメントが詳細を補います。リクエストは、エンタープライズの課金パスのコストセンターのメンバーシップに対するGETで、クエリパラメーターは二つ、resource_type(user、repository、organization、teamのいずれか)とnameです。ユーザーと組織ではnameはログイン名、リポジトリではowner/repoの形式、チームではエンタープライズチームのスラッグです。エンタープライズはスラッグで指定し、ドキュメントの例ではAPIバージョン2026-03-10を送ります。記載されているステータスコードは200、400、403、404、500、503です。200の応答例では、ユーザーoctocatに、Engineering Teamというコストセンターを指すメンバーシップが一つ示されます。
アクセス権は、二つの情報源が完全には同じことを言っていないので、合わせて読む必要があります。変更履歴は、エンタープライズのオーナー、課金マネージャー、エンタープライズ課金の読み取り権限を持つGitHub Appは、エンタープライズ内のあらゆるリソースを調べられるとし、組織のオーナーとエンタープライズ課金の読み取りを含むカスタムロールのユーザーは、すでに見えるリソースとコストセンターしか調べられないとしています。RESTのページは、エンタープライズのオーナー、課金マネージャー、エンタープライズ内の組織オーナーがメンバーシップを見られること、エンタープライズ課金への細かい読み取り権限を持つカスタムロールの保有者も見られること、その読み取り権限を持つGitHub Appのインストールトークンはエンタープライズ内のあらゆるリソースのメンバーシップを取得できることを述べています。ページは組織オーナーを、所有する組織、その組織に属するユーザー、見えるリポジトリ、見えるエンタープライズチームに限っていますが、カスタムロールの保有者に制限は書いていません。つまりカスタムロールの範囲は、変更履歴では一つの書き方があり、ドキュメントでは明記されていないので、頼る前に実際のカスタムロールで試すべきです。
トークンも限られています。ドキュメントによれば、このエンドポイントはGitHub Appのユーザーアクセストークンとインストールアクセストークンの二種類のきめ細かいトークンで使え、読み取りレベルの「Enterprise billing」権限が必要です。このエンドポイントに他のトークン種別は挙げられていないため、別の認証情報を使うスクリプトは、新しい呼び出しへ移す前に確認が必要です。
実務では何が変わるでしょうか。リポジトリとユーザーの一覧を管理する経理やプラットフォームのチームは、すべてのコストセンターのリソース一覧を取得して突き合わせる代わりに、「このリポジトリはどのコストセンターが払っているか」と直接尋ねられます。呼び出しが減り、監査が簡単になるはずですが、どちらの情報源もどれだけ速くなるかの数値は示していません。また読み取るのはコストセンターのデータだけで、コストセンターが何を課金するかは変えず、リソースをコストセンターに割り当てることもしません。空のmemberships配列は有用な合図で、どのコストセンターにも含まれないリソースを示すので、チームはそうしたリソースを走査して配分されていない支出を見つけられます。
Sources
FAQ
この新しいエンドポイントは何を解決しますか?
これまでは、リソースのコストセンターを知るには、すべてのコストセンターを一覧にして各リソースを走査する必要がありました。今はresource_type(user、repository、organization、team)と名前を一つのエンドポイントに渡せば、コストセンターのIDと名前が返ります。属さない場合、membershipsは空です。
カスタムロールはどこまで調べられますか?
二つの情報源で書き方が異なります。変更履歴は、エンタープライズ課金の読み取りを含むカスタムロールのユーザーは、すでに見えるリソースとコストセンターしか調べられないとします。RESTドキュメントは同様の保有者もメンバーシップを見られるとだけ述べ、制限は書いていません。決めつけず、移行前に実際のカスタムロールで試してください。
どのトークンで呼び出せますか?
ドキュメントが挙げるきめ細かいトークンは、GitHub Appのユーザーアクセストークンとインストールアクセストークンの二種類だけで、Enterprise billingの読み取り権限が必要です。このエンドポイントに他のトークン種別は挙げられていないため、別の認証情報を使うスクリプトは新しい呼び出しへ移す前に確認してください。