> Documentation index for AI agents: https://docs.pagerduty.com/llms.txt

# Update a Post-Incident Review

`PUT https://api.pagerduty.com/incidents/{id}/review`

Update the Post-Incident Review for the specified Incident.

This is a partial update: an omitted field leaves the current value unchanged.

Moving `status` to `completed` is rejected with `409` while any required section is still unfilled.

On accounts where completed Post-Incident Reviews are read-only, any other change to a `completed` Post-Incident Review is rejected with `409` until it is reopened by setting `status` to another value. Completing or reopening a Post-Incident Review requires permission to complete it, or the request is rejected with `403`.

`409` is also returned if the Post-Incident Review is locked, or if it uses a format this version of the API cannot edit.

Scoped OAuth requires: `incident_reviews.write`

## Authorization

- **api_key** (apiKey) — `Authorization` header. The API Key with format `Token token=<API_KEY>`

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes | The ID of the resource. |

## Header parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `Accept` | string | yes | The `Accept` header is used as a versioning header. Default: `application/vnd.pagerduty+json;version=2`. |

## Request body (`application/json`) — required

| Field | Type | Required | Description |
|---|---|---|---|
| `title` | string |  | The updated title of the Post-Incident Review. Min length: 1. Max length: 255. |
| `status` | string |  | The updated status of the Post-Incident Review. One of: `started`, `in_review`, `completed`. |

Example: Request Example

```json
{
  "title": "Database outage review",
  "status": "completed"
}
```

## Response 200

The Post-Incident Review updated.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `incident_review` | object | yes | A Post-Incident Review is a structured, post-resolution record of what happened during an Incident. Each Incident has at most one Post-Incident Review. |
| `incident_review.id` | string |  | The unique identifier of the Post-Incident Review. Read-only. |
| `incident_review.incident_id` | string |  | The ID of the Incident this Post-Incident Review describes. Read-only. |
| `incident_review.title` | string |  | The title of the Post-Incident Review. |
| `incident_review.status` | string |  | The status of the Post-Incident Review. Moving to `completed` is rejected while any required section is still unfilled. On accounts where completed Post-Incident Reviews are read-only, a `completed` Post-Incident Review cannot be changed until it is reopened by setting another status. One of: `started`, `in_review`, `completed`. |
| `incident_review.sections` | array of object |  | The sections of the Post-Incident Review, ordered by `priority`. Read-only. |
| `incident_review.sections[].title` | string |  | The title of the section. Read-only. |
| `incident_review.sections[].content` | string \| null |  | The section's content, as [Tiptap](https://tiptap.dev/) editor JSON. `null` or empty for a section that has not been written or generated yet. |
| `incident_review.sections[].priority` | integer |  | The display order of the section within the Post-Incident Review. Lower values sort first. Read-only. |
| `incident_review.sections[].required` | boolean |  | Whether this section must be filled in before the Post-Incident Review can be moved to the `completed` status. Read-only. |
| `incident_review.sections[].completed_at` | string \| null (date-time) |  | The time the section was marked completed, or `null` if it has not been completed. Read-only. |
| `incident_review.generation_status` | string |  | Whether an AI draft is currently being generated for this Post-Incident Review. While this is `generating`, section content is still being written and the Post-Incident Review should be re-fetched to see the result. Read-only. One of: `idle`, `generating`. |
| `incident_review.ai_generated` | boolean |  | Whether this Post-Incident Review has been through the AI draft flow. Read-only. |
| `incident_review.template_id` | string \| null |  | The ID of the template this Post-Incident Review currently follows, or `null` if it does not follow one. Read-only. |
| `incident_review.has_events` | boolean |  | Whether the Post-Incident Review has at least one event on its timeline. Read-only. |
| `incident_review.action_item_count` | integer |  | The total number of action items on this Post-Incident Review. Read-only. |
| `incident_review.completed_action_item_count` | integer |  | The number of completed action items on this Post-Incident Review. Read-only. |
| `incident_review.created_by` | string \| null |  | The ID of the User who created this Post-Incident Review, or `null` if it was not created by a User. Read-only. |
| `incident_review.created_at` | string (date-time) |  | The time the Post-Incident Review was created. Read-only. |
| `incident_review.updated_at` | string (date-time) |  | The time the Post-Incident Review was last modified. Read-only. |
| `incident_review.completed_at` | string \| null (date-time) |  | The time the Post-Incident Review was completed, or `null` if it has not been completed. Read-only. |

Example: Response Example

```json
{
  "incident_review": {
    "id": "AGOBAMKTT5Z3RO7CR7T2ZGSMJA",
    "incident_id": "P1234ABC",
    "title": "Database outage review",
    "status": "completed",
    "sections": [
      {
        "title": "Summary",
        "content": "{\"type\":\"doc\",\"content\":[]}",
        "priority": 0,
        "required": true,
        "completed_at": "2026-09-02T14:30:00Z"
      }
    ],
    "generation_status": "idle",
    "ai_generated": false,
    "template_id": "AGOBAMKTT5Z3RO7CR7T2ZGSMJA",
    "has_events": true,
    "action_item_count": 5,
    "completed_action_item_count": 5,
    "created_by": "PUSER123",
    "created_at": "2026-09-01T20:00:00Z",
    "updated_at": "2026-09-02T14:30:00Z",
    "completed_at": "2026-09-02T14:30:00Z"
  }
}
```

## Response 400

Caller provided invalid arguments. Please review the response for error details. Retrying with the same arguments will *not* work.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object |  |  |
| `error.code` | integer |  | Read-only. |
| `error.message` | string |  | Error message string. Read-only. |
| `error.errors` | array of string |  | Read-only. |

## Response 401

Caller did not supply credentials or did not provide the correct credentials.
If you are using an API key, it may be invalid or your Authorization header may be malformed.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object |  |  |
| `error.code` | integer |  | Read-only. |
| `error.message` | string |  | Error message string. Read-only. |
| `error.errors` | array of string |  | Read-only. |

## Response 403

Caller is not authorized to view the requested resource.
While your authentication is valid, the authenticated user or token does not have permission to perform this action.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object |  |  |
| `error.code` | integer |  | Read-only. |
| `error.message` | string |  | Error message string. Read-only. |
| `error.errors` | array of string |  | Read-only. |

## Response 404

The requested resource was not found.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object |  |  |
| `error.code` | integer |  | Read-only. |
| `error.message` | string |  | Error message string. Read-only. |
| `error.errors` | array of string |  | Read-only. |

## Response 409

The request conflicts with the current state of the server.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object |  |  |
| `error.code` | integer |  | Read-only. |
| `error.message` | string |  | Error message string. Read-only. |
| `error.errors` | array of string |  | Read-only. |

## Response 429

Too many requests have been made, the rate limit has been reached.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object |  |  |
| `error.code` | integer |  | Read-only. |
| `error.message` | string |  | Error message string. Read-only. |
| `error.errors` | array of string |  | Read-only. |

## Developer Agreement

Your access to and use of the PagerDuty Developer Services is governed by the [PagerDuty Developer Agreement](https://docs.pagerduty.com/developer/pagerduty-developer-agreement).
