GitLab CI/CD · Capability

GitLab API — issues

GitLab API — issues. 15 operations. Lead operation: Add spent time for a issue. Self-contained Naftiko capability covering one Gitlab Ci business surface.

Run with Naftiko Gitlab Ciissues

What You Can Do

GET
Getapiv4issues — Get currently authenticated user's issues
/v1/api/v4/issues
GET
Getapiv4issuesid — Get specified issue (admin only)
/v1/api/v4/issues/{id}
GET
Getapiv4issuesstatistics — Get currently authenticated user's issues statistics
/v1/api/v4/issues-statistics
POST
Postapiv4projectsidissuesissueiidaddspenttime — Add spent time for a issue
/v1/api/v4/projects/{id}/issues/{issue-iid}/add-spent-time
GET
Getapiv4projectsidissuesissueiidlinks — List issue relations
/v1/api/v4/projects/{id}/issues/{issue-iid}/links
POST
Postapiv4projectsidissuesissueiidlinks — Create an issue link
/v1/api/v4/projects/{id}/issues/{issue-iid}/links
GET
Getapiv4projectsidissuesissueiidlinksissuelinkid — Get an issue link
/v1/api/v4/projects/{id}/issues/{issue-iid}/links/{issue-link-id}
DELETE
Deleteapiv4projectsidissuesissueiidlinksissuelinkid — Delete an issue link
/v1/api/v4/projects/{id}/issues/{issue-iid}/links/{issue-link-id}
GET
Getapiv4projectsidissuesissueiidparticipants — List participants for an issue
/v1/api/v4/projects/{id}/issues/{issue-iid}/participants
GET
Getapiv4projectsidissuesissueiidrelatedmergerequests — List merge requests that are related to the issue
/v1/api/v4/projects/{id}/issues/{issue-iid}/related-merge-requests
POST
Postapiv4projectsidissuesissueiidresetspenttime — Reset spent time for a issue
/v1/api/v4/projects/{id}/issues/{issue-iid}/reset-spent-time
POST
Postapiv4projectsidissuesissueiidresettimeestimate — Reset the time estimate for a project issue
/v1/api/v4/projects/{id}/issues/{issue-iid}/reset-time-estimate
POST
Postapiv4projectsidissuesissueiidtimeestimate — Set a time estimate for a issue
/v1/api/v4/projects/{id}/issues/{issue-iid}/time-estimate
GET
Getapiv4projectsidissuesissueiidtimestats — Get time tracking stats
/v1/api/v4/projects/{id}/issues/{issue-iid}/time-stats
GET
Getapiv4projectsidissuesissueiiduseragentdetail — Get the user agent details for an issue
/v1/api/v4/projects/{id}/issues/{issue-iid}/user-agent-detail

MCP Tools

get-currently-authenticated-user-s-issues

Get currently authenticated user's issues

read-only idempotent
get-specified-issue-admin-only

Get specified issue (admin only)

read-only idempotent
get-currently-authenticated-user-s-issues-2

Get currently authenticated user's issues statistics

read-only idempotent
add-spent-time-issue

Add spent time for a issue

list-issue-relations

List issue relations

read-only idempotent
create-issue-link

Create an issue link

get-issue-link

Get an issue link

read-only idempotent
delete-issue-link

Delete an issue link

idempotent
list-participants-issue

List participants for an issue

read-only idempotent
list-merge-requests-that-are

List merge requests that are related to the issue

read-only idempotent
reset-spent-time-issue

Reset spent time for a issue

reset-time-estimate-project-issue

Reset the time estimate for a project issue

set-time-estimate-issue

Set a time estimate for a issue

get-time-tracking-stats

Get time tracking stats

read-only idempotent
get-user-agent-details-issue

Get the user agent details for an issue

read-only idempotent

Capability Spec

gitlab-ci-issues.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: GitLab API — issues
  description: 'GitLab API — issues. 15 operations. Lead operation: Add spent time for a issue. Self-contained Naftiko capability
    covering one Gitlab Ci business surface.'
  tags:
  - Gitlab Ci
  - issues
  created: '2026-05-19'
  modified: '2026-05-19'
binds:
- namespace: env
  keys:
    GITLAB_CI_API_KEY: GITLAB_CI_API_KEY
