GitLab CI/CD merge_request_approvals API

Operations about merge_request_approvals

Operations 6

GET /api/v4/projects/{id}/merge_requests/{merge_request_iid}/approvals #
POST /api/v4/projects/{id}/merge_requests/{merge_request_iid}/approvals Change approval-related configuration #
POST /api/v4/projects/{id}/merge_requests/{merge_request_iid}/approve #
POST /api/v4/projects/{id}/merge_requests/{merge_request_iid}/unapprove #
PUT /api/v4/projects/{id}/merge_requests/{merge_request_iid}/reset_approvals Remove all merge request approvals #
GET /api/v4/projects/{id}/merge_requests/{merge_request_iid}/approval_state #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/gitlab-ci-merge-request-approvals-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

gitlab-ci-merge-request-approvals-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: GitLab access_requests Merge Request Approvals API
  version: v4
  description: Operations related to access requests
servers:
- url: https://gitlab.com
tags:
- name: merge_request_approvals
  description: Operations about merge_request_approvals
paths:
  /api/v4/projects/{id}/merge_requests/{merge_request_iid}/approvals:
    get:
      description: List approvals for merge request
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: integer
          format: int32
      - in: path
        name: merge_request_iid
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: List approvals for merge request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_MergeRequestApprovals'
        '404':
          description: Not found
      tags:
      - merge_request_approvals
      operationId: getApiV4ProjectsIdMergeRequestsMergeRequestIidApprovals
    post:
      summary: Change approval-related configuration
      description: Deprecated in 16.0. Use the merge request approvals API instead.
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: path
        name: merge_request_iid
        description: The IID of a merge request
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Change approval-related configuration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_ApprovalState'
      tags:
      - merge_request_approvals
      operationId: postApiV4ProjectsIdMergeRequestsMergeRequestIidApprovals
      deprecated: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/postApiV4ProjectsIdMergeRequestsMergeRequestIidApprovals'
        required: true
  /api/v4/projects/{id}/merge_requests/{merge_request_iid}/approve:
    post:
      description: Approve a merge request
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: integer
          format: int32
      - in: path
        name: merge_request_iid
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Approve a merge request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_MergeRequestApprovals'
        '404':
          description: Not found
        '401':
          description: Unauthorized
      tags:
      - merge_request_approvals
      operationId: postApiV4ProjectsIdMergeRequestsMergeRequestIidApprove
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/postApiV4ProjectsIdMergeRequestsMergeRequestIidApprove'
        required: true
  /api/v4/projects/{id}/merge_requests/{merge_request_iid}/unapprove:
    post:
      description: Remove an approval from a merge request
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: integer
          format: int32
      - in: path
        name: merge_request_iid
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Remove an approval from a merge request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_MergeRequestApprovals'
        '404':
          description: Not found
        '401':
          description: Unauthorized
      tags:
      - merge_request_approvals
      operationId: postApiV4ProjectsIdMergeRequestsMergeRequestIidUnapprove
  /api/v4/projects/{id}/merge_requests/{merge_request_iid}/reset_approvals:
    put:
      summary: Remove all merge request approvals
      description: Clear all approvals of merge request. This feature was added in GitLab 15.4
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: integer
          format: int32
      - in: path
        name: merge_request_iid
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Remove all merge request approvals
        '401':
          description: Unauthorized
        '404':
          description: Not found
      tags:
      - merge_request_approvals
      operationId: putApiV4ProjectsIdMergeRequestsMergeRequestIidResetApprovals
  /api/v4/projects/{id}/merge_requests/{merge_request_iid}/approval_state:
    get:
      description: Get approval state of merge request
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: path
        name: merge_request_iid
        description: The IID of a merge request
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Get approval state of merge request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_MergeRequestApprovalState'
      tags:
      - merge_request_approvals
      operationId: getApiV4ProjectsIdMergeRequestsMergeRequestIidApprovalState
