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: 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