curl --request GET \
--url {scheme}://{host}:{port}/{basePath}/postmortems/{name} \
--header 'X-API-Key: <api-key>'import requests
url = "{scheme}://{host}:{port}/{basePath}/postmortems/{name}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('{scheme}://{host}:{port}/{basePath}/postmortems/{name}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "62437",
CURLOPT_URL => "{scheme}://{host}:{port}/{basePath}/postmortems/{name}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "{scheme}://{host}:{port}/{basePath}/postmortems/{name}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("{scheme}://{host}:{port}/{basePath}/postmortems/{name}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("{scheme}://{host}:{port}/{basePath}/postmortems/{name}")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"apiVersion": "v1",
"kind": "PostMortem",
"spec": {
"name": "pm-checkout-service-oom-kill-1773871200",
"namespace": "production",
"issueRef": "checkout-service-oom-kill-1773871200",
"resource": {
"kind": "Deployment",
"name": "checkout-service",
"namespace": "production"
},
"severity": "critical",
"state": "Open",
"summary": "checkout-service pods were OOMKilled repeatedly; memory limit raised and pods stabilized.",
"rootCause": "Memory limit of 512Mi below the working set of the payment webhook handler",
"impact": "Checkout requests failed while pods restarted",
"duration": "45m0s",
"lessonsLearned": [
"Review memory limits against observed working set"
],
"preventionActions": [
"Add a heap usage alert to checkout-service"
],
"timeline": [
{
"timestamp": "2026-03-18T22:00:00Z",
"type": "detected",
"detail": "OOMKilled containers in Deployment checkout-service"
},
{
"timestamp": "2026-03-18T22:10:00Z",
"type": "action_executed",
"detail": "AdjustResources: memory limit 512Mi -> 1Gi"
},
{
"timestamp": "2026-03-18T22:45:00Z",
"type": "resolved",
"detail": "Pods stable after the resource adjustment"
}
],
"actionsExecuted": [
{
"action": "AdjustResources",
"params": {
"memory_limit": "1Gi"
},
"result": "success",
"detail": "memory limit updated",
"timestamp": "2026-03-18T22:10:00Z"
}
],
"feedback": {
"remediationAccuracy": 4,
"comments": "Correct diagnosis; the limit change was the right first step.",
"providedBy": "sre-oncall",
"providedAt": "2026-03-19T09:00:00Z"
},
"generatedAt": "2026-03-18T22:45:00Z",
"creationTimestamp": "2026-03-18T22:45:00Z"
},
"status": {
"name": "pm-checkout-service-oom-kill-1773871200",
"namespace": "production",
"issueRef": "checkout-service-oom-kill-1773871200",
"resource": {
"kind": "Deployment",
"name": "checkout-service",
"namespace": "production"
},
"severity": "critical",
"state": "Open",
"summary": "checkout-service pods were OOMKilled repeatedly; memory limit raised and pods stabilized.",
"rootCause": "Memory limit of 512Mi below the working set of the payment webhook handler",
"impact": "Checkout requests failed while pods restarted",
"duration": "45m0s",
"lessonsLearned": [
"Review memory limits against observed working set"
],
"preventionActions": [
"Add a heap usage alert to checkout-service"
],
"timeline": [
{
"timestamp": "2026-03-18T22:00:00Z",
"type": "detected",
"detail": "OOMKilled containers in Deployment checkout-service"
},
{
"timestamp": "2026-03-18T22:10:00Z",
"type": "action_executed",
"detail": "AdjustResources: memory limit 512Mi -> 1Gi"
},
{
"timestamp": "2026-03-18T22:45:00Z",
"type": "resolved",
"detail": "Pods stable after the resource adjustment"
}
],
"actionsExecuted": [
{
"action": "AdjustResources",
"params": {
"memory_limit": "1Gi"
},
"result": "success",
"detail": "memory limit updated",
"timestamp": "2026-03-18T22:10:00Z"
}
],
"feedback": {
"remediationAccuracy": 4,
"comments": "Correct diagnosis; the limit change was the right first step.",
"providedBy": "sre-oncall",
"providedAt": "2026-03-19T09:00:00Z"
},
"generatedAt": "2026-03-18T22:45:00Z",
"creationTimestamp": "2026-03-18T22:45:00Z"
},
"resourceMeta": {
"name": "pm-checkout-service-oom-kill-1773871200",
"namespace": "production",
"uid": "3d9b8e61-2f4a-4b7c-8e15-6a0c9f2d7b43",
"creationTimestamp": "2026-03-18T22:45:00Z"
}
}
{
"apiVersion": "v1",
"kind": "Error",
"error": "Not Found",
"code": 404,
"message": "postmortem not found: postmortems.platform.chatcli.io \"pm-checkout-service-oom-kill-1773871200\" not found"
}
Get PostMortem
Returns the postmortem of an incident: summary, root cause, timeline, executed actions and feedback
curl --request GET \
--url {scheme}://{host}:{port}/{basePath}/postmortems/{name} \
--header 'X-API-Key: <api-key>'import requests
url = "{scheme}://{host}:{port}/{basePath}/postmortems/{name}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('{scheme}://{host}:{port}/{basePath}/postmortems/{name}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "62437",
CURLOPT_URL => "{scheme}://{host}:{port}/{basePath}/postmortems/{name}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "{scheme}://{host}:{port}/{basePath}/postmortems/{name}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("{scheme}://{host}:{port}/{basePath}/postmortems/{name}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("{scheme}://{host}:{port}/{basePath}/postmortems/{name}")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"apiVersion": "v1",
"kind": "PostMortem",
"spec": {
"name": "pm-checkout-service-oom-kill-1773871200",
"namespace": "production",
"issueRef": "checkout-service-oom-kill-1773871200",
"resource": {
"kind": "Deployment",
"name": "checkout-service",
"namespace": "production"
},
"severity": "critical",
"state": "Open",
"summary": "checkout-service pods were OOMKilled repeatedly; memory limit raised and pods stabilized.",
"rootCause": "Memory limit of 512Mi below the working set of the payment webhook handler",
"impact": "Checkout requests failed while pods restarted",
"duration": "45m0s",
"lessonsLearned": [
"Review memory limits against observed working set"
],
"preventionActions": [
"Add a heap usage alert to checkout-service"
],
"timeline": [
{
"timestamp": "2026-03-18T22:00:00Z",
"type": "detected",
"detail": "OOMKilled containers in Deployment checkout-service"
},
{
"timestamp": "2026-03-18T22:10:00Z",
"type": "action_executed",
"detail": "AdjustResources: memory limit 512Mi -> 1Gi"
},
{
"timestamp": "2026-03-18T22:45:00Z",
"type": "resolved",
"detail": "Pods stable after the resource adjustment"
}
],
"actionsExecuted": [
{
"action": "AdjustResources",
"params": {
"memory_limit": "1Gi"
},
"result": "success",
"detail": "memory limit updated",
"timestamp": "2026-03-18T22:10:00Z"
}
],
"feedback": {
"remediationAccuracy": 4,
"comments": "Correct diagnosis; the limit change was the right first step.",
"providedBy": "sre-oncall",
"providedAt": "2026-03-19T09:00:00Z"
},
"generatedAt": "2026-03-18T22:45:00Z",
"creationTimestamp": "2026-03-18T22:45:00Z"
},
"status": {
"name": "pm-checkout-service-oom-kill-1773871200",
"namespace": "production",
"issueRef": "checkout-service-oom-kill-1773871200",
"resource": {
"kind": "Deployment",
"name": "checkout-service",
"namespace": "production"
},
"severity": "critical",
"state": "Open",
"summary": "checkout-service pods were OOMKilled repeatedly; memory limit raised and pods stabilized.",
"rootCause": "Memory limit of 512Mi below the working set of the payment webhook handler",
"impact": "Checkout requests failed while pods restarted",
"duration": "45m0s",
"lessonsLearned": [
"Review memory limits against observed working set"
],
"preventionActions": [
"Add a heap usage alert to checkout-service"
],
"timeline": [
{
"timestamp": "2026-03-18T22:00:00Z",
"type": "detected",
"detail": "OOMKilled containers in Deployment checkout-service"
},
{
"timestamp": "2026-03-18T22:10:00Z",
"type": "action_executed",
"detail": "AdjustResources: memory limit 512Mi -> 1Gi"
},
{
"timestamp": "2026-03-18T22:45:00Z",
"type": "resolved",
"detail": "Pods stable after the resource adjustment"
}
],
"actionsExecuted": [
{
"action": "AdjustResources",
"params": {
"memory_limit": "1Gi"
},
"result": "success",
"detail": "memory limit updated",
"timestamp": "2026-03-18T22:10:00Z"
}
],
"feedback": {
"remediationAccuracy": 4,
"comments": "Correct diagnosis; the limit change was the right first step.",
"providedBy": "sre-oncall",
"providedAt": "2026-03-19T09:00:00Z"
},
"generatedAt": "2026-03-18T22:45:00Z",
"creationTimestamp": "2026-03-18T22:45:00Z"
},
"resourceMeta": {
"name": "pm-checkout-service-oom-kill-1773871200",
"namespace": "production",
"uid": "3d9b8e61-2f4a-4b7c-8e15-6a0c9f2d7b43",
"creationTimestamp": "2026-03-18T22:45:00Z"
}
}
{
"apiVersion": "v1",
"kind": "Error",
"error": "Not Found",
"code": 404,
"message": "postmortem not found: postmortems.platform.chatcli.io \"pm-checkout-service-oom-kill-1773871200\" not found"
}
pm-<issue name>, e.g., pm-checkout-service-oom-kill-1773871200)namespace it looks only in default.viewer. spec and status carry the same flattened object. Besides the fields shown, an item can carry reviewedAt, requiresHumanAction and requiredAction (set when the incident was contained and a human must restore the workload), and chaosInduced/chaosExperiment (when the Issue was correlated with a ChaosExperiment). Empty fields are omitted.
The REST projection does not include every PostMortem status field. Metric snapshots, blast radius, git correlation, SLI impact, trending, GitOps context, log analysis summary and cascade chain are only on the resource: kubectl get postmortem <name> -n <namespace> -o yaml.
{
"apiVersion": "v1",
"kind": "PostMortem",
"spec": {
"name": "pm-checkout-service-oom-kill-1773871200",
"namespace": "production",
"issueRef": "checkout-service-oom-kill-1773871200",
"resource": {
"kind": "Deployment",
"name": "checkout-service",
"namespace": "production"
},
"severity": "critical",
"state": "Open",
"summary": "checkout-service pods were OOMKilled repeatedly; memory limit raised and pods stabilized.",
"rootCause": "Memory limit of 512Mi below the working set of the payment webhook handler",
"impact": "Checkout requests failed while pods restarted",
"duration": "45m0s",
"lessonsLearned": [
"Review memory limits against observed working set"
],
"preventionActions": [
"Add a heap usage alert to checkout-service"
],
"timeline": [
{
"timestamp": "2026-03-18T22:00:00Z",
"type": "detected",
"detail": "OOMKilled containers in Deployment checkout-service"
},
{
"timestamp": "2026-03-18T22:10:00Z",
"type": "action_executed",
"detail": "AdjustResources: memory limit 512Mi -> 1Gi"
},
{
"timestamp": "2026-03-18T22:45:00Z",
"type": "resolved",
"detail": "Pods stable after the resource adjustment"
}
],
"actionsExecuted": [
{
"action": "AdjustResources",
"params": {
"memory_limit": "1Gi"
},
"result": "success",
"detail": "memory limit updated",
"timestamp": "2026-03-18T22:10:00Z"
}
],
"feedback": {
"remediationAccuracy": 4,
"comments": "Correct diagnosis; the limit change was the right first step.",
"providedBy": "sre-oncall",
"providedAt": "2026-03-19T09:00:00Z"
},
"generatedAt": "2026-03-18T22:45:00Z",
"creationTimestamp": "2026-03-18T22:45:00Z"
},
"status": {
"name": "pm-checkout-service-oom-kill-1773871200",
"namespace": "production",
"issueRef": "checkout-service-oom-kill-1773871200",
"resource": {
"kind": "Deployment",
"name": "checkout-service",
"namespace": "production"
},
"severity": "critical",
"state": "Open",
"summary": "checkout-service pods were OOMKilled repeatedly; memory limit raised and pods stabilized.",
"rootCause": "Memory limit of 512Mi below the working set of the payment webhook handler",
"impact": "Checkout requests failed while pods restarted",
"duration": "45m0s",
"lessonsLearned": [
"Review memory limits against observed working set"
],
"preventionActions": [
"Add a heap usage alert to checkout-service"
],
"timeline": [
{
"timestamp": "2026-03-18T22:00:00Z",
"type": "detected",
"detail": "OOMKilled containers in Deployment checkout-service"
},
{
"timestamp": "2026-03-18T22:10:00Z",
"type": "action_executed",
"detail": "AdjustResources: memory limit 512Mi -> 1Gi"
},
{
"timestamp": "2026-03-18T22:45:00Z",
"type": "resolved",
"detail": "Pods stable after the resource adjustment"
}
],
"actionsExecuted": [
{
"action": "AdjustResources",
"params": {
"memory_limit": "1Gi"
},
"result": "success",
"detail": "memory limit updated",
"timestamp": "2026-03-18T22:10:00Z"
}
],
"feedback": {
"remediationAccuracy": 4,
"comments": "Correct diagnosis; the limit change was the right first step.",
"providedBy": "sre-oncall",
"providedAt": "2026-03-19T09:00:00Z"
},
"generatedAt": "2026-03-18T22:45:00Z",
"creationTimestamp": "2026-03-18T22:45:00Z"
},
"resourceMeta": {
"name": "pm-checkout-service-oom-kill-1773871200",
"namespace": "production",
"uid": "3d9b8e61-2f4a-4b7c-8e15-6a0c9f2d7b43",
"creationTimestamp": "2026-03-18T22:45:00Z"
}
}
{
"apiVersion": "v1",
"kind": "Error",
"error": "Not Found",
"code": 404,
"message": "postmortem not found: postmortems.platform.chatcli.io \"pm-checkout-service-oom-kill-1773871200\" not found"
}
Authorizations
API key sent in the X-API-Key header. Keys are read from the Secret chatcli-operator-secrets, key api-keys (fallback: ConfigMap chatcli-operator-config, key api-keys) in the operator namespace, as a YAML list of {key, role, name, description} (name is the identity recorded on approval decisions); the operator chart creates it only with apiKeys.create: true. Roles: viewer < operator < admin — any other role string is denied everywhere. Changes are picked up within about 30 seconds; deleting both the Secret and the ConfigMap revokes every key. With no keys configured every /api/ call returns 401, unless CHATCLI_OPERATOR_DEV_MODE=true, which grants admin without a key (development only).
Path Parameters
PostMortem name.
"pm-payment-service-oom-1710860400"
Query Parameters
Namespace of the object. Defaults to default — pass it for objects in any other namespace.