# Update post-mortem

Create or replace the post-mortem for an event.

Source: https://statusdashboard.com/docs/api/event-management/events/post-mortem/update

`PUT /app/events/{id}/post-mortem`

Creates or fully replaces the post-mortem for an event. Uses &#x2A;*`PUT`** (full replace of the post-mortem document) — see [Documented PUT exceptions](/docs/api#documented-put-exceptions-sub-resources) in API Basics. Requires the **Post-Mortem Reports** feature entitlement.

Post-mortems are only supported on **incident and maintenance** events. Submitting to an informational event returns `400`.

***

## Path parameters
| Parameter | Description   |
| --------- | ------------- |
| `id`      | The event ID. |

***

## Request
See [API Basics](/docs/api) for required headers.

### Request body
| Field               | Type    | Required | Description                                                                                                                                                                                           |
| ------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `executiveSummary`  | string  | Yes      | Opening overview of scope, impact, and outcome. Gives readers the key facts before the detailed analysis. Rich text field. See [Rich text fields](/docs/api#rich-text-fields). Max 10,000 characters. |
| `rootCauseAnalysis` | string  | Yes      | Detailed explanation of the root cause and contributing factors. Rich text field. See [Rich text fields](/docs/api#rich-text-fields). Max 10,000 characters.                                          |
| `actionItems`       | array   | Yes      | List of remediation tasks. Max 50 items. See [Action item fields](#action-item-fields).                                                                                                               |
| `published`         | boolean | Yes      | Whether to make the post-mortem publicly visible on status dashboards.                                                                                                                                |

### Action item fields
| Field                  | Type    | Required | Description                                                                             |
| ---------------------- | ------- | -------- | --------------------------------------------------------------------------------------- |
| `id`                   | string  | No       | UUID of an existing action item. Omit to have one assigned automatically.               |
| `text`                 | string  | Yes      | Description of the task. Max 500 characters.                                            |
| `status`               | string  | No       | `open`, `in_progress`, or `done`. Defaults to `open`.                                   |
| `owner`                | string  | No       | Optional owner or team name. Max 100 characters.                                        |
| `ownerIsPublic`        | boolean | No       | When `false`, `owner` is omitted from the public post-mortem page. Defaults to `true`.  |
| `expectedCompletionAt` | string  | No       | ISO 8601 date string (`YYYY-MM-DD`). Optional expected completion date.                 |
| `completedAt`          | string  | No       | ISO 8601 date string (`YYYY-MM-DD`). Optional actual completion date.                   |
| `isPublic`             | boolean | No       | When `false`, the item is omitted from the public post-mortem page. Defaults to `true`. |

`completedBy` is **not accepted** on PUT. When `completedAt` is newly set, the server assigns `completedBy` from the authenticated user's email.

Array order is preserved as the display order on the public post-mortem page.

***

## Sample request
```bash
curl -X PUT https://api.statusdashboard.com/app/events/4f8b2e1a-3c7d-4e9f-a0b1-c2d3e4f56789/post-mortem \
  -H "Authorization: Bearer bcf847abf5c6:def456" \
  -H "Content-Type: application/json" \
  -d '{
    "executiveSummary": "A misconfigured load balancer rule caused elevated API latency for approximately 45 minutes, affecting around 12% of requests.",
    "rootCauseAnalysis": "A deploy at 09:30 UTC introduced a load balancer rule with an incorrect timeout value. This caused upstream connections to be dropped under moderate load.",
    "actionItems": [
      {
        "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "text": "Add load balancer config to pre-deploy validation checks.",
        "status": "done",
        "owner": "Platform team",
        "ownerIsPublic": true,
        "expectedCompletionAt": "2026-04-30",
        "completedAt": "2026-04-26"
      },
      {
        "text": "Review timeout defaults across all gateway configurations.",
        "status": "in_progress",
        "owner": "Infrastructure",
        "ownerIsPublic": true,
        "expectedCompletionAt": "2026-05-15",
        "isPublic": true
      }
    ],
    "published": true
  }'
```

## Sample response
**Status: `200 OK`**

```json
{
  "postMortem": {
    "executiveSummary": "A misconfigured load balancer rule caused elevated API latency for approximately 45 minutes, affecting around 12% of requests.",
    "rootCauseAnalysis": "A deploy at 09:30 UTC introduced a load balancer rule with an incorrect timeout value. This caused upstream connections to be dropped under moderate load.",
    "actionItems": [
      {
        "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "text": "Add load balancer config to pre-deploy validation checks.",
        "status": "done",
        "owner": "Platform team",
        "ownerIsPublic": true,
        "expectedCompletionAt": "2026-04-30",
        "completedAt": "2026-04-26",
        "completedBy": "user@example.com",
        "isPublic": true
      },
      {
        "id": "c3d4e5f6-a7b8-9012-cdef-234567890123",
        "text": "Review timeout defaults across all gateway configurations.",
        "status": "in_progress",
        "owner": "Infrastructure",
        "ownerIsPublic": true,
        "expectedCompletionAt": "2026-05-15",
        "isPublic": true
      }
    ],
    "published": true,
    "createdAt": "2026-04-25T12:00:00.000Z",
    "updatedAt": "2026-04-26T14:05:00.000Z",
    "updatedBy": "user@example.com"
  }
}
```

***

## Error responses
| Status | When                                                 |
| ------ | ---------------------------------------------------- |
| `400`  | Validation error, or event is an informational type. |
| `403`  | Insufficient permissions.                            |
| `404`  | Event not found.                                     |
