Save Postmortem
Saves the public postmortem (Markdown) of an incident as a draft, or replaces the text of a published one.
PUT /api/incidents/:id/postmortem
Saves the public postmortem of an incident: what happened, why, and what was changed, written in Markdown. Like on Atlassian Statuspage, the postmortem is shown under the incident on every status page the incident appears on, once it is published with Publish Postmortem. Until then it is a draft, visible only in the status pages module.
An incident has at most one postmortem; this call creates it or replaces its text. On a published postmortem the new text goes live immediately and it stays published. Saving sends no notification. The text can be saved at any time, publishing needs a resolved incident.
The status pages render the Markdown themselves and never as raw HTML: headings, paragraphs, lists, bold, italic, code and links to http(s) addresses. Anything else, including HTML tags, is shown as plain text.
Authentication
Requires role admin or editor within the incident's customer scope. An incident without a customer needs an organization-wide role or token; for any other organization it answers 404 incidentNotFound. readonly gets 403 forbidden.
- Header:
Authorization: Bearer <token>
Path Parameters
id(required): numeric id orpublicId(UUID) of the incident.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
body | string | yes | Markdown, 1 to 50,000 characters after trimming. |
Unknown fields are rejected with 400 invalidRequestBody.
Example (cURL)
curl -X PUT "$BASE_URL/api/incidents/5121/postmortem" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "body": "## Cause\nA database node ran out of disk space.\n\n## Actions\n- Alert at 80 % disk usage" }'Response
200 OK
{
"incidentId": 5121,
"incidentPublicId": "8a3c1f6e-2b7d-4e59-9c1a-5d2e7f0b4c33",
"body": "## Cause\nA database node ran out of disk space.\n\n## Actions\n- Alert at 80 % disk usage",
"publishedAt": null,
"updatedAt": "2026-10-28T14:02:11.000Z"
}| Field | Description |
|---|---|
publishedAt | null = draft; otherwise when it was published (ISO 8601). |
updatedAt | When the text was last saved. |
Get Incident Details returns the same fields as postmortem.
Common Errors
400 Bad Request(invalidRequestBody) whenbodyis missing, empty, longer than 50,000 characters, or an unknown field is sent400 Bad Request(incidentNoCustomer) when the incident has neither a customer nor a status page401 Unauthorizedwhen not authenticated403 Forbidden(forbidden) when your role or customer scope does not allow it404 Not Found(incidentNotFound) when the incident does not exist in your organization