capability:
  consumes:
  - type: http
    namespace: gitlab-ci-issues
    baseUri: https://gitlab.com
    description: GitLab API — issues business capability. Self-contained, no shared references.
    resources:
    - name: api-v4-issues
      path: /api/v4/issues
      operations:
      - name: getapiv4issues
        method: GET
        description: Get currently authenticated user's issues
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: with_labels_details
          in: query
          type: boolean
          description: Return titles of labels and other details
        - name: state
          in: query
          type: string
          description: Return opened, closed, or all issues
        - name: closed_by_id
          in: query
          type: integer
          description: Return issues which were closed by the user with the given ID.
        - name: order_by
          in: query
          type: string
          description: Return issues ordered by `created_at`, `due_date`, `label_priority`, `milestone_due`, `popularity`,
            `priority`, `relative_position`, `title`, or `updated_at` fi
        - name: sort
          in: query
          type: string
          description: Return issues sorted in `asc` or `desc` order.
        - name: due_date
          in: query
          type: string
          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: `ove'
        - name: issue_type
          in: query
          type: string
          description: 'The type of the issue. Accepts: issue, incident, test_case, requirement, task, ticket'
        - name: labels
          in: query
          type: array
          description: Comma-separated list of label names
        - name: milestone
          in: query
          type: string
          description: Milestone title
        - name: milestone_id
          in: query
          type: string
          description: Return issues assigned to milestones with the specified timebox value ("Any", "None", "Upcoming" or
            "Started")
        - name: iids
          in: query
          type: array
          description: The IID array of issues
        - name: search
          in: query
          type: string
          description: Search issues for text present in the title, description, or any combination of these
        - name: in
          in: query
          type: string
          description: '`title`, `description`, or a string joining them with comma'
        - name: author_id
          in: query
          type: integer
          description: Return issues which are authored by the user with the given ID
        - name: author_username
          in: query
          type: string
          description: Return issues which are authored by the user with the given username
        - name: assignee_id
          in: query
          type: integer
          description: Return issues which are assigned to the user with the given ID
        - name: assignee_username
          in: query
          type: array
          description: Return issues which are assigned to the user with the given username
        - name: created_after
          in: query
          type: string
          description: Return issues created after the specified time
        - name: created_before
          in: query
          type: string
          description: Return issues created before the specified time
        - name: updated_after
          in: query
          type: string
          description: Return issues updated after the specified time
        - name: updated_before
          in: query
          type: string
          description: Return issues updated before the specified time
        - name: not[labels]
          in: query
          type: array
          description: Comma-separated list of label names
        - name: not[milestone]
          in: query
          type: string
          description: Milestone title
        - name: not[milestone_id]
          in: query
          type: string
          description: Return issues assigned to milestones without the specified timebox value ("Any", "None", "Upcoming"
            or "Started")
        - name: not[iids]
          in: query
          type: array
          description: The IID array of issues
        - name: not[author_id]
          in: query
          type: integer
          description: Return issues which are not authored by the user with the given ID
        - name: not[author_username]
          in: query
          type: string
          description: Return issues which are not authored by the user with the given username
        - name: not[assignee_id]
          in: query
          type: integer
          description: Return issues which are not assigned to the user with the given ID
        - name: not[assignee_username]
          in: query
          type: array
          description: Return issues which are not assigned to the user with the given username
        - name: not[weight]
          in: query
          type: integer
          description: Return issues without the specified weight
        - name: not[iteration_id]
          in: query
          type: integer
          description: Return issues which are not assigned to the iteration with the given ID
        - name: not[iteration_title]
          in: query
          type: string
          description: Return issues which are not assigned to the iteration with the given title
        - name: scope
          in: query
          type: string
          description: 'Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`'
        - name: my_reaction_emoji
          in: query
          type: string
          description: Return issues reacted by the authenticated user by the given emoji
        - name: confidential
          in: query
          type: boolean
          description: Filter confidential or public issues
        - name: weight
          in: query
          type: integer
          description: The weight of the issue
        - name: epic_id
          in: query
          type: integer
          description: The ID of an epic associated with the issues
        - name: health_status
          in: query
          type: string
          description: 'The health status of the issue. Must be one of: on_track, needs_attention, at_risk, none, any'
        - name: iteration_id
          in: query
          type: integer
          description: Return issues which are assigned to the iteration with the given ID
        - name: iteration_title
          in: query
          type: string
          description: Return issues which are assigned to the iteration with the given title
        - name: page
          in: query
          type: integer
          description: Current page number
        - name: per_page
          in: query
          type: integer
          description: Number of items per page
        - name: non_archived
          in: query
          type: boolean
          description: Return issues from non archived projects
    - name: api-v4-issues-id
      path: /api/v4/issues/{id}
      operations:
      - name: getapiv4issuesid
        method: GET
        description: Get specified issue (admin only)
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID of the Issue
          required: true
    - name: api-v4-issues_statistics
      path: /api/v4/issues_statistics
      operations:
      - name: getapiv4issuesstatistics
        method: GET
        description: Get currently authenticated user's issues statistics
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: labels
          in: query
          type: array
          description: Comma-separated list of label names
        - name: milestone
          in: query
          type: string
          description: Milestone title
        - name: milestone_id
          in: query
          type: string
          description: Return issues assigned to milestones with the specified timebox value ("Any", "None", "Upcoming" or
            "Started")
        - name: iids
          in: query
          type: array
          description: The IID array of issues
        - name: search
          in: query
          type: string
          description: Search issues for text present in the title, description, or any combination of these
        - name: in
          in: query
          type: string
          description: '`title`, `description`, or a string joining them with comma'
        - name: author_id
          in: query
          type: integer
          description: Return issues which are authored by the user with the given ID
        - name: author_username
          in: query
          type: string
          description: Return issues which are authored by the user with the given username
        - name: assignee_id
          in: query
          type: integer
          description: Return issues which are assigned to the user with the given ID
        - name: assignee_username
          in: query
          type: array
          description: Return issues which are assigned to the user with the given username
        - name: created_after
          in: query
          type: string
          description: Return issues created after the specified time
        - name: created_before
          in: query
          type: string
          description: Return issues created before the specified time
        - name: updated_after
          in: query
          type: string
          description: Return issues updated after the specified time
        - name: updated_before
          in: query
          type: string
          description: Return issues updated before the specified time
        - name: not[labels]
          in: query
          type: array
          description: Comma-separated list of label names
        - name: not[milestone]
          in: query
          type: string
          description: Milestone title
        - name: not[milestone_id]
          in: query
          type: string
          description: Return issues assigned to milestones without the specified timebox value ("Any", "None", "Upcoming"
            or "Started")
        - name: not[iids]
          in: query
          type: array
          description: The IID array of issues
        - name: not[author_id]
          in: query
          type: integer
          description: Return issues which are not authored by the user with the given ID
        - name: not[author_username]
          in: query
          type: string
          description: Return issues which are not authored by the user with the given username
        - name: not[assignee_id]
          in: query
          type: integer
          description: Return issues which are not assigned to the user with the given ID
        - name: not[assignee_username]
          in: query
          type: array
          description: Return issues which are not assigned to the user with the given username
        - name: not[weight]
          in: query
          type: integer
          description: Return issues without the specified weight
        - name: not[iteration_id]
          in: query
          type: integer
          description: Return issues which are not assigned to the iteration with the given ID
        - name: not[iteration_title]
          in: query
          type: string
          description: Return issues which are not assigned to the iteration with the given title
        - name: scope
          in: query
          type: string
          description: 'Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`'
        - name: my_reaction_emoji
          in: query
          type: string
          description: Return issues reacted by the authenticated user by the given emoji
        - name: confidential
          in: query
          type: boolean
          description: Filter confidential or public issues
        - name: weight
          in: query
          type: integer
          description: The weight of the issue
        - name: epic_id
          in: query
          type: integer
          description: The ID of an epic associated with the issues
        - name: health_status
          in: query
          type: string
          description: 'The health status of the issue. Must be one of: on_track, needs_attention, at_risk, none, any'
        - name: iteration_id
          in: query
          type: integer
          description: Return issues which are assigned to the iteration with the given ID
        - name: iteration_title
          in: query
          type: string
          description: Return issues which are assigned to the iteration with the given title
    - name: api-v4-projects-id-issues-issue_iid-add_spent_time
      path: /api/v4/projects/{id}/issues/{issue_iid}/add_spent_time
      operations:
      - name: postapiv4projectsidissuesissueiidaddspenttime
        method: POST
        description: Add spent time for a issue
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of the issue.
          required: true
        - name: postApiV4ProjectsIdIssuesIssueIidAddSpentTime
          in: body
          type: string
          required: true
    - name: api-v4-projects-id-issues-issue_iid-links
      path: /api/v4/projects/{id}/issues/{issue_iid}/links
      operations:
      - name: getapiv4projectsidissuesissueiidlinks
        method: GET
        description: List issue relations
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project owned by the authenticated user
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of a project’s issue
          required: true
      - name: postapiv4projectsidissuesissueiidlinks
        method: POST
        description: Create an issue link
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project owned by the authenticated user
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of a project’s issue
          required: true
        - name: postApiV4ProjectsIdIssuesIssueIidLinks
          in: body
          type: string
          required: true
    - name: api-v4-projects-id-issues-issue_iid-links-issue_link_id
      path: /api/v4/projects/{id}/issues/{issue_iid}/links/{issue_link_id}
      operations:
      - name: getapiv4projectsidissuesissueiidlinksissuelinkid
        method: GET
        description: Get an issue link
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project owned by the authenticated user
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of a project’s issue
          required: true
        - name: issue_link_id
          in: path
          type: string
          description: ID of an issue relationship
          required: true
      - name: deleteapiv4projectsidissuesissueiidlinksissuelinkid
        method: DELETE
        description: Delete an issue link
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project owned by the authenticated user
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of a project’s issue
          required: true
        - name: issue_link_id
          in: path
          type: string
          description: The ID of an issue relationship
          required: true
    - name: api-v4-projects-id-issues-issue_iid-participants
      path: /api/v4/projects/{id}/issues/{issue_iid}/participants
      operations:
      - name: getapiv4projectsidissuesissueiidparticipants
        method: GET
        description: List participants for an issue
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of a project issue
          required: true
    - name: api-v4-projects-id-issues-issue_iid-related_merge_requests
      path: /api/v4/projects/{id}/issues/{issue_iid}/related_merge_requests
      operations:
      - name: getapiv4projectsidissuesissueiidrelatedmergerequests
        method: GET
        description: List merge requests that are related to the issue
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of a project issue
          required: true
    - name: api-v4-projects-id-issues-issue_iid-reset_spent_time
      path: /api/v4/projects/{id}/issues/{issue_iid}/reset_spent_time
      operations:
      - name: postapiv4projectsidissuesissueiidresetspenttime
        method: POST
        description: Reset spent time for a issue
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of the issue
          required: true
    - name: api-v4-projects-id-issues-issue_iid-reset_time_estimate
      path: /api/v4/projects/{id}/issues/{issue_iid}/reset_time_estimate
      operations:
      - name: postapiv4projectsidissuesissueiidresettimeestimate
        method: POST
        description: Reset the time estimate for a project issue
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of the issue.
          required: true
    - name: api-v4-projects-id-issues-issue_iid-time_estimate
      path: /api/v4/projects/{id}/issues/{issue_iid}/time_estimate
      operations:
      - name: postapiv4projectsidissuesissueiidtimeestimate
        method: POST
        description: Set a time estimate for a issue
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of the issue.
          required: true
        - name: postApiV4ProjectsIdIssuesIssueIidTimeEstimate
          in: body
          type: string
          required: true
    - name: api-v4-projects-id-issues-issue_iid-time_stats
      path: /api/v4/projects/{id}/issues/{issue_iid}/time_stats
      operations:
      - name: getapiv4projectsidissuesissueiidtimestats
        method: GET
        description: Get time tracking stats
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of the issue
          required: true
    - name: api-v4-projects-id-issues-issue_iid-user_agent_detail
      path: /api/v4/projects/{id}/issues/{issue_iid}/user_agent_detail
      operations:
      - name: getapiv4projectsidissuesissueiiduseragentdetail
        method: GET
        description: Get the user agent details for an issue
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          description: The ID or URL-encoded path of the project
          required: true
        - name: issue_iid
          in: path
          type: integer
          description: The internal ID of a project issue
          required: true
  exposes:
  - type: rest
    namespace: gitlab-ci-issues-rest
    port: 8080
    description: REST adapter for GitLab API — issues. One Spectral-compliant resource per consumed operation, prefixed with
      /v1.
    resources:
    - path: /v1/api/v4/issues
      name: api-v4-issues
      description: REST surface for api-v4-issues.
      operations:
      - method: GET
        name: getapiv4issues
        description: Get currently authenticated user's issues
        call: gitlab-ci-issues.getapiv4issues
        with:
          with_labels_details: rest.with_labels_details
          state: rest.state
          closed_by_id: rest.closed_by_id
          order_by: rest.order_by
          sort: rest.sort
          due_date: rest.due_date
          issue_type: rest.issue_type
          labels: rest.labels
          milestone: rest.milestone
          milestone_id: rest.milestone_id
          iids: rest.iids
          search: rest.search
          in: rest.in
          author_id: rest.author_id
          author_username: rest.author_username
          assignee_id: rest.assignee_id
          assignee_username: rest.assignee_username
          created_after: rest.created_after
          created_before: rest.created_before
          updated_after: rest.updated_after
          updated_before: rest.updated_before
          not[labels]: rest.not[labels]
          not[milestone]: rest.not[milestone]
          not[milestone_id]: rest.not[milestone_id]
          not[iids]: rest.not[iids]
          not[author_id]: rest.not[author_id]
          not[author_username]: rest.not[author_username]
          not[assignee_id]: rest.not[assignee_id]
          not[assignee_username]: rest.not[assignee_username]
          not[weight]: rest.not[weight]
          not[iteration_id]: rest.not[iteration_id]
          not[iteration_title]: rest.not[iteration_title]
          scope: rest.scope
          my_reaction_emoji: rest.my_reaction_emoji
          confidential: rest.confidential
          weight: rest.weight
          epic_id: rest.epic_id
          health_status: rest.health_status
          iteration_id: rest.iteration_id
          iteration_title: rest.iteration_title
          page: rest.page
          per_page: rest.per_page
          non_archived: rest.non_archived
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/v4/issues/{id}
      name: api-v4-issues-id
      description: REST surface for api-v4-issues-id.
      operations:
      - method: GET
        name: getapiv4issuesid
        description: Get specified issue (admin only)
        call: gitlab-ci-issues.getapiv4issuesid
        with:
          id: rest.id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/v4/issues-statistics
      name: api-v4-issues-statistics
      description: REST surface for api-v4-issues_statistics.
      operations:
      - method: GET
        name: getapiv4issuesstatistics
        description: Get currently authenticated user's issues statistics
        call: gitlab-ci-issues.getapiv4issuesstatistics
        with:
          labels: rest.labels
          milestone: rest.milestone
          milestone_id: rest.milestone_id
          iids: rest.iids
          search: rest.search
          in: rest.in
          author_id: rest.author_id
          author_username: rest.author_username
          assignee_id: rest.assignee_id
          assignee_username: rest.assignee_username
          created_after: rest.created_after
          created_before: rest.created_before
          updated_after: rest.updated_after
          updated_before: rest.updated_before
          not[labels]: rest.not[labels]
          not[milestone]: rest.not[milestone]
          not[milestone_id]: rest.not[milestone_id]
          not[iids]: rest.not[iids]
          not[author_id]: rest.not[author_id]
          not[author_username]: rest.not[author_username]
          not[assignee_id]: rest.not[assignee_id]
          not[assignee_username]: rest.not[assignee_username]
          not[weight]: rest.not[weight]
          not[iteration_id]: rest.not[iteration_id]
          not[iteration_title]: rest.not[iteration_title]
          scope: rest.scope
          my_reaction_emoji: rest.my_reaction_emoji
          confidential: rest.confidential
          weight: rest.weight
          epic_id: rest.epic_id
          health_status: rest.health_status
          iteration_id: rest.iteration_id
          iteration_title: rest.iteration_title
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/v4/projects/{id}/issues/{issue-iid}/add-spent-time
      name: api-v4-projects-id-issues-issue-iid-add-spent-time
      description: REST surface for api-v4-projects-id-issues-issue_iid-add_spent_time.
      operations:
      - method: POST
        name: postapiv4projectsidissuesissueiidaddspenttime
        description: Add spent time for a issue
        call: gitlab-ci-issues.postapiv4projectsidissuesissueiidaddspenttime
        with:
          id: rest.id
          issue_iid: rest.issue_iid
          postApiV4ProjectsIdIssuesIssueIidAddSpentTime: rest.postApiV4ProjectsIdIssuesIssueIidAddSpentTime
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/v4/projects/{id}/issues/{issue-iid}/links
      name: api-v4-projects-id-issues-issue-iid-links
      description: REST surface for api-v4-projects-id-issues-issue_iid-links.
      operations:
      - method: GET
        name: getapiv4projectsidissuesissueiidlinks
        description: List issue relations
        call: gitlab-ci-issues.getapiv4projectsidissuesissueiidlinks
        with:
          id: rest.id
          issue_iid: rest.issue_iid
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: postapiv4projectsidissuesissueiidlinks
        description: Create an issue link
        call: gitlab-ci-issues.postapiv4projectsidissuesissueiidlinks
        with:
          id: rest.id
          issue_iid: rest.issue_iid
          postApiV4ProjectsIdIssuesIssueIidLinks: rest.postApiV4ProjectsIdIssuesIssueIidLinks
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/v4/projects/{id}/issues/{issue-iid}/links/{issue-link-id}
      name: api-v4-projects-id-issues-issue-iid-links-issue-link-id
      description: REST surface for api-v4-projects-id-issues-issue_iid-links-issue_link_id.
      operations:
      - method: GET
        name: getapiv4projectsidissuesissueiidlinksissuelinkid
        description: Get an issue link
        call: gitlab-ci-issues.getapiv4projectsidissuesissueiidlinksissuelinkid
        with:
          id: rest.id
          issue_iid: rest.issue_iid
          issue_link_id: rest.issue_link_id
        outputParameters:
        - type: object
          mapping: $.
      - method: DELETE
        name: deleteapiv4projectsidissuesissueiidlinksissuelinkid
        description: Delete an issue link
        call: gitlab-ci-issues.deleteapiv4projectsidissuesissueiidlinksissuelinkid
        with:
          id: rest.id
          issue_iid: rest.issue_iid
          issue_link_id: rest.issue_link_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/v4/projects/{id}/issues/{issue-iid}/participants
      name: api-v4-projects-id-issues-issue-iid-participants
      description: REST surface for api-v4-projects-id-issues-issue_iid-participants.
      operations:
      - method: GET
        name: getapiv4projectsidissuesissueiidparticipants
        description: List participants for an issue
        call: gitlab-ci-issues.getapiv4projectsidissuesissueiidparticipants
        with:
          id: rest.id
          issue_iid: rest.issue_iid
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/v4/projects/{id}/issues/{issue-iid}/related-merge-requests
      name: api-v4-projects-id-issues-issue-iid-related-merge-requests
      description: REST surface for api-v4-projects-id-issues-issue_iid-related_merge_requests.
      operations:
      - method: GET
        name: getapiv4projectsidissuesissueiidrelatedmergerequests
        description: List merge requests that are related to the issue
        call: gitlab-ci-issues.getapiv4projectsidissuesissueiidrelatedmergerequests
        with:
          id: rest.id
          issue_iid: rest.issue_iid
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/v4/projects/{id}/issues/{issue-iid}/reset-spent-time
      name: api-v4-projects-id-issues-issue-iid-reset-spent-time
      description: REST surface for api-v4-projects-id-issues-issue_iid-reset_spent_time.
      operations:
      - method: POST
        name: postapiv4projectsidissuesissueiidresetspenttime
        description: Reset spent time for a issue
        call: gitlab-ci-issues.postapiv4projectsidissuesissueiidresetspenttime
        with:
          id: rest.id
          issue_iid: rest.issue_iid
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/v4/projects/{id}/issues/{issue-iid}/reset-time-estimate
      name: api-v4-projects-id-issues-issue-iid-reset-time-estimate
      description: REST surface for api-v4-projects-id-issues-issue_iid-reset_time_estimate.
      operations:
      - method: POST
        name: postapiv4projectsidissuesissueiidresettimeestimate
        description: Reset the time estimate for a project issue
        call: gitlab-ci-issues.postapiv4projectsidissuesissueiidresettimeestimate
        with:
          id: rest.id
          issue_iid: rest.issue_iid
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/v4/projects/{id}/issues/{issue-iid}/time-estimate
      name: api-v4-projects-id-is

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