GitLab CI/CD issues API

Operations about issues

Operations 15

GET /api/v4/projects/{id}/issues/{issue_iid}/links/{issue_link_id} Get an issue link #
DELETE /api/v4/projects/{id}/issues/{issue_iid}/links/{issue_link_id} Delete an issue link #
POST /api/v4/projects/{id}/issues/{issue_iid}/time_estimate Set a time estimate for a issue #
POST /api/v4/projects/{id}/issues/{issue_iid}/reset_time_estimate Reset the time estimate for a project issue #
POST /api/v4/projects/{id}/issues/{issue_iid}/add_spent_time Add spent time for a issue #
POST /api/v4/projects/{id}/issues/{issue_iid}/reset_spent_time Reset spent time for a issue #
GET /api/v4/projects/{id}/issues/{issue_iid}/time_stats Get time tracking stats #
GET /api/v4/projects/{id}/issues/{issue_iid}/related_merge_requests #
GET /api/v4/projects/{id}/issues/{issue_iid}/participants #
GET /api/v4/projects/{id}/issues/{issue_iid}/user_agent_detail #
GET /api/v4/issues #
GET /api/v4/issues/{id} #
GET /api/v4/issues_statistics #

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-issues-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-issues-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: GitLab access_requests Issues API
  version: v4
  description: Operations related to access requests
servers:
- url: https://gitlab.com
tags:
- name: issues
  description: Operations about issues
