---
title: "Update an issue"
method: PUT
path: "/api/v4/projects/{id}/issues/{issue_iid}"
tags: ["projects"]
---

# Update an issue

`PUT /api/v4/projects/{id}/issues/{issue_iid}`

## Request

- Base URL: `https://gitlab.com`
- URL: `https://gitlab.com/api/v4/projects/{id}/issues/{issue_iid}`
- Auth: none declared

Updates a specified issue for a project. This request is also used to close or reopen an issue using the `state_event` parameter. At least one of the following parameters is required for the request to be successful: `assignee_id`, `assignee_ids`, `confidential`, `created_at`, `description`, `discussion_locked`, `due_date`, `issue_type`, `labels`, `milestone_id`, `state_event`, `title`.

## Path parameters

- `id` string, required
- `issue_iid` integer, required

## Request body

- PutApiV4ProjectsIdIssuesIssueIid: Update an issue
  - `title` string: The title of an issue
  - `updated_at` string, date-time: Date time when the issue was updated. Available only for admins and project owners.
  - `state_event` 'reopen' | 'close': State of the issue
  - `description` string: The description of an issue
  - `assignee_ids` integer[]: The array of user IDs to assign issue
  - `assignee_id` integer: [Deprecated] The ID of a user to assign issue
  - `milestone_id` integer: The ID of a milestone to assign issue
  - `milestone` string: The title of a project or ancestor-group milestone to assign the issue to. Mutually exclusive with `milestone_id`.
  - `labels` string[]: Comma-separated list of label names
  - `add_labels` string[]: Comma-separated list of label names
  - `remove_labels` string[]: Comma-separated list of label names
  - `due_date` string: Date string in the format YEAR-MONTH-DAY
  - `start_date` string: Date string in the format YEAR-MONTH-DAY
  - `confidential` boolean: Boolean parameter if the issue should be confidential
  - `discussion_locked` boolean: Boolean parameter indicating if the issue's discussion is locked
  - `issue_type` 'issue' | 'incident' | 'test_case' | 'requirement' | 'task' | 'ticket': The type of the issue. Accepts: issue, incident, test_case, requirement, task, ticket
  - `severity` 'unknown' | 'low' | 'medium' | 'high' | 'critical': The severity of the issue. Only applies to incidents. Accepts: unknown, low, medium, high, critical
  - `weight` integer: The weight of the issue
  - `epic_id` integer: The ID of an epic to associate the issue with
  - `epic_iid` integer: The IID of an epic to associate the issue with (deprecated)
  - `created_at` string

## Response `200`

Update an issue

- APIEntitiesIssue: API_Entities_Issue model
  - `id` integer, required
  - `iid` integer, required
  - `project_id` integer, required
  - `title` string, required
  - `description` string, required
  - `state` string, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `closed_at` string, date-time, required
  - `closed_by` APIEntitiesUserBasic, required: API_Entities_UserBasic model
    - `id` integer, required
    - `username` string, required
    - `public_email` string, required
    - `name` string, required
    - `state` string, required
    - `locked` boolean, required
    - `avatar_url` string, required
    - `avatar_path` string
    - `custom_attributes` APIEntitiesCustomAttribute[]
      - `key` string, required
      - `value` string, required
    - `web_url` string, required
  - `labels` string[], required
  - `milestone` APIEntitiesMilestone, required
    - `id` integer, required
    - `iid` integer, required
    - `project_id` integer
    - `group_id` string
    - `title` string, required
    - `description` string, required
    - `state` string, required
    - `created_at` string, required
    - `updated_at` string, required
    - `due_date` string, required
    - `start_date` string, required
    - `expired` boolean, required
    - `web_url` string, required
  - `assignees` APIEntitiesUserBasic, required: API_Entities_UserBasic model
    - `id` integer, required
    - `username` string, required
    - `public_email` string, required
    - `name` string, required
    - `state` string, required
    - `locked` boolean, required
    - `avatar_url` string, required
    - `avatar_path` string
    - `custom_attributes` APIEntitiesCustomAttribute[]
      - `key` string, required
      - `value` string, required
    - `web_url` string, required
  - `author` APIEntitiesUserBasic, required: API_Entities_UserBasic model
    - `id` integer, required
    - `username` string, required
    - `public_email` string, required
    - `name` string, required
    - `state` string, required
    - `locked` boolean, required
    - `avatar_url` string, required
    - `avatar_path` string
    - `custom_attributes` APIEntitiesCustomAttribute[]
      - `key` string, required
      - `value` string, required
    - `web_url` string, required
  - `type` string, required: One of ["ISSUE", "INCIDENT", "TEST_CASE", "REQUIREMENT", "TASK", "TICKET"]
  - `assignee` APIEntitiesUserBasic, required: API_Entities_UserBasic model
    - `id` integer, required
    - `username` string, required
    - `public_email` string, required
    - `name` string, required
    - `state` string, required
    - `locked` boolean, required
    - `avatar_url` string, required
    - `avatar_path` string
    - `custom_attributes` APIEntitiesCustomAttribute[]
      - `key` string, required
      - `value` string, required
    - `web_url` string, required
  - `user_notes_count` integer, required
  - `merge_requests_count` integer, required
  - `upvotes` integer, required
  - `downvotes` integer, required
  - `start_date` string, date, required
  - `due_date` string, date, required
  - `confidential` boolean, required
  - `discussion_locked` boolean, required
  - `issue_type` string, required
  - `web_url` string, required
  - `time_stats` APIEntitiesIssuableTimeStats, required: API_Entities_IssuableTimeStats model
    - `time_estimate` integer, required
    - `total_time_spent` integer, required
    - `human_time_estimate` string, required
    - `human_total_time_spent` string, required
  - `task_completion_status` APIEntitiesTaskCompletionStatus, required
    - `count` integer, required
    - `completed_count` integer, required
  - `weight` integer
  - `blocking_issues_count` integer, required
  - `has_tasks` boolean, required
  - `task_status` string
  - `_links` object, required
    - `self` string, required
    - `notes` string, required
    - `award_emoji` string, required
    - `project` string, required
    - `closed_as_duplicate_of` string, required
  - `references` APIEntitiesIssuableReferences, required
    - `short` string, required
    - `relative` string, required
    - `full` string, required
  - `severity` string, required: One of ["UNKNOWN", "LOW", "MEDIUM", "HIGH", "CRITICAL"]
  - `subscribed` boolean
  - `moved_to_id` integer, required
  - `imported` boolean, required
  - `imported_from` string, required
  - `service_desk_reply_to` string, required
  - `epic_iid` string
  - `epic` EpicBaseEntity
    - `id` string, required
    - `iid` string, required
    - `title` string, required
    - `url` string, required
    - `group_id` string, required
    - `human_readable_end_date` string
    - `human_readable_timestamp` string
  - `iteration` APIEntitiesIteration
    - `id` integer, required
    - `iid` integer, required
    - `sequence` integer, required
    - `group_id` integer, required
    - `title` string, required
    - `description` string, required
    - `state` integer, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `start_date` string, date, required
    - `due_date` string, date, required
    - `web_url` string, required
  - `health_status` string

---

[API](https://skmtc.dev/gitlab/apis/gitlab-api.md) - [All operations](https://skmtc.dev/gitlab/apis/gitlab-api/llms.txt) - [OpenAPI document](https://skmtc.dev/gitlab/apis/gitlab-api/revisions/b234947ef3f2?raw)
