GitLab CI/CD projects API

Operations related to projects

Operations 73

GET /api/v4/projects/{id}/runners List project's runners #
POST /api/v4/projects/{id}/runners Assign a runner to project #
DELETE /api/v4/projects/{id}/runners/{runner_id} Unassign a project runner from the project #
POST /api/v4/projects/{id}/runners/reset_registration_token Reset the runner registration token for a project #
GET /api/v4/projects/{id}/issues #
POST /api/v4/projects/{id}/issues #
GET /api/v4/projects/{id}/issues_statistics #
GET /api/v4/projects/{id}/issues/{issue_iid} #
PUT /api/v4/projects/{id}/issues/{issue_iid} #
DELETE /api/v4/projects/{id}/issues/{issue_iid} #
PUT /api/v4/projects/{id}/issues/{issue_iid}/reorder #
POST /api/v4/projects/{id}/issues/{issue_iid}/move #
POST /api/v4/projects/{id}/issues/{issue_iid}/clone #
GET /api/v4/projects/{id}/issues/{issue_iid}/closed_by #
POST /api/v4/projects/{id}/uploads/authorize Workhorse authorize the file upload #
POST /api/v4/projects/{id}/uploads #
GET /api/v4/projects/{id}/uploads #
GET /api/v4/projects/{id}/uploads/{upload_id} #
DELETE /api/v4/projects/{id}/uploads/{upload_id} #
GET /api/v4/projects/{id}/uploads/{secret}/{filename} #
DELETE /api/v4/projects/{id}/uploads/{secret}/{filename} #
POST /api/v4/projects/{id}/create_ci_config Create merge request for missing ci config in project #
GET /api/v4/projects/{id}/registry/protection/repository/rules #
POST /api/v4/projects/{id}/registry/protection/repository/rules #
PATCH /api/v4/projects/{id}/registry/protection/repository/rules/{protection_rule_id} #
DELETE /api/v4/projects/{id}/registry/protection/repository/rules/{protection_rule_id} #
GET /api/v4/projects/{id}/registry/protection/tag/rules Gets a list of container protection tag rules for a project. #
POST /api/v4/projects/{id}/registry/protection/tag/rules Create a container protection tag rule for a project. 5 rule limit per project. #
PATCH /api/v4/projects/{id}/registry/protection/tag/rules/{protection_rule_id} Update a container protection tag rule for a project. #
DELETE /api/v4/projects/{id}/registry/protection/tag/rules/{protection_rule_id} Delete container protection tag rule #
GET /api/v4/projects/{id}/packages/protection/rules #
POST /api/v4/projects/{id}/packages/protection/rules #
PATCH /api/v4/projects/{id}/packages/protection/rules/{package_protection_rule_id} #
DELETE /api/v4/projects/{id}/packages/protection/rules/{package_protection_rule_id} #
GET /api/v4/projects/{id}/statistics #
POST /api/v4/projects/{id}/restore #
GET /api/v4/projects #
POST /api/v4/projects #
POST /api/v4/projects/user/{user_id} #
GET /api/v4/projects/{id}/share_locations #
GET /api/v4/projects/{id} #
PUT /api/v4/projects/{id} #
DELETE /api/v4/projects/{id} #
POST /api/v4/projects/{id}/fork #
DELETE /api/v4/projects/{id}/fork #
GET /api/v4/projects/{id}/forks #
GET /api/v4/projects/{id}/pages_access #
POST /api/v4/projects/{id}/archive #
POST /api/v4/projects/{id}/unarchive #
POST /api/v4/projects/{id}/star #
POST /api/v4/projects/{id}/unstar #
GET /api/v4/projects/{id}/starrers #
GET /api/v4/projects/{id}/languages #
POST /api/v4/projects/{id}/fork/{forked_from_id} #
POST /api/v4/projects/{id}/share #
DELETE /api/v4/projects/{id}/share/{group_id} #
POST /api/v4/projects/{id}/import_project_members/{project_id} Import members from another project #
GET /api/v4/projects/{id}/users #
GET /api/v4/projects/{id}/groups #
GET /api/v4/projects/{id}/invited_groups #
POST /api/v4/projects/{id}/housekeeping Start the housekeeping task for a project #
POST /api/v4/projects/{id}/repository_size Start a task to recalculate repository size for a project #
PUT /api/v4/projects/{id}/transfer #
GET /api/v4/projects/{id}/transfer_locations #
GET /api/v4/projects/{id}/storage #
GET /api/v4/projects/{id}/audit_events #
GET /api/v4/projects/{id}/audit_events/{audit_event_id} #
GET /api/v4/projects/{id}/(-/)search Search on GitLab within a project #
GET /api/v4/projects/{id}/terraform/state_protection_rules List all Terraform state protection rules for a project #
GET /api/v4/runners/{id}/projects List runner's projects #
GET /api/v4/users/{user_id}/projects #
GET /api/v4/users/{user_id}/contributed_projects #
GET /api/v4/users/{user_id}/starred_projects #

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-projects-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-projects-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: GitLab access_requests Projects API
  version: v4
  description: Operations related to access requests