paths:
  /api/v4/projects/{id}/issues/{issue_iid}/links:
    get:
      summary: List issue relations
      description: Get a list of a given issue’s linked issues, sorted by the relationship creation datetime (ascending).Issues are filtered according to the user authorizations.
      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: issue_iid
        description: The internal ID of a project’s issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: List issue relations
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/API_Entities_RelatedIssue'
        '401':
          description: Unauthorized
        '404':
          description: Not found
      tags:
      - issues
      operationId: getApiV4ProjectsIdIssuesIssueIidLinks
    post:
      summary: Create an issue link
      description: Creates a two-way relation between two issues.The user must be allowed to update both issues to succeed.
      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: issue_iid
        description: The internal ID of a project’s issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Create an issue link
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_IssueLink'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
      tags:
      - issues
      operationId: postApiV4ProjectsIdIssuesIssueIidLinks
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/postApiV4ProjectsIdIssuesIssueIidLinks'
        required: true
  /api/v4/projects/{id}/issues/{issue_iid}/links/{issue_link_id}:
    get:
      summary: Get an issue link
      description: Gets details about an issue link. This feature was introduced in GitLab 15.1.
      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: issue_iid
        description: The internal ID of a project’s issue
        required: true
        schema:
          type: integer
          format: int32
      - in: path
        name: issue_link_id
        description: ID of an issue relationship
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Get an issue link
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_IssueLink'
        '401':
          description: Unauthorized
        '404':
          description: Not found
      tags:
      - issues
      operationId: getApiV4ProjectsIdIssuesIssueIidLinksIssueLinkId
    delete:
      summary: Delete an issue link
      description: Deletes an issue link, thus removes the two-way relationship.
      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: issue_iid
        description: The internal ID of a project’s issue
        required: true
        schema:
          type: integer
          format: int32
      - in: path
        name: issue_link_id
        description: The ID of an issue relationship
        required: true
        schema:
          type: string
      responses:
        '401':
          description: Unauthorized
        '204':
          description: Delete an issue link
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_IssueLink'
        '404':
          description: Not found
      tags:
      - issues
      operationId: deleteApiV4ProjectsIdIssuesIssueIidLinksIssueLinkId
  /api/v4/projects/{id}/issues/{issue_iid}/time_estimate:
    post:
      summary: Set a time estimate for a issue
      description: Sets an estimated time of work for this 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 the issue.
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Set a time estimate for a issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_IssuableTimeStats'
        '401':
          description: Unauthorized
        '400':
          description: Bad request
        '404':
          description: Not found
      tags:
      - issues
      operationId: postApiV4ProjectsIdIssuesIssueIidTimeEstimate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/postApiV4ProjectsIdIssuesIssueIidTimeEstimate'
        required: true
  /api/v4/projects/{id}/issues/{issue_iid}/reset_time_estimate:
    post:
      summary: Reset the time estimate for a project issue
      description: Resets the estimated time for this issue to 0 seconds.
      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 the issue.
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Reset the time estimate for a project issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_IssuableTimeStats'
        '401':
          description: Unauthorized
        '404':
          description: Not found
      tags:
      - issues
      operationId: postApiV4ProjectsIdIssuesIssueIidResetTimeEstimate
  /api/v4/projects/{id}/issues/{issue_iid}/add_spent_time:
    post:
      summary: Add spent time for a issue
      description: Adds spent time for this 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 the issue.
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Add spent time for a issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_IssuableTimeStats'
        '401':
          description: Unauthorized
        '404':
          description: Not found
      tags:
      - issues
      operationId: postApiV4ProjectsIdIssuesIssueIidAddSpentTime
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/postApiV4ProjectsIdIssuesIssueIidAddSpentTime'
        required: true
  /api/v4/projects/{id}/issues/{issue_iid}/reset_spent_time:
    post:
      summary: Reset spent time for a issue
      description: Resets the total spent time for this issue to 0 seconds.
      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 the issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '201':
          description: Reset spent time for a issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_IssuableTimeStats'
        '401':
          description: Unauthorized
        '404':
          description: Not found
      tags:
      - issues
      operationId: postApiV4ProjectsIdIssuesIssueIidResetSpentTime
  /api/v4/projects/{id}/issues/{issue_iid}/time_stats:
    get:
      summary: Get time tracking stats
      description: Get time tracking stats
      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 the issue
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Get time tracking stats
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_IssuableTimeStats'
        '401':
          description: Unauthorized
        '404':
          description: Not found
      tags:
      - issues
      operationId: getApiV4ProjectsIdIssuesIssueIidTimeStats
  /api/v4/projects/{id}/issues/{issue_iid}/related_merge_requests:
    get:
      description: List merge requests that are related to the 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 that are related to the issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_MergeRequestBasic'
      tags:
      - issues
      operationId: getApiV4ProjectsIdIssuesIssueIidRelatedMergeRequests
  /api/v4/projects/{id}/issues/{issue_iid}/participants:
    get:
      description: List participants for an 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 participants for an issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_UserBasic'
      tags:
      - issues
      operationId: getApiV4ProjectsIdIssuesIssueIidParticipants
  /api/v4/projects/{id}/issues/{issue_iid}/user_agent_detail:
    get:
      description: Get the user agent details for an 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 the user agent details for an issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_UserAgentDetail'
      tags:
      - issues
      operationId: getApiV4ProjectsIdIssuesIssueIidUserAgentDetail
  /api/v4/issues:
    get:
      description: Get currently authenticated user's issues
      parameters:
      - 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
          default: created_by_me
      - 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: non_archived
        description: Return issues from non archived projects
        required: false
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Get currently authenticated user's issues
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Issue'
      tags:
      - issues
      operationId: getApiV4Issues
  /api/v4/issues/{id}:
    get:
      description: Get specified issue (admin only)
      parameters:
      - in: path
        name: id
        description: The ID of the Issue
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Get specified issue (admin only)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/API_Entities_Issue'
      tags:
      - issues
      operationId: getApiV4IssuesId
  /api/v4/issues_statistics:
    get:
      description: Get currently authenticated user's issues statistics
      parameters:
      - 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
          - all
          default: created_by_me
      - 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 currently authenticated user's issues statistics
      tags:
      - issues
      operationId: getApiV4IssuesStatistics
components:
  schemas:
    API_Entities_IssuableReferences:
      type: object
      properties:
        short:
          type: string
          example: '&6'
        relative:
          type: string
          example: '&6'
        full:
          type: string
          example: test&6
      required:
      - short
      - relative
      - full
    EpicBaseEntity:
      type: object
      properties:
        id:
          type: string
        iid:
          type: string
        title:
          type: string
        url:
          type: string
        group_id:
          type: string
        human_readable_end_date:
          type: string
        human_readable_timestamp:
          type: string
      required:
      - id
      - iid
      - title
      - url
      - group_id
    API_Entities_IssueLink:
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: 1
        source_issue:
          $ref: '#/components/schemas/API_Entities_IssueBasic'
        target_issue:
          $ref: '#/components/schemas/API_Entities_IssueBasic'
        link_type:
          type: string
          example: relates_to
      required:
      - id
      - source_issue
      - target_issue
      - link_type
      description: API_Entities_IssueLink model
    API_Entities_IssuableTimeStats:
      type: object
      properties:
        time_estimate:
          type: integer
          format: int32
          example: 12600
     

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