Lesstep
GitLab・マージリクエスト・承認の API・2026年10月24日に確認

GitLab が承認を断った理由

API でマージリクエストを承認するとき(POST /projects/:id/merge_requests/:iid/approve)、GitLab は 403・409・401 のどれかで断り、401 には理由が書いてありません。承認の取り消し(…/unapprove)は、取り消すものが無いと 404 を返します。以下はすべて GitLab のソース(lib/api/merge_request_approvals.rb と承認の処理)を 2026年10月24日に読んで確かめたものです。

承認:答えの意味

api の権限が無いトークンも 403 で断られますが、そのときの答えには insufficient_scope と書いてあります。足す権限の見つけ方へ。

401 の理由

ソースでは次の場合があり、文はどれも同じです:

承認の取り消し:404

…/unapprove の {"message":"404 Not found"} は、マージリクエストが無いという意味ではありません。ソースでは、取り消すあなたの承認が無いという意味です。承認していない(またはもう取り消した)、マージ済み、または GitLab がマージしている最中でロックされている、のどれかです。

いまどうなっているか

curl -H "PRIVATE-TOKEN: your-token" "https://gitlab.com/api/v4/projects/group%2Fproject/merge_requests/42/approvals"

承認の状態の答えには、user_has_approved(あなたが承認済み)・user_can_approve(あなたが今承認できる)・approved_by があります。Premium と Ultimate では、approvals_left と require_password_to_approve もあります。

直し方

IntelliJ IDEA の「Missing reviewer」「Waiting for review from …」「… approved review」「… is waiting for updates」

IntelliJ IDEA に入っている GitLab のマージリクエストの機能は、マージリクエストの状態にレビュアーを1人1行で並べます。ソース(2026年10月30日に確認)では、この行はマージリクエストのレビュアーだけから作られ、GraphQL がレビュアーごとに返す2つの値 approved と reviewed で決まります(GitLab の説明「UserMergeRequestInteraction」・IntelliJ IDEA:GitLabMergeRequestReviewFlowViewModel.kt・userReviewer.graphql・GitLabMergeRequestDetailsStatusChecksComponentFactory.kt・CodeReviewDetailsStatusComponentFactory.kt・ReviewDetailsUIUtil.kt):

承認していないレビュアーの行には、そのレビュアーを外す操作が付きます。

IntelliJ IDEA で GitLab のマージリクエストを見るなら

Lesstep の Merge Request Inbox for GitLab は、JetBrains IDE(2024.1 以降)のプラグインです。画面に出ていた先頭のコミットを承認し、承認した後は、代わりに承認の取り消しを出します。変更の依頼もできます。GitLab が承認を断ったときは、そう言います。409 ならソースブランチが変わったので更新するように、401 か 403 なら GitLab の文を添えて、プロジェクトでの役割か設定が許していない可能性がある、と。ほかの断りは GitLab の文で伝えます。見るのは無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。

GITLAB は GitLab Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitLab Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。

ほかに:GitLab のマージの断り(405・409・422) · GitLab の「insufficient_scope」 · GitLab の 401「invalid_token」 · GitLab の 404「Project Not Found」 · GitLab のコメント・スレッドの断り(400・403) · GitLab のマージリクエストが作れない(409・422・400) · GitLab のリベースの断り・失敗(403・409) · GitLab の MR の一覧の断り(400・404) · GitLab の MR の変更が欠ける(「1000+」・too_large) · GitLab の 429「Retry later」(回数の上限) · GitLab の「compare_timeout」(差分の上限) · JetBrains の IDE で GitLab のマージリクエストを扱う · English