components:
  schemas:
    API_Entities_Namespace_RootStorageStatistics:
      type: object
      properties:
        build_artifacts_size:
          type: integer
          format: int32
          description: CI artifacts size in bytes.
        container_registry_size:
          type: integer
          format: int32
          description: container registry size in bytes.
        container_registry_size_is_estimated:
          type: boolean
          description: Indicates whether the deduplicated container registry size for the namespace is an estimated value or not.
        dependency_proxy_size:
          type: integer
          format: int32
          description: Dependency Proxy sizes in bytes.
        lfs_objects_size:
          type: integer
          format: int32
          description: LFS objects size in bytes.
        packages_size:
          type: integer
          format: int32
          description: Packages size in bytes.
        pipeline_artifacts_size:
          type: integer
          format: int32
          description: CI pipeline artifacts size in bytes.
        repository_size:
          type: integer
          format: int32
          description: Git repository size in bytes.
        snippets_size:
          type: integer
          format: int32
          description: Snippets size in bytes.
        storage_size:
          type: integer
          format: int32
          description: Total storage in bytes.
        uploads_size:
          type: integer
          format: int32
          description: Uploads size in bytes.
        wiki_size:
          type: integer
          format: int32
          description: Wiki size in bytes.
      required:
      - build_artifacts_size
      - container_registry_size
      - container_registry_size_is_estimated
      - dependency_proxy_size
      - lfs_objects_size
      - packages_size
      - pipeline_artifacts_size
      - repository_size
      - snippets_size
      - storage_size
      - uploads_size
      - wiki_size
    postApiV4ProjectsIdMergeRequestsMergeRequestIidApprove:
      type: object
      properties:
        sha:
          type: string
          description: When present, must have the HEAD SHA of the source branch
        publish_review:
          type: boolean
          description: When `true` submits pending review comments
        approval_password:
          type: string
          description: Current user's password if project is set to require explicit auth on approval
          example: secret
      description: Approve a merge request
    API_Entities_MergeRequestApprovals:
      type: object
      properties:
        user_has_approved:
          type: boolean
        user_can_approve:
          type: boolean
        approved:
          type: boolean
        approved_by:
          $ref: '#/components/schemas/API_Entities_Approvals'
      required:
      - user_has_approved
      - user_can_approve
      - approved
      - approved_by
      description: API_Entities_MergeRequestApprovals model
    API_Entities_ApprovalRuleShort:
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: 1
        name:
          type: string
          example: QA
        rule_type:
          type: string
          example: regular
      required:
      - id
      - name
      - rule_type
    API_Entities_Approvals:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/API_Entities_UserBasic'
        approved_at:
          type: string
          format: date-time
          example: '2025-01-01T10:00:00Z'
      required:
      - user
      - approved_at
    API_Entities_CustomAttribute:
      type: object
      properties:
        key:
          type: string
          example: foo
        value:
          type: string
          example: bar
      required:
      - key
      - value
      description: API_Entities_CustomAttribute model
    API_Entities_MergeRequestApprovalRule_SourceRule:
      type: object
      properties:
        approvals_required:
          type: integer
          format: int32
          example: 2
      required:
      - approvals_required
    API_Entities_Group:
      type: object
      properties:
        id:
          type: integer
          format: int32
        web_url:
          type: string
          example: http://gitlab.example.com/groups/diaspora
        name:
          type: string
          example: Diaspora
        path:
          type: string
        description:
          type: string
        visibility:
          type: string
        share_with_group_lock:
          type: boolean
        require_two_factor_authentication:
          type: boolean
        two_factor_grace_period:
          type: integer
          format: int32
        project_creation_level:
          type: string
        auto_devops_enabled:
          type: string
        subgroup_creation_level:
          type: string
        emails_disabled:
          type: boolean
        emails_enabled:
          type: boolean
        show_diff_preview_in_email:
          type: boolean
        mentions_disabled:
          type: string
        lfs_enabled:
          type: boolean
        archived:
          type: boolean
        math_rendering_limits_enabled:
          type: boolean
        lock_math_rendering_limits_enabled:
          type: boolean
        default_branch:
          type: string
        default_branch_protection:
          type: integer
          format: int32
        default_branch_protection_defaults:
          type: string
        avatar_url:
          type: string
        request_access_enabled:
          type: boolean
        full_name:
          type: string
        full_path:
          type: string
        created_at:
          type: string
        parent_id:
          type: string
        organization_id:
          type: integer
          format: int32
        shared_runners_setting:
          type: string
        max_artifacts_size:
          type: integer
          format: int32
        custom_attributes:
          $ref: '#/components/schemas/API_Entities_CustomAttribute'
        statistics:
          type: object
          properties:
            storage_size:
              type: string
            repository_size:
              type: string
            wiki_size:
              type: string
            lfs_objects_size:
              type: string
            job_artifacts_size:
              type: string
            pipeline_artifacts_size:
              type: string
            packages_size:
              type: string
            snippets_size:
              type: string
            uploads_size:
              type: string
          required:
          - storage_size
          - repository_size
          - wiki_size
          - lfs_objects_size
          - job_artifacts_size
          - pipeline_artifacts_size
          - packages_size
          - snippets_size
          - uploads_size
        marked_for_deletion_on:
          type: string
        root_storage_statistics:
          $ref: '#/components/schemas/API_Entities_Namespace_RootStorageStatistics'
        ldap_cn:
          type: string
        ldap_access:
          type: string
        ldap_group_links:
          $ref: '#/components/schemas/API_Entities_LdapGroupLink'
        saml_group_links:
          $ref: '#/components/schemas/API_Entities_SamlGroupLink'
        file_template_project_id:
          type: string
        wiki_access_level:
          type: string
        repository_storage:
          type: string
        duo_core_features_enabled:
          type: boolean
          description: '[Experimental] Indicates whether GitLab Duo Core features are enabled for the group'
        duo_features_enabled:
          type: string
        lock_duo_features_enabled:
          type: string
        auto_duo_code_review_enabled:
          type: string
        web_based_commit_signing_enabled:
          type: string
        allow_personal_snippets:
          type: string
        duo_namespace_access_rules:
          type: string
      required:
      - id
      - web_url
      - name
      - path
      - description
      - visibility
      - share_with_group_lock
      - require_two_factor_authentication
      - two_factor_grace_period
      - project_creation_level
      - auto_devops_enabled
      - subgroup_creation_level
      - emails_disabled
      - emails_enabled
      - show_diff_preview_in_email
      - mentions_disabled
      - lfs_enabled
      - archived
      - math_rendering_limits_enabled
      - lock_math_rendering_limits_enabled
      - default_branch
      - default_branch_protection
      - default_branch_protection_defaults
      - avatar_url
      - request_access_enabled
      - full_name
      - full_path
      - created_at
      - parent_id
      - organization_id
      - shared_runners_setting
      - max_artifacts_size
      - marked_for_deletion_on
      - ldap_cn
      - ldap_access
      - wiki_access_level
      description: API_Entities_Group model
    postApiV4ProjectsIdMergeRequestsMergeRequestIidApprovals:
      type: object
      properties:
        approvals_required:
          type: integer
          format: int32
          description: The amount of approvals required. Must be higher than the project approvals
          example: 2
      required:
      - approvals_required
      description: Change approval-related configuration
    API_Entities_UserBasic:
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: 1
        username:
          type: string
          example: admin
        public_email:
          type: string
          example: john@example.com
        name:
          type: string
          example: Administrator
        state:
          type: string
          example: active
        locked:
          type: boolean
        avatar_url:
          type: string
          example: https://gravatar.com/avatar/1
        avatar_path:
          type: string
          example: /user/avatar/28/The-Big-Lebowski-400-400.png
        custom_attributes:
          type: array
          items:
            $ref: '#/components/schemas/API_Entities_CustomAttribute'
        web_url:
          type: string
          example: https://gitlab.example.com/root
      required:
      - id
      - username
      - public_email
      - name
      - state
      - locked
      - avatar_url
      - web_url
      description: API_Entities_UserBasic model
    API_Entities_MergeRequestApprovalState:
      type: object
      properties:
        approval_rules_overwritten:
          type: boolean
        rules:
          type: array
          items:
            $ref: '#/components/schemas/API_Entities_MergeRequestApprovalStateRule'
      required:
      - approval_rules_overwritten
      - rules
      description: API_Entities_MergeRequestApprovalState model
    API_Entities_LdapGroupLink:
      type: object
      properties:
        cn:
          type: string
          example: ldap-group-1
        group_access:
          type: integer
          format: int32
          example: 10
        provider:
          type: string
          example: ldapmain
        filter:
          type: string
          example: id >= 500
        member_role_id:
          type: integer
          format: int32
          example: 12
      required:
      - cn
      - group_access
      - provider
    API_Entities_MergeRequestApprovalStateRule:
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: 1
        name:
          type: string
          example: QA
        rule_type:
          type: string
          example: regular
        eligible_approvers:
          type: array
          items:
            $ref: '#/components/schemas/API_Entities_UserBasic'
        approvals_required:
          type: integer
          format: int32
          example: 2
        users:
          type: array
          items:
            $ref: '#/components/schemas/API_Entities_UserBasic'
        groups:
          type: array
          items:
            $ref: '#/components/schemas/API_Entities_Group'
        contains_hidden_groups:
          type: boolean
        report_type:
          type: string
        section:
          type: string
          example: Backend
        source_rule:
          $ref: '#/components/schemas/API_Entities_MergeRequestApprovalRule_SourceRule'
        overridden:
          type: boolean
        code_owner:
          type: boolean
        approved_by:
          type: array
          items:
            $ref: '#/components/schemas/API_Entities_UserBasic'
        approved:
          type: boolean
      required:
      - id
      - name
      - rule_type
      - eligible_approvers
      - approvals_required
      - users
      - groups
      - contains_hidden_groups
      - report_type
      - section
      - source_rule
      - overridden
      - code_owner
      - approved_by
      - approved
    API_Entities_ApprovalState:
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: 84
        iid:
          type: integer
          format: int32
          example: 14
        project_id:
          type: integer
          format: int32
          example: 4
        title:
          type: string
          example: Impedit et ut et dolores vero provident ullam est
        description:
          type: string
          example: Repellendus impedit et vel velit dignissimos.
        state:
          type: string
          example: closed
        created_at:
          type: string
          format: date-time
          example: '2022-08-17T12:46:35.053Z'
        updated_at:
          type: string
          format: date-time
          example: '2022-11-14T17:22:01.470Z'
        merge_status:
          type: string
          example: can_be_merged
        approved:
          type: boolean
        approvals_required:
          type: integer
          format: int32
          example: 2
        approvals_left:
          type: integer
          format: int32
          example: 2
        require_password_to_approve:
          type: boolean
        approved_by:
          type: array
          items:
            $ref: '#/components/schemas/API_Entities_Approvals'
        suggested_approvers:
          type: array
          items:
            $ref: '#/components/schemas/API_Entities_UserBasic'
        approvers:
          type: string
        approver_groups:
          type: string
        user_has_approved:
          type: boolean
        user_can_approve:
          type: boolean
        approval_rules_left:
          type: array
          items:
            $ref: '#/components/schemas/API_Entities_ApprovalRuleShort'
        has_approval_rules:
          type: boolean
        merge_request_approvers_available:
          type: boolean
        multiple_approval_rules_available:
          type: boolean
        invalid_approvers_rules:
          type: array
          items:
            $ref: '#/components/schemas/API_Entities_ApprovalRuleShort'
      required:
      - id
      - iid
      - project_id
      - title
      - description
      - state
      - created_at
      - updated_at
      - merge_status
      - approved
      - approvals_required
      - approvals_left
      - require_password_to_approve
      - approved_by
      - suggested_approvers
      - approvers
      - approver_groups
      - user_has_approved
      - user_can_approve
      - approval_rules_left
      - has_approval_rules
      - merge_request_approvers_available
      - multiple_approval_rules_available
      - invalid_approvers_rules
      description: API_Entities_ApprovalState model
    API_Entities_SamlGroupLink:
      type: object
      properties:
        name:
          type: string
          example: saml-group-1
        access_level:
          type: integer
          format: int32
          example: 40
        member_role_id:
          type: integer
          format: int32
          example: 12
        provider:
          type: string
          example: saml
      required:
      - name
      - access_level
      - provider
  securitySchemes:
    access_token_header:
      type: apiKey
      name: PRIVATE-TOKEN
      in: header
    access_token_query:
      type: apiKey
      name: private_token
      in: query