servers:
- url: https://gitlab.com
tags:
- name: projects
  description: Operations related to projects
paths:
  /api/v4/projects/{id}/runners:
    get:
      summary: List project's runners
      description: List all runners available in the project, including from ancestor groups and any allowed shared runners.
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project owned by the authenticated user
        required: true
        schema:
          type: string
      - in: query
        name: scope
        description: 'Deprecated: Use `type` or `status` instead. The scope of runners to return'
        required: false
        schema:
          type: string
          enum:
          - specific
          - shared
          - instance_type
          - group_type
          - project_type
          - active
          - paused
          - online
          - offline
          - never_contacted
          - stale
      - in: query
        name: type
        description: The type of runners to return
        required: false
        schema:
          type: string
          enum:
          - instance_type
          - group_type
          - project_type
      - in: query
        name: paused
        description: Whether to include only runners that are accepting or ignoring new jobs
        required: false
        schema:
          type: boolean
      - in: query
        name: status
        description: The status of runners to return
        required: false
        schema:
          type: string
          enum:
          - active
          - paused
          - online
          - offline
          - never_contacted
          - stale
      - in: query
        name: tag_list
        description: A list of runner tags
        required: false
        example: '[''macos'', ''shell'']'
        schema:
          type: array
          items:
            type: string
      - in: query
        name: version_prefix
        description: The version prefix of runners to return
        required: false
        example: '''15.1.'' or ''16.'''
        schema:
          type: string
      - in: query
        name: page
        description: Current page number
        required: false
        example: 1
        schema:
          type: integer
          format: int32
          default: 1
      - in: query
        name: per_page
        description: Number of items per page
        required: false
        example: 20
        schema:
          type: integer
          format: int32
          default: 20
      responses:
        '200':
          description: Get runners available for project
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Ci_Runner'
        '400':
          description: Scope contains invalid value
        '403':
          description: No access granted
      tags:
      - projects
      operationId: getApiV4ProjectsIdRunners
    post:
      summary: Assign a runner to project
      description: Assign an available project runner to the project.
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project owned by the authenticated user
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Assign a runner to project
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Ci_Runner'
        '400':
          description: Bad Request
        '403':
          description: No access granted
        '404':
          description: Runner not found
      tags:
      - projects
      operationId: postApiV4ProjectsIdRunners
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/postApiV4ProjectsIdRunners'
        required: true
  /api/v4/projects/{id}/runners/{runner_id}:
    delete:
      summary: Unassign a project runner from the project
      description: It is not possible to unassign a runner from the owner project. If so, an error is returned. Use the call to delete a runner instead.
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project owned by the authenticated user
        required: true
        schema:
          type: string
      - in: path
        name: runner_id
        description: The ID of a runner
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '400':
          description: Bad Request
        '204':
          description: Unassign a runner from project
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Ci_Runner'
        '403':
          description: You cannot unassign a runner from the owner project. Delete the runner instead
        '404':
          description: Runner not found
        '412':
          description: Precondition Failed
      tags:
      - projects
      operationId: deleteApiV4ProjectsIdRunnersRunnerId
  /api/v4/projects/{id}/runners/reset_registration_token:
    post:
      summary: Reset the runner registration token for a project
      description: Reset runner registration token
      parameters:
      - in: path
        name: id
        description: The ID of a project
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Reset runner registration token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Ci_ResetTokenResult'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Project Not Found
      tags:
      - projects
      operationId: postApiV4ProjectsIdRunnersResetRegistrationToken
  /api/v4/projects/{id}/issues:
    get:
      description: Get a list of project issues
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: query
        name: with_labels_details
        description: Return titles of labels and other details
        required: false
        schema:
          type: boolean
          default: false
      - in: query
        name: state
        description: Return opened, closed, or all issues
        required: false
        schema:
          type: string
          enum:
          - opened
          - closed
          - all
          default: all
      - in: query
        name: closed_by_id
        description: Return issues which were closed by the user with the given ID.
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: order_by
        description: Return issues ordered by `created_at`, `due_date`, `label_priority`, `milestone_due`, `popularity`, `priority`, `relative_position`, `title`, or `updated_at` fields.
        required: false
        schema:
          type: string
          enum:
          - created_at
          - due_date
          - label_priority
          - milestone_due
          - popularity
          - priority
          - relative_position
          - title
          - updated_at
          - weight
          default: created_at
      - in: query
        name: sort
        description: Return issues sorted in `asc` or `desc` order.
        required: false
        schema:
          type: string
          enum:
          - asc
          - desc
          default: desc
      - in: query
        name: due_date
        description: 'Return issues that have no due date (`0`), or whose due date is this week, this month, between two weeks ago and next month, or which are overdue. Accepts: `overdue`, `week`, `month`, `next_month_and_previous_two_weeks`, `0`'
        required: false
        schema:
          type: string
          enum:
          - '0'
          - any
          - today
          - tomorrow
          - overdue
          - week
          - month
          - next_month_and_previous_two_weeks
          - ''
      - in: query
        name: issue_type
        description: 'The type of the issue. Accepts: issue, incident, test_case, requirement, task, ticket'
        required: false
        schema:
          type: string
          enum:
          - issue
          - incident
          - test_case
          - requirement
          - task
          - ticket
      - in: query
        name: labels
        description: Comma-separated list of label names
        required: false
        schema:
          type: array
          items:
            type: string
      - in: query
        name: milestone
        description: Milestone title
        required: false
        schema:
          type: string
      - in: query
        name: milestone_id
        description: Return issues assigned to milestones with the specified timebox value ("Any", "None", "Upcoming" or "Started")
        required: false
        schema:
          type: string
          enum:
          - Any
          - None
          - Upcoming
          - Started
      - in: query
        name: iids
        description: The IID array of issues
        required: false
        schema:
          type: array
          items:
            type: integer
            format: int32
      - in: query
        name: search
        description: Search issues for text present in the title, description, or any combination of these
        required: false
        schema:
          type: string
      - in: query
        name: in
        description: '`title`, `description`, or a string joining them with comma'
        required: false
        schema:
          type: string
      - in: query
        name: author_id
        description: Return issues which are authored by the user with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: author_username
        description: Return issues which are authored by the user with the given username
        required: false
        schema:
          type: string
      - in: query
        name: assignee_id
        description: Return issues which are assigned to the user with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: assignee_username
        description: Return issues which are assigned to the user with the given username
        required: false
        schema:
          type: array
          items:
            type: string
      - in: query
        name: created_after
        description: Return issues created after the specified time
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: created_before
        description: Return issues created before the specified time
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: updated_after
        description: Return issues updated after the specified time
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: updated_before
        description: Return issues updated before the specified time
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: not[labels]
        description: Comma-separated list of label names
        required: false
        schema:
          type: array
          items:
            type: string
      - in: query
        name: not[milestone]
        description: Milestone title
        required: false
        schema:
          type: string
      - in: query
        name: not[milestone_id]
        description: Return issues assigned to milestones without the specified timebox value ("Any", "None", "Upcoming" or "Started")
        required: false
        schema:
          type: string
          enum:
          - Any
          - None
          - Upcoming
          - Started
      - in: query
        name: not[iids]
        description: The IID array of issues
        required: false
        schema:
          type: array
          items:
            type: integer
            format: int32
      - in: query
        name: not[author_id]
        description: Return issues which are not authored by the user with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: not[author_username]
        description: Return issues which are not authored by the user with the given username
        required: false
        schema:
          type: string
      - in: query
        name: not[assignee_id]
        description: Return issues which are not assigned to the user with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: not[assignee_username]
        description: Return issues which are not assigned to the user with the given username
        required: false
        schema:
          type: array
          items:
            type: string
      - in: query
        name: not[weight]
        description: Return issues without the specified weight
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: not[iteration_id]
        description: Return issues which are not assigned to the iteration with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: not[iteration_title]
        description: Return issues which are not assigned to the iteration with the given title
        required: false
        schema:
          type: string
      - in: query
        name: scope
        description: 'Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`'
        required: false
        schema:
          type: string
          enum:
          - created-by-me
          - assigned-to-me
          - created_by_me
          - assigned_to_me
          - all
      - in: query
        name: my_reaction_emoji
        description: Return issues reacted by the authenticated user by the given emoji
        required: false
        schema:
          type: string
      - in: query
        name: confidential
        description: Filter confidential or public issues
        required: false
        schema:
          type: boolean
      - in: query
        name: weight
        description: The weight of the issue
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: epic_id
        description: The ID of an epic associated with the issues
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: health_status
        description: 'The health status of the issue. Must be one of: on_track, needs_attention, at_risk, none, any'
        required: false
        schema:
          type: string
          enum:
          - on_track
          - needs_attention
          - at_risk
          - none
          - any
      - in: query
        name: iteration_id
        description: Return issues which are assigned to the iteration with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: iteration_title
        description: Return issues which are assigned to the iteration with the given title
        required: false
        schema:
          type: string
      - in: query
        name: page
        description: Current page number
        required: false
        example: 1
        schema:
          type: integer
          format: int32
          default: 1
      - in: query
        name: per_page
        description: Number of items per page
        required: false
        example: 20
        schema:
          type: integer
          format: int32
          default: 20
      - in: query
        name: cursor
        description: Cursor for obtaining the next set of records
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Get a list of project issues
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Issue'
      tags:
      - projects
      operationId: getApiV4ProjectsIdIssues
    post:
      description: Create a new project issue
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Create a new project issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Issue'
      tags:
      - projects
      operationId: postApiV4ProjectsIdIssues
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/postApiV4ProjectsIdIssues'
        required: true
  /api/v4/projects/{id}/issues_statistics:
    get:
      description: Get statistics for the list of project issues
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: query
        name: labels
        description: Comma-separated list of label names
        required: false
        schema:
          type: array
          items:
            type: string
      - in: query
        name: milestone
        description: Milestone title
        required: false
        schema:
          type: string
      - in: query
        name: milestone_id
        description: Return issues assigned to milestones with the specified timebox value ("Any", "None", "Upcoming" or "Started")
        required: false
        schema:
          type: string
          enum:
          - Any
          - None
          - Upcoming
          - Started
      - in: query
        name: iids
        description: The IID array of issues
        required: false
        schema:
          type: array
          items:
            type: integer
            format: int32
      - in: query
        name: search
        description: Search issues for text present in the title, description, or any combination of these
        required: false
        schema:
          type: string
      - in: query
        name: in
        description: '`title`, `description`, or a string joining them with comma'
        required: false
        schema:
          type: string
      - in: query
        name: author_id
        description: Return issues which are authored by the user with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: author_username
        description: Return issues which are authored by the user with the given username
        required: false
        schema:
          type: string
      - in: query
        name: assignee_id
        description: Return issues which are assigned to the user with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: assignee_username
        description: Return issues which are assigned to the user with the given username
        required: false
        schema:
          type: array
          items:
            type: string
      - in: query
        name: created_after
        description: Return issues created after the specified time
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: created_before
        description: Return issues created before the specified time
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: updated_after
        description: Return issues updated after the specified time
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: updated_before
        description: Return issues updated before the specified time
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: not[labels]
        description: Comma-separated list of label names
        required: false
        schema:
          type: array
          items:
            type: string
      - in: query
        name: not[milestone]
        description: Milestone title
        required: false
        schema:
          type: string
      - in: query
        name: not[milestone_id]
        description: Return issues assigned to milestones without the specified timebox value ("Any", "None", "Upcoming" or "Started")
        required: false
        schema:
          type: string
          enum:
          - Any
          - None
          - Upcoming
          - Started
      - in: query
        name: not[iids]
        description: The IID array of issues
        required: false
        schema:
          type: array
          items:
            type: integer
            format: int32
      - in: query
        name: not[author_id]
        description: Return issues which are not authored by the user with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: not[author_username]
        description: Return issues which are not authored by the user with the given username
        required: false
        schema:
          type: string
      - in: query
        name: not[assignee_id]
        description: Return issues which are not assigned to the user with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: not[assignee_username]
        description: Return issues which are not assigned to the user with the given username
        required: false
        schema:
          type: array
          items:
            type: string
      - in: query
        name: not[weight]
        description: Return issues without the specified weight
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: not[iteration_id]
        description: Return issues which are not assigned to the iteration with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: not[iteration_title]
        description: Return issues which are not assigned to the iteration with the given title
        required: false
        schema:
          type: string
      - in: query
        name: scope
        description: 'Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`'
        required: false
        schema:
          type: string
          enum:
          - created-by-me
          - assigned-to-me
          - created_by_me
          - assigned_to_me
          - all
      - in: query
        name: my_reaction_emoji
        description: Return issues reacted by the authenticated user by the given emoji
        required: false
        schema:
          type: string
      - in: query
        name: confidential
        description: Filter confidential or public issues
        required: false
        schema:
          type: boolean
      - in: query
        name: weight
        description: The weight of the issue
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: epic_id
        description: The ID of an epic associated with the issues
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: health_status
        description: 'The health status of the issue. Must be one of: on_track, needs_attention, at_risk, none, any'
        required: false
        schema:
          type: string
          enum:
          - on_track
          - needs_attention
          - at_risk
          - none
          - any
      - in: query
        name: iteration_id
        description: Return issues which are assigned to the iteration with the given ID
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: iteration_title
        description: Return issues which are assigned to the iteration with the given title
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Get statistics for the list of project issues
      tags:
      - projects
      operationId: getApiV4ProjectsIdIssuesStatistics
  /api/v4/projects/{id}/issues/{issue_iid}:
    get:
      description: Get a single project issue
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: path
        name: issue_iid
        description: The internal ID of a project issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Get a single project issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Issue'
      tags:
      - projects
      operationId: getApiV4ProjectsIdIssuesIssueIid
    put:
      description: Update an existing issue
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: path
        name: issue_iid
        description: The internal ID of a project issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Update an existing issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Issue'
      tags:
      - projects
      operationId: putApiV4ProjectsIdIssuesIssueIid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/putApiV4ProjectsIdIssuesIssueIid'
        required: true
    delete:
      description: Delete a project issue
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: path
        name: issue_iid
        description: The internal ID of a project issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '204':
          description: Delete a project issue
      tags:
      - projects
      operationId: deleteApiV4ProjectsIdIssuesIssueIid
  /api/v4/projects/{id}/issues/{issue_iid}/reorder:
    put:
      description: Reorder an existing issue
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: path
        name: issue_iid
        description: The internal ID of a project issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Reorder an existing issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Issue'
      tags:
      - projects
      operationId: putApiV4ProjectsIdIssuesIssueIidReorder
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/putApiV4ProjectsIdIssuesIssueIidReorder'
        required: true
  /api/v4/projects/{id}/issues/{issue_iid}/move:
    post:
      description: Move an existing issue
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: path
        name: issue_iid
        description: The internal ID of a project issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Move an existing issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Issue'
      tags:
      - projects
      operationId: postApiV4ProjectsIdIssuesIssueIidMove
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/postApiV4ProjectsIdIssuesIssueIidMove'
        required: true
  /api/v4/projects/{id}/issues/{issue_iid}/clone:
    post:
      description: Clone an existing issue
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: path
        name: issue_iid
        description: The internal ID of a project issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Clone an existing issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Issue'
      tags:
      - projects
      operationId: postApiV4ProjectsIdIssuesIssueIidClone
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/postApiV4ProjectsIdIssuesIssueIidClone'
        required: true
  /api/v4/projects/{id}/issues/{issue_iid}/closed_by:
    get:
      description: List merge requests closing issue
      parameters:
      - in: path
        name: id
        description: The ID or URL-encoded path of the project
        required: true
        schema:
          type: string
      - in: path
        name: issue_iid
        description: The internal ID of a project issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: List merge requests closing issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_MergeRequestBasic'
      tags:
      - projects
      operationId: getApiV4ProjectsIdIssuesIssueIidClosedBy
  /api/v4/projects/{id}/uploads/authorize:
    post:
      summary: Workhorse authorize the file upload
      description: This feature was introduced in GitLab 13.11
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Workhorse authorize the file upload
        '404':
          description: Not found
      tags:
      - projects
      operationId: postApiV4ProjectsIdUploadsAuthorize
  /api/v4/projects/{id}/uploads:
    post:
      description: Upload a file
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Upload a file
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_ProjectUpload'
        '404':
          description: Not found
      tags:
      - projects
      operationId: postApiV4ProjectsIdUploads
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/postApiV4ProjectsIdUploads'
        required: true
    get:
      description: Get the list of uploads of a project
      parameters:
      - in: query
        name: page
        description: Current page number
        required: false
        ex

# --- truncated at 32 KB (257 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/gitlab-ci/refs/heads/main/openapi/gitlab-ci-projects-api-openapi.yml