GitHub の「Resource not accessible by personal access token」
GitHub の説明では、トークンの権限が足りないという意味です。Fine-grained の個人アクセストークンが、この呼び出しに要る権限を付けずに作られたか、このリポジトリに届かない作り方をされています。GitHub は HTTP 403 で断り、REST API の答えには、この呼び出しが受け付ける権限を書いたヘッダーが付きます。その権限をトークンに付けて、やり直します。
答えの全体
実際の例です。読むことはできるトークンで、プルリクのレビューを送ったとき(公開の報告)。本文の形は別の報告から:
HTTP 403
x-accepted-github-permissions: pull_requests=write
{"message": "Resource not accessible by personal access token",
"documentation_url": "https://docs.github.com/rest/...",
"status": "403"}
GitHub の REST API のトラブルシューティングより:X-Accepted-GitHub-Permissions は、その呼び出しに要る権限をカンマで区切って並べたものです。選べるときは、権限の組をセミコロンで区切ります。pull_requests=write,contents=read は両方が要る、contents=write; contents=write,workflows=write(公開の報告にあった例)はどちらかの組があれば足りる、という意味です。道具によっては文しか出しません。ヘッダーを見るには、失敗した住所を curl で呼びます。
curl -i -H "Authorization: Bearer your-token" "https://api.github.com/the/address/that/failed"
「Resource not accessible by integration」も、GitHub の説明は同じです。
プルリクの道具に要る権限
GitHub の Fine-grained の個人アクセストークンに要る権限(リポジトリの権限)より:
- Pull requests:読み取りで、プルリクの一覧と中身を読む。書き込みで、レビュー(承認・変更依頼)、行へのコメント、プルリクの作成、ブランチの更新。
- Contents:書き込みでマージ。マージの呼び出し(
PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge)は Pull requests ではなく Contents の下にあります。なので、Pull requests の書き込みだけのトークンは、承認はできてもマージはできません。 - Issues か Pull requests:書き込みで、プルリクの会話に書く(
POST /repos/{owner}/{repo}/issues/{issue_number}/commentsはどちらでも通ります)。 - Commit statuses:読み取りで、CI のサービスがコミットに付けた状態を読む。
- Actions:読み取りで、GitHub Actions の実行(
GET /repos/{owner}/{repo}/actions/runs)を読む。check runs の権限は一覧にありません。
権限が合っているように見えるとき
トークンがどこまで届くかを見ます。GitHub の個人用アクセストークンを管理するより:
- Resource owner(持ち主):トークンが届くのは、作るときに選んだ持ち主の物だけです。自分のアカウントを持ち主にして作ったトークンは、組織の非公開のリポジトリに届かず、公開のリポジトリも変えられません。
- Repository access:Only select repositories にしたなら、届くのは選んだリポジトリだけです。どのトークンも公開リポジトリは全部読めるので、選んでいない公開リポジトリは、読めても変えられません。
- 他人の公開リポジトリ:自分か、自分が入っている組織の持ち物でない公開リポジトリに書き込めるのは、Classic のトークンだけです。
- 外部コラボレーターが、協力している組織のリポジトリに使えるのは、Classic のトークンだけです。
- 承認待ち:組織が Fine-grained のトークンに承認を求めているなら、組織の管理者が見るまでトークンは pending のままで、それまでは公開されている物しか読めません。
- 止められている:Fine-grained のトークンを止めている組織は、持ち主の候補に出てきません。そこで残る手は、repo の権限を付けた Classic のトークンです。ただし組織は Classic のトークンも 403 で断れます。
届かない非公開のリポジトリは、403 ではなく 404 Not Found を答えます。非公開のリポジトリがあることを GitHub が認めないためです(存在するリソースの 404 Not Found)。
文が「Resource protected by organization SAML enforcement」なら、組織がシングルサインオンを使っていて、トークンをその組織に許可する必要があります。トークンをシングルサインオンに許可するへ。401 の「Bad credentials」なら、トークン自体がもう受け付けられていません。受け付けなくなった理由へ。
権限を付けてトークンを作る
- GitHub の右上の自分のアイコン → Settings → Developer settings → Personal access tokens → Fine-grained tokens → Generate new token。
- 名前と期限、リポジトリの持ち主を Resource owner に、そのリポジトリを含む Repository access、Permissions にはヘッダーにあった権限を全部。入力済みの画面を開くこともできます。例:
https://github.com/settings/personal-access-tokens/new?name=IDE&pull_requests=write&contents=write&statuses=read(入力済みで開く方法)。 - Generate token を押してコピーする。組織の承認が要るなら、承認を待つ。
- 古いトークンを入れていた所に新しいトークンを入れ、同じ画面で古い方を消す。
IntelliJ IDEA では「User authorization failed」
IntelliJ IDEA に入っている GitHub の機能が、この断りをどう受け止めるか。ソース(2026年10月30日に確認・IntelliJ IDEA:GithubApiRequestExecutor.kt・GithubApiRequest.kt・GHAPIExceptionUtil.kt・GHSelectorErrorStatusPresenter.kt)では:
- REST の 403 は、文に「API rate limit exceeded」と無ければログインの失敗として扱われ、この文もそうなります。Pull Requests のツールウィンドウがつなぐときは「Could not connect to repository … with account …」(このアカウントでリポジトリにつなげない)と「User authorization failed」(ユーザーの認可に失敗)が出て、Log in again… が出ます。GitHub の文は出ません。問い合わせのコードは
X-Accepted-GitHub-Permissionsも読みません。どちらも上のcurlで見えます。ログインし直してもトークンにできることは変わらないので、権限を付けたトークンが要ります。 - GraphQL で、求めたデータの代わりにエラーが返ったとき:種類が
INSUFFICIENT_SCOPESのエラーはやはりログインの失敗として扱われ、それ以外のエラーは GitHub の文で出ます。 - GitHub の文が「Could not resolve to a Repository」で始まると、IntelliJ IDEA は「Repository not found or access denied. This is likely due to OAuth App access restrictions within your organization.」(リポジトリが見つからないか、アクセスを断られた。組織の OAuth アプリのアクセス制限のせいらしい)と JetBrains のサポートの記事へのリンクを足します。この一言が挙げるのは組織のOAuth アプリのアクセス制限だけです。トークンでログインしたなら、上のトークンの持ち主とリポジトリのアクセスも見てください。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。Fine-grained のトークンなら Pull requests・Contents・Commit statuses の読み取りで読み(GitHub Actions の実行は Actions の読み取りで)、Pull requests と Contents の書き込みで承認・コメント・マージをします(Classic のトークンなら repo)。GitHub がこの文で断ったときは、その文を画面に出し、トークンに要る権限を書き、設定を開けるようにします。設定には、GitHub のトークンの作成の画面へのリンクがあります。受信箱・差分・会話は無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「API rate limit exceeded」 · GitHub のマージの断り(405・409) · GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · GitHub の差分の 406「too_large」・3,000件 · GitHub の行のコメントの 422「must be part of the diff」 · GitHub のブランチの更新の断り(422) · GitHub のプルリクが作れない(422・403) · GitHub の自動マージの断り · GitHub の下書き・レビュー準備完了・閉じるの断り · GitHub の会話の解決の断り · GitHub のチェックが出ない(check runs の 403) · GitHub のファイルの中身が読めない · GitHub の比較の断り(404・422) · GitHub のコメント・返信の断り(ロック・アーカイブの 403) · GitHub のマージの方法の断り(405) · GitHub のブランチが見つからない(404・301) · GitHub Enterprise Server につながらない · GitHub のレビューの依頼が出ない · GitHub のプルリクの一覧が足りない · GitHub の 404・名前を変えたリポジトリ(301・307) · GitHub の行のコメントが outdated・差分に無い · GitHub のプルリクの更新・通知が遅い · GitHub の変更の提案が適用できない · GitHub の必須チェックが Expected のまま · GitHub でコードオーナーのレビューが要る · GitHub で未解決の会話がマージを止める · GitHub で署名の無いコミットがマージを止める · GitHub のマージキューでマージするブランチ · GitHub でマージが最後の push の承認を待っている · GitHub でマージがコードスキャンの結果を待っている · GitHub でマージがコード品質の結果を待っている · GitHub でコードのカバレッジの水準がマージを止める · GitHub でライセンスの適合の結果がマージを止める · GitHub でブランチのロックや更新の制限がマージを止める · GitHub でマージの後にブランチが消えない · GitHub でチームの承認(Required reviewers)がマージを止める · GitHub でシークレットスキャンのアラートがマージを止める · GitHub でスタックしたプルリクがマージできない · GitHub で push の規則が push を止める · GitHub でコミットのメタデータの規則がマージを止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクを手元にチェックアウトできない · GitHub のプルリクがマージ先と衝突している · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · GitHub でフォークが同期できない · GitHub でプルリクのベースのブランチを変えられない · GitHub でプルリクを取り消せない · GitHub でプルリクのテンプレートが出ない · GitHub でプルリクにラベルや担当者が付かない · GitHub でプルリクを閉じられない・開き直せない · GitHub でプッシュ保護にプッシュを止められた · GitHub でプルリクのコメントが隠された · GitHub でデプロイが成功するまでプルリクをマージできない · GitHub でチームに頼んだレビューがメンバーに置き換わった · GitHub でプルリクのファイルの Viewed が外れた · GitHub でマージしていないプルリクがマージ済みになった · GitHub で Copilot のレビューが承認に数えられない · GitHub でワークフローが作ったプルリクのチェックが動かない · GitHub でプルリクに Update branch のボタンが出ない · GitHub で Dependabot のプルリクのチェックが失敗する · GitHub でフォークからのプルリクのチェックが失敗する · GitHub でコミットメッセージの [skip ci] でチェックが動かない · GitHub で保存期間を過ぎてチェックが消えた · GitHub の公開リポジトリのコードレビューの制限 · GitHub でリポジトリのプルリクがオフ・制限されている · GitHub でスタックのプルリクごとにチェックが走る · GitHub でスカッシュでマージ済みのコミットが次のプルリクに出る · GitHub のプルリクでファイルの差分が出ない · GitHub でフォークのプルリクのブランチに push できない · GitHub のプルリクのチェックが取り消された · GitHub で Rebase and merge が使えない · GitHub のマージのコミットメッセージが思った形にならない · GitHub のプルリクでファイルの全行が変わったと出る · GitHub の API がタイムアウトした · GitHub のプルリクで画像や文書の差分が見た目で出ない · GitHub のレビューの依頼が断られる(422) · GitHub で Copilot が作ったプルリクのチェックが動かない・承認が数えられない · GitHub の push が GH006・GH013 で断られる · GitHub で承認が足りずマージできない・数に入らない承認 · JetBrains の IDE で GitHub のプルリクを扱う · English