API reference
Operator - Observability
One tag: method, path, summary, auth, and scopes. Request and response fields ship in this page — expand a row to read the contract.
Endpoints
14
GET
/api/v1/operator/telemetry
Web Session
Get telemetry overview
/api/v1/operator/telemetry
Web Session
Get telemetry overview
Description
Returns operational telemetry summary counters and gauges for API, auth, rate limiting, and database latency.
Auth
Web SessionResponses
200
Telemetry overview payload
Returns: TelemetryOverview
Telemetry overview payload
Returns: TelemetryOverview
GET
/api/v1/operator/traces
Web Session
List traces (operator)
/api/v1/operator/traces
Web Session
List traces (operator)
Description
Returns traces for the current workspace. list_traces/2 silently limits the page to 30 rows; this endpoint does not accept limit or offset. FilterParams reads the nested filter map only.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| filter[status] | query | string | No | Filter by trace status |
| filter[trace_type] | query | string | No | Filter by trace type |
| filter[environment] | query | string | No | Exact-match environment filter |
| filter[workflow_target_id] | query | string | No | Workflow target UUID |
| filter[service_agent_id] | query | string | No | Service agent UUID |
| filter[request_id] | query | string | No | Exact-match request ID filter |
| filter[external_trace_id] | query | string | No | Exact-match external trace ID filter |
| filter[replayable] | query | string | No | Filter by whether the trace can be replayed |
| filter[binding] | query | string | No | bound traces have a workflow_target_id; unbound traces do not. Used by Trace Explorer. |
Responses
200
List of traces
Returns: TraceList
List of traces
Returns: TraceList
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| traces | array<object> | Yes | List of trace summaries |
| traces[].id | string | Yes | Trace UUID |
| traces[].name | string | Yes | Human-readable trace name |
| traces[].status | string (running, ok, error, partial) | Yes | Trace execution status |
| traces[].started_at | datetime (ISO 8601) | Yes | Trace start time |
| traces[].request_id | string | No | Internal request identifier |
| traces[].inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| traces[].updated_at | datetime (ISO 8601) | Yes | Record update timestamp |
| traces[].environment | string | No | Exact environment label captured at ingest |
| traces[].service_agent | object | No | Associated service agent summary |
| traces[].service_agent.id | string | Yes | Service agent UUID |
| traces[].service_agent.name | string | Yes | Service agent name |
| traces[].workflow_target | object | No | Associated workflow target summary |
| traces[].workflow_target.id | string | Yes | Workflow target UUID |
| traces[].workflow_target.name | string | Yes | Workflow target name |
| traces[].duration_ms | integer | No | Trace duration in milliseconds |
| traces[].ended_at | datetime (ISO 8601) | No | Trace end time |
| traces[].external_trace_id | string | No | External trace identifier from the caller |
| traces[].last_activity_at | datetime (ISO 8601) | No | Last observed activity time |
| traces[].total_cost | number | No | Accumulated cost across the trace |
| traces[].trace_type | string (runtime, eval, replay) | Yes | Trace category |
| traces[].workflow_version | object | No | Associated workflow version summary |
| traces[].workflow_version.id | string | Yes | Workflow version UUID |
| traces[].workflow_version.label | string | Yes | Workflow version label |
Example
{
"traces": [
{
"duration_ms": 3200,
"ended_at": "2026-03-12T08:45:03Z",
"environment": "production",
"external_trace_id": "trace-checkout-443",
"id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"inserted_at": "2026-03-12T08:45:03Z",
"last_activity_at": "2026-03-12T08:45:03Z",
"name": "checkout runtime trace",
"request_id": "req-01HQ5PX7P7F4",
"service_agent": {
"id": "f4d49601-3477-4c9d-b896-ac08a26a3147",
"name": "payments-agent"
},
"started_at": "2026-03-12T08:45:00Z",
"status": "ok",
"total_cost": 0.12,
"trace_type": "runtime",
"updated_at": "2026-03-12T08:45:03Z",
"workflow_target": {
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"name": "checkout-api"
},
"workflow_version": {
"id": "d0b91d0c-0f4b-4a28-8d9d-ccf0c427d6e8",
"label": "v2026.03.12"
}
}
]
}
GET
/api/v1/operator/traces/:id
Web Session
Get trace details (operator)
/api/v1/operator/traces/:id
Web Session
Get trace details (operator)
Description
Returns detailed trace information.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Trace UUID |
Responses
200
Trace details
Returns: Trace
Trace details
Returns: Trace
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Trace UUID |
| name | string | Yes | Human-readable trace name |
| status | string (running, ok, error, partial) | Yes | Trace execution status |
| events | array<object> | Yes | Ordered event summaries for the trace timeline |
| events[].id | string | Yes | Trace event UUID |
| events[].name | string | Yes | Human-readable event name |
| events[].status | string (ok, error, pending) | Yes | Event status |
| events[].started_at | datetime (ISO 8601) | No | Event start time |
| events[].inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| events[].sequence | integer | Yes | Sequence number within the trace |
| events[].event_type | string | Yes | Event type label |
| events[].duration_ms | integer | No | Duration in milliseconds |
| events[].cost | number | No | Cost attributed to the event |
| events[].ended_at | datetime (ISO 8601) | No | Event end time |
| events[].latency_ms | integer | No | Latency in milliseconds |
| events[].parent_event_id | string | No | Parent event UUID when nested |
| events[].source_event_id | string | No | Caller-supplied source event id when the ingest is idempotent |
| metadata | object | Yes | Read-time redacted metadata payload |
| started_at | datetime (ISO 8601) | Yes | Trace start time |
| request_id | string | No | Internal request identifier |
| inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| updated_at | datetime (ISO 8601) | Yes | Record update timestamp |
| summary | string | No | Operator-facing summary for the trace |
| environment | string | No | Exact environment label captured at ingest |
| service_agent | object | No | Associated service agent summary |
| service_agent.id | string | Yes | Service agent UUID |
| service_agent.name | string | Yes | Service agent name |
| error_payload | object | Yes | Read-time redacted error payload |
| failure_group | object | No | Failure group linked by matching signature |
| failure_group.id | string | Yes | Failure group UUID |
| failure_group.status | string (open, acknowledged, resolved) | Yes | Failure group status |
| failure_group.title | string | Yes | Failure group title |
| failure_group.severity | string (low, medium, high, critical) | Yes | Failure group severity |
| workflow_target | object | No | Associated workflow target summary |
| workflow_target.id | string | Yes | Workflow target UUID |
| workflow_target.name | string | Yes | Workflow target name |
| duration_ms | integer | No | Trace duration in milliseconds |
| failure_signature | string | No | Failure signature used for grouping |
| input_payload | object | Yes | Read-time redacted input payload |
| output_payload | object | Yes | Read-time redacted output payload |
| redaction_applied | boolean | Yes | True when any operator-visible payload field was masked |
| replayable | boolean | Yes | Whether the trace can be replayed |
| ended_at | datetime (ISO 8601) | No | Trace end time |
| external_trace_id | string | No | External trace identifier from the caller |
| last_activity_at | datetime (ISO 8601) | No | Last observed activity time |
| total_cost | number | No | Accumulated cost across the trace |
| trace_type | string (runtime, eval, replay) | Yes | Trace category |
| workflow_version | object | No | Associated workflow version summary |
| workflow_version.id | string | Yes | Workflow version UUID |
| workflow_version.label | string | Yes | Workflow version label |
Example
{
"duration_ms": 3200,
"ended_at": "2026-03-12T08:45:03Z",
"environment": "production",
"error_payload": {
"email": "[REDACTED]"
},
"events": [
{
"cost": 0.03,
"duration_ms": 950,
"ended_at": "2026-03-12T08:45:02Z",
"event_type": "llm.completion",
"id": "c34b4b67-f304-4b02-a8e1-2a053c4b8381",
"inserted_at": "2026-03-12T08:45:02Z",
"latency_ms": 950,
"name": "draft response",
"parent_event_id": null,
"sequence": 1,
"source_event_id": "evt-checkout-443-1",
"started_at": "2026-03-12T08:45:01Z",
"status": "error"
}
],
"external_trace_id": "trace-checkout-443",
"failure_group": {
"id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"severity": "high",
"status": "open",
"title": "Payment timeout"
},
"failure_signature": "payment:timeout",
"id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"input_payload": {
"authorization": "[REDACTED]"
},
"inserted_at": "2026-03-12T08:45:03Z",
"last_activity_at": "2026-03-12T08:45:03Z",
"metadata": {
"region": "us-east-1"
},
"name": "checkout runtime trace",
"output_payload": {
"result": "retry_exhausted"
},
"redaction_applied": true,
"replayable": true,
"request_id": "req-01HQ5PX7P7F4",
"service_agent": {
"id": "f4d49601-3477-4c9d-b896-ac08a26a3147",
"name": "payments-agent"
},
"started_at": "2026-03-12T08:45:00Z",
"status": "ok",
"summary": "Timeout after payment provider retry budget was exhausted.",
"total_cost": 0.12,
"trace_type": "runtime",
"updated_at": "2026-03-12T08:45:03Z",
"workflow_target": {
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"name": "checkout-api"
},
"workflow_version": {
"id": "d0b91d0c-0f4b-4a28-8d9d-ccf0c427d6e8",
"label": "v2026.03.12"
}
}
404
Trace not found
Trace not found
GET
/api/v1/operator/traces/:trace_id/events
Web Session
List trace events
/api/v1/operator/traces/:trace_id/events
Web Session
List trace events
Description
Returns all events for a specific trace.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| trace_id | path | string | Yes | Trace UUID |
| filter[status] | query | string | No | Filter by event status |
| filter[event_type] | query | string | No | Exact-match event type filter |
Responses
200
List of events
Returns: TraceEventList
List of events
Returns: TraceEventList
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| trace_events | array<object> | Yes | List of trace event summaries |
| trace_events[].id | string | Yes | Trace event UUID |
| trace_events[].name | string | Yes | Human-readable event name |
| trace_events[].status | string (ok, error, pending) | Yes | Event status |
| trace_events[].started_at | datetime (ISO 8601) | No | Event start time |
| trace_events[].inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| trace_events[].sequence | integer | Yes | Sequence number within the trace |
| trace_events[].event_type | string | Yes | Event type label |
| trace_events[].duration_ms | integer | No | Duration in milliseconds |
| trace_events[].cost | number | No | Cost attributed to the event |
| trace_events[].ended_at | datetime (ISO 8601) | No | Event end time |
| trace_events[].latency_ms | integer | No | Latency in milliseconds |
| trace_events[].parent_event_id | string | No | Parent event UUID when nested |
| trace_events[].source_event_id | string | No | Caller-supplied source event id when the ingest is idempotent |
Example
{
"trace_events": [
{
"cost": 0.03,
"duration_ms": 950,
"ended_at": "2026-03-12T08:45:02Z",
"event_type": "llm.completion",
"id": "c34b4b67-f304-4b02-a8e1-2a053c4b8381",
"inserted_at": "2026-03-12T08:45:02Z",
"latency_ms": 950,
"name": "draft response",
"parent_event_id": null,
"sequence": 1,
"source_event_id": "evt-checkout-443-1",
"started_at": "2026-03-12T08:45:01Z",
"status": "error"
}
]
}
404
Trace not found
Trace not found
GET
/api/v1/operator/observability/search
Web Session
Search observability records (Session Auth Required)
/api/v1/operator/observability/search
Web Session
Search observability records (Session Auth Required)
Description
Runs a cross-surface search over indexed traces, events, alerts, replays, and failure groups. Default limit is 20, max 50. resource_types is an allowlist of trace | trace_event | failure_group | replay | alert_group. Note: This operator endpoint requires session authentication (browser login), not API bearer token.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| q | query | string | No | Search query text |
| resource_types | query | array | No | Optional resource types to include. Allowed: trace, trace_event, failure_group, replay, alert_group. |
| status | query | string | No | Status filter |
| severity | query | string | No | Severity filter |
| workflow_target_id | query | string | No | Workflow target UUID |
| service_agent_id | query | string | No | Service agent UUID |
| occurred_after | query | datetime (ISO 8601) | No | Lower bound for result timestamps |
| occurred_before | query | datetime (ISO 8601) | No | Upper bound for result timestamps |
| limit | query | integer | No | Maximum results to return. Default 20, max 50. |
Responses
200
Search results
Returns: ObservabilitySearchResults
Search results
Returns: ObservabilitySearchResults
GET
/api/v1/operator/observability/correlations
Web Session
Get related observability records
/api/v1/operator/observability/correlations
Web Session
Get related observability records
Description
Returns records related to a seed trace, alert, replay, or failure group based on shared correlation identifiers.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| resource_type | query | string | Yes | Seed resource type. Allowed: trace, trace_event, failure_group, replay, alert_group. |
| resource_id | query | string | Yes | Seed resource UUID |
Responses
200
Correlated records
Returns: ObservabilityCorrelations
Correlated records
Returns: ObservabilityCorrelations
404
Seed record not found
Seed record not found
GET
/api/v1/operator/alerts
Web Session
List alerts
/api/v1/operator/alerts
Web Session
List alerts
Description
Returns grouped operator alerts generated from anomaly rules and deliveries. Anomaly thresholds are evaluated against trace completion time (`ended_at`, falling back to `inserted_at`), and this endpoint returns the full matching grouped alert set for the current filters without a server-side cap.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| filter[operator_status] | query | string | No | Filter by operator lifecycle status |
| filter[severity] | query | string | No | Filter by alert severity |
| filter[event_type] | query | string | No | Exact-match event type filter |
| filter[workflow_target_id] | query | string | No | Workflow target UUID linked through the failure group |
Responses
200
List of grouped alerts with no server-side truncation
Returns: AlertList
List of grouped alerts with no server-side truncation
Returns: AlertList
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| alerts | array<object> | Yes | Grouped alerts with delivery context |
| alerts[].id | string | Yes | Representative delivery UUID for the grouped alert |
| alerts[].message | string | Yes | Operator-facing alert message |
| alerts[].trace | object | No | Trace linked to the alert |
| alerts[].trace.id | string | Yes | Trace UUID |
| alerts[].trace.name | string | Yes | Trace name |
| alerts[].trace.status | string (running, ok, error, partial) | Yes | Trace status |
| alerts[].trace.request_id | string | No | Internal request identifier |
| alerts[].title | string | Yes | Operator-facing alert title |
| alerts[].severity | string (info, warning, error, critical) | Yes | Alert severity |
| alerts[].inserted_at | datetime (ISO 8601) | Yes | Timestamp of the newest grouped delivery |
| alerts[].updated_at | datetime (ISO 8601) | Yes | Timestamp of the newest grouped delivery update |
| alerts[].summary | string | No | Optional short summary |
| alerts[].operator_status | string (open, acknowledged, snoozed, resolved) | Yes | Operator-managed alert lifecycle status |
| alerts[].acknowledged_at | datetime (ISO 8601) | No | When the alert was acknowledged |
| alerts[].acknowledged_by | object | No | User who acknowledged the alert |
| alerts[].acknowledged_by.id | string | Yes | User UUID |
| alerts[].acknowledged_by.email | string | Yes | User email |
| alerts[].alert_group_key | string | Yes | Stable grouped alert key |
| alerts[].alert_rule | object | No | Rule that emitted the alert |
| alerts[].alert_rule.id | string | Yes | Alert rule UUID |
| alerts[].alert_rule.name | string | Yes | Rule name |
| alerts[].alert_rule.severity | string (info, warning, error, critical) | Yes | Delivery severity attached by the rule |
| alerts[].alert_rule.conditions | object | Yes | Rule conditions map. For anomaly rules, `window_minutes` is evaluated against trace completion time (`ended_at`, falling back to `inserted_at`). |
| alerts[].alert_rule.event_type | string | No | Event type matched by the rule |
| alerts[].deliveries | array<object> | Yes | Per-destination delivery attempts for this grouped alert |
| alerts[].deliveries[].id | string | Yes | Alert delivery UUID |
| alerts[].deliveries[].status | string (pending, sent, failed, succeeded) | Yes | Transport delivery status |
| alerts[].deliveries[].destination | object | Yes | Destination used for this delivery |
| alerts[].deliveries[].destination.id | string | Yes | Alert destination UUID |
| alerts[].deliveries[].destination.name | string | Yes | Destination display name |
| alerts[].deliveries[].destination.type | string (email, slack, webhook, pagerduty) | Yes | Destination type |
| alerts[].deliveries[].error_message | string | No | Latest transport error message |
| alerts[].deliveries[].inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| alerts[].deliveries[].updated_at | datetime (ISO 8601) | Yes | Record update timestamp |
| alerts[].deliveries[].attempt_count | integer | Yes | Number of transport attempts |
| alerts[].deliveries[].failed_at | datetime (ISO 8601) | No | Timestamp of latest failed delivery |
| alerts[].deliveries[].last_attempt_at | datetime (ISO 8601) | No | Timestamp of the latest delivery attempt |
| alerts[].deliveries[].operator_status | string (open, acknowledged, snoozed, resolved) | Yes | Operator-managed alert lifecycle status |
| alerts[].deliveries[].succeeded_at | datetime (ISO 8601) | No | Timestamp of successful delivery |
| alerts[].delivery_count | integer | Yes | Number of deliveries in the group |
| alerts[].destinations | array<object> | Yes | Unique destinations attached to the grouped alert |
| alerts[].destinations[].id | string | Yes | Alert destination UUID |
| alerts[].destinations[].name | string | Yes | Destination display name |
| alerts[].destinations[].type | string (email, slack, webhook, pagerduty) | Yes | Destination type |
| alerts[].event_type | string | Yes | Alert event type |
| alerts[].failure_group | object | No | Failure group linked to the alert |
| alerts[].failure_group.id | string | Yes | Failure group UUID |
| alerts[].failure_group.status | string (open, acknowledged, resolved) | Yes | Failure group status |
| alerts[].failure_group.title | string | Yes | Failure group title |
| alerts[].failure_group.severity | string (low, medium, high, critical) | Yes | Failure group severity |
| alerts[].failure_group.occurrences | integer | Yes | Total grouped occurrences |
| alerts[].failure_group.workflow_target_id | string | No | Workflow target UUID |
| alerts[].latest_delivery_status | string (pending, sent, failed, succeeded) | Yes | Latest transport status across grouped deliveries |
| alerts[].resolved_at | datetime (ISO 8601) | No | When the alert was resolved |
| alerts[].resolved_by | object | No | User who resolved the alert |
| alerts[].resolved_by.id | string | Yes | User UUID |
| alerts[].resolved_by.email | string | Yes | User email |
| alerts[].resource_id | string | No | Primary resource identifier tied to the alert |
| alerts[].snoozed_until | datetime (ISO 8601) | No | When the alert snooze expires |
| alerts[].workflow_target | object | No | Workflow target connected through the failure group |
| alerts[].workflow_target.id | string | Yes | Workflow target UUID |
| alerts[].workflow_target.name | string | Yes | Workflow target name |
Example
{
"alerts": [
{
"acknowledged_at": "2026-03-12T09:08:00Z",
"acknowledged_by": {
"email": "[email protected]",
"id": "0f1cdac9-305d-4d11-a53d-3fca310c0635"
},
"alert_group_key": "36c7474d4600b9d0e1d29fe0c60b94f331762ee7c2f4f2fe875d97acbdaf0ef9",
"alert_rule": {
"conditions": {
"detector": "failure_group_occurrence_spike",
"min_failure_severity": "high",
"min_occurrences": 3,
"window_minutes": 60
},
"event_type": "failure_group.anomaly_detected",
"id": "5abffead-a4f6-479d-b2e1-d4176fa8d248",
"name": "Checkout anomaly",
"severity": "error"
},
"deliveries": [
{
"attempt_count": 1,
"destination": {
"id": "b2cbaf23-12dc-4137-b4f2-4951803a307e",
"name": "Primary Slack",
"type": "slack"
},
"error_message": null,
"failed_at": null,
"id": "6f1a651c-bfc7-41cc-b598-98a30fda59ca",
"inserted_at": "2026-03-12T09:05:02Z",
"last_attempt_at": "2026-03-12T09:05:03Z",
"operator_status": "acknowledged",
"status": "succeeded",
"succeeded_at": "2026-03-12T09:05:03Z",
"updated_at": "2026-03-12T09:05:03Z"
}
],
"delivery_count": 2,
"destinations": [
{
"id": "b2cbaf23-12dc-4137-b4f2-4951803a307e",
"name": "Primary Slack",
"type": "slack"
}
],
"event_type": "failure_group.anomaly_detected",
"failure_group": {
"id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"occurrences": 7,
"severity": "high",
"status": "open",
"title": "Payment timeout",
"workflow_target_id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea"
},
"id": "6f1a651c-bfc7-41cc-b598-98a30fda59ca",
"inserted_at": "2026-03-12T09:05:02Z",
"latest_delivery_status": "succeeded",
"message": "5 matching failures detected in the last 60 minutes for Payment timeout.",
"operator_status": "acknowledged",
"resolved_at": null,
"resolved_by": null,
"resource_id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"severity": "error",
"snoozed_until": null,
"summary": "Timeout after payment provider retry budget was exhausted.",
"title": "Payment timeout anomaly detected",
"trace": {
"id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"name": "checkout runtime trace",
"request_id": "req-01HQ5PX7P7F4",
"status": "error"
},
"updated_at": "2026-03-12T09:05:03Z",
"workflow_target": {
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"name": "checkout-api"
}
}
]
}
400
Invalid alert filter
Invalid alert filter
GET
/api/v1/operator/alerts/:id
Web Session
Get alert details
/api/v1/operator/alerts/:id
Web Session
Get alert details
Description
Returns grouped alert details and per-destination delivery history for any representative delivery in the alert group.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Representative alert UUID |
Responses
200
Alert details
Returns: Alert
Alert details
Returns: Alert
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Representative delivery UUID for the grouped alert |
| message | string | Yes | Operator-facing alert message |
| trace | object | No | Trace linked to the alert |
| trace.id | string | Yes | Trace UUID |
| trace.name | string | Yes | Trace name |
| trace.status | string (running, ok, error, partial) | Yes | Trace status |
| trace.request_id | string | No | Internal request identifier |
| title | string | Yes | Operator-facing alert title |
| severity | string (info, warning, error, critical) | Yes | Alert severity |
| inserted_at | datetime (ISO 8601) | Yes | Timestamp of the newest grouped delivery |
| updated_at | datetime (ISO 8601) | Yes | Timestamp of the newest grouped delivery update |
| summary | string | No | Optional short summary |
| operator_status | string (open, acknowledged, snoozed, resolved) | Yes | Operator-managed alert lifecycle status |
| acknowledged_at | datetime (ISO 8601) | No | When the alert was acknowledged |
| acknowledged_by | object | No | User who acknowledged the alert |
| acknowledged_by.id | string | Yes | User UUID |
| acknowledged_by.email | string | Yes | User email |
| alert_group_key | string | Yes | Stable grouped alert key |
| alert_rule | object | No | Rule that emitted the alert |
| alert_rule.id | string | Yes | Alert rule UUID |
| alert_rule.name | string | Yes | Rule name |
| alert_rule.severity | string (info, warning, error, critical) | Yes | Delivery severity attached by the rule |
| alert_rule.conditions | object | Yes | Rule conditions map. For anomaly rules, `window_minutes` is evaluated against trace completion time (`ended_at`, falling back to `inserted_at`). |
| alert_rule.event_type | string | No | Event type matched by the rule |
| deliveries | array<object> | Yes | Per-destination delivery attempts for this grouped alert |
| deliveries[].id | string | Yes | Alert delivery UUID |
| deliveries[].status | string (pending, sent, failed, succeeded) | Yes | Transport delivery status |
| deliveries[].destination | object | Yes | Destination used for this delivery |
| deliveries[].destination.id | string | Yes | Alert destination UUID |
| deliveries[].destination.name | string | Yes | Destination display name |
| deliveries[].destination.type | string (email, slack, webhook, pagerduty) | Yes | Destination type |
| deliveries[].error_message | string | No | Latest transport error message |
| deliveries[].inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| deliveries[].updated_at | datetime (ISO 8601) | Yes | Record update timestamp |
| deliveries[].attempt_count | integer | Yes | Number of transport attempts |
| deliveries[].failed_at | datetime (ISO 8601) | No | Timestamp of latest failed delivery |
| deliveries[].last_attempt_at | datetime (ISO 8601) | No | Timestamp of the latest delivery attempt |
| deliveries[].operator_status | string (open, acknowledged, snoozed, resolved) | Yes | Operator-managed alert lifecycle status |
| deliveries[].succeeded_at | datetime (ISO 8601) | No | Timestamp of successful delivery |
| delivery_count | integer | Yes | Number of deliveries in the group |
| destinations | array<object> | Yes | Unique destinations attached to the grouped alert |
| destinations[].id | string | Yes | Alert destination UUID |
| destinations[].name | string | Yes | Destination display name |
| destinations[].type | string (email, slack, webhook, pagerduty) | Yes | Destination type |
| event_type | string | Yes | Alert event type |
| failure_group | object | No | Failure group linked to the alert |
| failure_group.id | string | Yes | Failure group UUID |
| failure_group.status | string (open, acknowledged, resolved) | Yes | Failure group status |
| failure_group.title | string | Yes | Failure group title |
| failure_group.severity | string (low, medium, high, critical) | Yes | Failure group severity |
| failure_group.occurrences | integer | Yes | Total grouped occurrences |
| failure_group.workflow_target_id | string | No | Workflow target UUID |
| latest_delivery_status | string (pending, sent, failed, succeeded) | Yes | Latest transport status across grouped deliveries |
| resolved_at | datetime (ISO 8601) | No | When the alert was resolved |
| resolved_by | object | No | User who resolved the alert |
| resolved_by.id | string | Yes | User UUID |
| resolved_by.email | string | Yes | User email |
| resource_id | string | No | Primary resource identifier tied to the alert |
| snoozed_until | datetime (ISO 8601) | No | When the alert snooze expires |
| workflow_target | object | No | Workflow target connected through the failure group |
| workflow_target.id | string | Yes | Workflow target UUID |
| workflow_target.name | string | Yes | Workflow target name |
Example
{
"acknowledged_at": "2026-03-12T09:08:00Z",
"acknowledged_by": {
"email": "[email protected]",
"id": "0f1cdac9-305d-4d11-a53d-3fca310c0635"
},
"alert_group_key": "36c7474d4600b9d0e1d29fe0c60b94f331762ee7c2f4f2fe875d97acbdaf0ef9",
"alert_rule": {
"conditions": {
"detector": "failure_group_occurrence_spike",
"min_failure_severity": "high",
"min_occurrences": 3,
"window_minutes": 60
},
"event_type": "failure_group.anomaly_detected",
"id": "5abffead-a4f6-479d-b2e1-d4176fa8d248",
"name": "Checkout anomaly",
"severity": "error"
},
"deliveries": [
{
"attempt_count": 1,
"destination": {
"id": "b2cbaf23-12dc-4137-b4f2-4951803a307e",
"name": "Primary Slack",
"type": "slack"
},
"error_message": null,
"failed_at": null,
"id": "6f1a651c-bfc7-41cc-b598-98a30fda59ca",
"inserted_at": "2026-03-12T09:05:02Z",
"last_attempt_at": "2026-03-12T09:05:03Z",
"operator_status": "acknowledged",
"status": "succeeded",
"succeeded_at": "2026-03-12T09:05:03Z",
"updated_at": "2026-03-12T09:05:03Z"
}
],
"delivery_count": 2,
"destinations": [
{
"id": "b2cbaf23-12dc-4137-b4f2-4951803a307e",
"name": "Primary Slack",
"type": "slack"
}
],
"event_type": "failure_group.anomaly_detected",
"failure_group": {
"id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"occurrences": 7,
"severity": "high",
"status": "open",
"title": "Payment timeout",
"workflow_target_id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea"
},
"id": "6f1a651c-bfc7-41cc-b598-98a30fda59ca",
"inserted_at": "2026-03-12T09:05:02Z",
"latest_delivery_status": "succeeded",
"message": "5 matching failures detected in the last 60 minutes for Payment timeout.",
"operator_status": "acknowledged",
"resolved_at": null,
"resolved_by": null,
"resource_id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"severity": "error",
"snoozed_until": null,
"summary": "Timeout after payment provider retry budget was exhausted.",
"title": "Payment timeout anomaly detected",
"trace": {
"id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"name": "checkout runtime trace",
"request_id": "req-01HQ5PX7P7F4",
"status": "error"
},
"updated_at": "2026-03-12T09:05:03Z",
"workflow_target": {
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"name": "checkout-api"
}
}
404
Alert not found
Alert not found
POST
/api/v1/operator/alerts/:id/acknowledge
Web Session
Acknowledge alert
/api/v1/operator/alerts/:id/acknowledge
Web Session
Acknowledge alert
Description
Marks the grouped alert as acknowledged across all linked deliveries. Invalid IDs return 422 and missing alerts return 404.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Representative alert UUID |
Responses
200
Acknowledged alert
Returns: Alert
Acknowledged alert
Returns: Alert
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Representative delivery UUID for the grouped alert |
| message | string | Yes | Operator-facing alert message |
| trace | object | No | Trace linked to the alert |
| trace.id | string | Yes | Trace UUID |
| trace.name | string | Yes | Trace name |
| trace.status | string (running, ok, error, partial) | Yes | Trace status |
| trace.request_id | string | No | Internal request identifier |
| title | string | Yes | Operator-facing alert title |
| severity | string (info, warning, error, critical) | Yes | Alert severity |
| inserted_at | datetime (ISO 8601) | Yes | Timestamp of the newest grouped delivery |
| updated_at | datetime (ISO 8601) | Yes | Timestamp of the newest grouped delivery update |
| summary | string | No | Optional short summary |
| operator_status | string (open, acknowledged, snoozed, resolved) | Yes | Operator-managed alert lifecycle status |
| acknowledged_at | datetime (ISO 8601) | No | When the alert was acknowledged |
| acknowledged_by | object | No | User who acknowledged the alert |
| acknowledged_by.id | string | Yes | User UUID |
| acknowledged_by.email | string | Yes | User email |
| alert_group_key | string | Yes | Stable grouped alert key |
| alert_rule | object | No | Rule that emitted the alert |
| alert_rule.id | string | Yes | Alert rule UUID |
| alert_rule.name | string | Yes | Rule name |
| alert_rule.severity | string (info, warning, error, critical) | Yes | Delivery severity attached by the rule |
| alert_rule.conditions | object | Yes | Rule conditions map. For anomaly rules, `window_minutes` is evaluated against trace completion time (`ended_at`, falling back to `inserted_at`). |
| alert_rule.event_type | string | No | Event type matched by the rule |
| deliveries | array<object> | Yes | Per-destination delivery attempts for this grouped alert |
| deliveries[].id | string | Yes | Alert delivery UUID |
| deliveries[].status | string (pending, sent, failed, succeeded) | Yes | Transport delivery status |
| deliveries[].destination | object | Yes | Destination used for this delivery |
| deliveries[].destination.id | string | Yes | Alert destination UUID |
| deliveries[].destination.name | string | Yes | Destination display name |
| deliveries[].destination.type | string (email, slack, webhook, pagerduty) | Yes | Destination type |
| deliveries[].error_message | string | No | Latest transport error message |
| deliveries[].inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| deliveries[].updated_at | datetime (ISO 8601) | Yes | Record update timestamp |
| deliveries[].attempt_count | integer | Yes | Number of transport attempts |
| deliveries[].failed_at | datetime (ISO 8601) | No | Timestamp of latest failed delivery |
| deliveries[].last_attempt_at | datetime (ISO 8601) | No | Timestamp of the latest delivery attempt |
| deliveries[].operator_status | string (open, acknowledged, snoozed, resolved) | Yes | Operator-managed alert lifecycle status |
| deliveries[].succeeded_at | datetime (ISO 8601) | No | Timestamp of successful delivery |
| delivery_count | integer | Yes | Number of deliveries in the group |
| destinations | array<object> | Yes | Unique destinations attached to the grouped alert |
| destinations[].id | string | Yes | Alert destination UUID |
| destinations[].name | string | Yes | Destination display name |
| destinations[].type | string (email, slack, webhook, pagerduty) | Yes | Destination type |
| event_type | string | Yes | Alert event type |
| failure_group | object | No | Failure group linked to the alert |
| failure_group.id | string | Yes | Failure group UUID |
| failure_group.status | string (open, acknowledged, resolved) | Yes | Failure group status |
| failure_group.title | string | Yes | Failure group title |
| failure_group.severity | string (low, medium, high, critical) | Yes | Failure group severity |
| failure_group.occurrences | integer | Yes | Total grouped occurrences |
| failure_group.workflow_target_id | string | No | Workflow target UUID |
| latest_delivery_status | string (pending, sent, failed, succeeded) | Yes | Latest transport status across grouped deliveries |
| resolved_at | datetime (ISO 8601) | No | When the alert was resolved |
| resolved_by | object | No | User who resolved the alert |
| resolved_by.id | string | Yes | User UUID |
| resolved_by.email | string | Yes | User email |
| resource_id | string | No | Primary resource identifier tied to the alert |
| snoozed_until | datetime (ISO 8601) | No | When the alert snooze expires |
| workflow_target | object | No | Workflow target connected through the failure group |
| workflow_target.id | string | Yes | Workflow target UUID |
| workflow_target.name | string | Yes | Workflow target name |
Example
{
"acknowledged_at": "2026-03-12T09:08:00Z",
"acknowledged_by": {
"email": "[email protected]",
"id": "0f1cdac9-305d-4d11-a53d-3fca310c0635"
},
"alert_group_key": "36c7474d4600b9d0e1d29fe0c60b94f331762ee7c2f4f2fe875d97acbdaf0ef9",
"alert_rule": {
"conditions": {
"detector": "failure_group_occurrence_spike",
"min_failure_severity": "high",
"min_occurrences": 3,
"window_minutes": 60
},
"event_type": "failure_group.anomaly_detected",
"id": "5abffead-a4f6-479d-b2e1-d4176fa8d248",
"name": "Checkout anomaly",
"severity": "error"
},
"deliveries": [
{
"attempt_count": 1,
"destination": {
"id": "b2cbaf23-12dc-4137-b4f2-4951803a307e",
"name": "Primary Slack",
"type": "slack"
},
"error_message": null,
"failed_at": null,
"id": "6f1a651c-bfc7-41cc-b598-98a30fda59ca",
"inserted_at": "2026-03-12T09:05:02Z",
"last_attempt_at": "2026-03-12T09:05:03Z",
"operator_status": "acknowledged",
"status": "succeeded",
"succeeded_at": "2026-03-12T09:05:03Z",
"updated_at": "2026-03-12T09:05:03Z"
}
],
"delivery_count": 2,
"destinations": [
{
"id": "b2cbaf23-12dc-4137-b4f2-4951803a307e",
"name": "Primary Slack",
"type": "slack"
}
],
"event_type": "failure_group.anomaly_detected",
"failure_group": {
"id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"occurrences": 7,
"severity": "high",
"status": "open",
"title": "Payment timeout",
"workflow_target_id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea"
},
"id": "6f1a651c-bfc7-41cc-b598-98a30fda59ca",
"inserted_at": "2026-03-12T09:05:02Z",
"latest_delivery_status": "succeeded",
"message": "5 matching failures detected in the last 60 minutes for Payment timeout.",
"operator_status": "acknowledged",
"resolved_at": null,
"resolved_by": null,
"resource_id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"severity": "error",
"snoozed_until": null,
"summary": "Timeout after payment provider retry budget was exhausted.",
"title": "Payment timeout anomaly detected",
"trace": {
"id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"name": "checkout runtime trace",
"request_id": "req-01HQ5PX7P7F4",
"status": "error"
},
"updated_at": "2026-03-12T09:05:03Z",
"workflow_target": {
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"name": "checkout-api"
}
}
404
Alert not found
Alert not found
422
Invalid alert ID format
Invalid alert ID format
POST
/api/v1/operator/alerts/:id/snooze
Web Session
Snooze alert
/api/v1/operator/alerts/:id/snooze
Web Session
Snooze alert
Description
Snoozes the grouped alert for a fixed duration in minutes. Invalid durations return 400, invalid IDs return 422, and missing alerts return 404.
Auth
Web SessionRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
| duration_minutes | integer | Yes | How long to snooze the alert |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Representative alert UUID |
Responses
200
Snoozed alert
Returns: Alert
Snoozed alert
Returns: Alert
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Representative delivery UUID for the grouped alert |
| message | string | Yes | Operator-facing alert message |
| trace | object | No | Trace linked to the alert |
| trace.id | string | Yes | Trace UUID |
| trace.name | string | Yes | Trace name |
| trace.status | string (running, ok, error, partial) | Yes | Trace status |
| trace.request_id | string | No | Internal request identifier |
| title | string | Yes | Operator-facing alert title |
| severity | string (info, warning, error, critical) | Yes | Alert severity |
| inserted_at | datetime (ISO 8601) | Yes | Timestamp of the newest grouped delivery |
| updated_at | datetime (ISO 8601) | Yes | Timestamp of the newest grouped delivery update |
| summary | string | No | Optional short summary |
| operator_status | string (open, acknowledged, snoozed, resolved) | Yes | Operator-managed alert lifecycle status |
| acknowledged_at | datetime (ISO 8601) | No | When the alert was acknowledged |
| acknowledged_by | object | No | User who acknowledged the alert |
| acknowledged_by.id | string | Yes | User UUID |
| acknowledged_by.email | string | Yes | User email |
| alert_group_key | string | Yes | Stable grouped alert key |
| alert_rule | object | No | Rule that emitted the alert |
| alert_rule.id | string | Yes | Alert rule UUID |
| alert_rule.name | string | Yes | Rule name |
| alert_rule.severity | string (info, warning, error, critical) | Yes | Delivery severity attached by the rule |
| alert_rule.conditions | object | Yes | Rule conditions map. For anomaly rules, `window_minutes` is evaluated against trace completion time (`ended_at`, falling back to `inserted_at`). |
| alert_rule.event_type | string | No | Event type matched by the rule |
| deliveries | array<object> | Yes | Per-destination delivery attempts for this grouped alert |
| deliveries[].id | string | Yes | Alert delivery UUID |
| deliveries[].status | string (pending, sent, failed, succeeded) | Yes | Transport delivery status |
| deliveries[].destination | object | Yes | Destination used for this delivery |
| deliveries[].destination.id | string | Yes | Alert destination UUID |
| deliveries[].destination.name | string | Yes | Destination display name |
| deliveries[].destination.type | string (email, slack, webhook, pagerduty) | Yes | Destination type |
| deliveries[].error_message | string | No | Latest transport error message |
| deliveries[].inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| deliveries[].updated_at | datetime (ISO 8601) | Yes | Record update timestamp |
| deliveries[].attempt_count | integer | Yes | Number of transport attempts |
| deliveries[].failed_at | datetime (ISO 8601) | No | Timestamp of latest failed delivery |
| deliveries[].last_attempt_at | datetime (ISO 8601) | No | Timestamp of the latest delivery attempt |
| deliveries[].operator_status | string (open, acknowledged, snoozed, resolved) | Yes | Operator-managed alert lifecycle status |
| deliveries[].succeeded_at | datetime (ISO 8601) | No | Timestamp of successful delivery |
| delivery_count | integer | Yes | Number of deliveries in the group |
| destinations | array<object> | Yes | Unique destinations attached to the grouped alert |
| destinations[].id | string | Yes | Alert destination UUID |
| destinations[].name | string | Yes | Destination display name |
| destinations[].type | string (email, slack, webhook, pagerduty) | Yes | Destination type |
| event_type | string | Yes | Alert event type |
| failure_group | object | No | Failure group linked to the alert |
| failure_group.id | string | Yes | Failure group UUID |
| failure_group.status | string (open, acknowledged, resolved) | Yes | Failure group status |
| failure_group.title | string | Yes | Failure group title |
| failure_group.severity | string (low, medium, high, critical) | Yes | Failure group severity |
| failure_group.occurrences | integer | Yes | Total grouped occurrences |
| failure_group.workflow_target_id | string | No | Workflow target UUID |
| latest_delivery_status | string (pending, sent, failed, succeeded) | Yes | Latest transport status across grouped deliveries |
| resolved_at | datetime (ISO 8601) | No | When the alert was resolved |
| resolved_by | object | No | User who resolved the alert |
| resolved_by.id | string | Yes | User UUID |
| resolved_by.email | string | Yes | User email |
| resource_id | string | No | Primary resource identifier tied to the alert |
| snoozed_until | datetime (ISO 8601) | No | When the alert snooze expires |
| workflow_target | object | No | Workflow target connected through the failure group |
| workflow_target.id | string | Yes | Workflow target UUID |
| workflow_target.name | string | Yes | Workflow target name |
Example
{
"acknowledged_at": "2026-03-12T09:08:00Z",
"acknowledged_by": {
"email": "[email protected]",
"id": "0f1cdac9-305d-4d11-a53d-3fca310c0635"
},
"alert_group_key": "36c7474d4600b9d0e1d29fe0c60b94f331762ee7c2f4f2fe875d97acbdaf0ef9",
"alert_rule": {
"conditions": {
"detector": "failure_group_occurrence_spike",
"min_failure_severity": "high",
"min_occurrences": 3,
"window_minutes": 60
},
"event_type": "failure_group.anomaly_detected",
"id": "5abffead-a4f6-479d-b2e1-d4176fa8d248",
"name": "Checkout anomaly",
"severity": "error"
},
"deliveries": [
{
"attempt_count": 1,
"destination": {
"id": "b2cbaf23-12dc-4137-b4f2-4951803a307e",
"name": "Primary Slack",
"type": "slack"
},
"error_message": null,
"failed_at": null,
"id": "6f1a651c-bfc7-41cc-b598-98a30fda59ca",
"inserted_at": "2026-03-12T09:05:02Z",
"last_attempt_at": "2026-03-12T09:05:03Z",
"operator_status": "acknowledged",
"status": "succeeded",
"succeeded_at": "2026-03-12T09:05:03Z",
"updated_at": "2026-03-12T09:05:03Z"
}
],
"delivery_count": 2,
"destinations": [
{
"id": "b2cbaf23-12dc-4137-b4f2-4951803a307e",
"name": "Primary Slack",
"type": "slack"
}
],
"event_type": "failure_group.anomaly_detected",
"failure_group": {
"id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"occurrences": 7,
"severity": "high",
"status": "open",
"title": "Payment timeout",
"workflow_target_id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea"
},
"id": "6f1a651c-bfc7-41cc-b598-98a30fda59ca",
"inserted_at": "2026-03-12T09:05:02Z",
"latest_delivery_status": "succeeded",
"message": "5 matching failures detected in the last 60 minutes for Payment timeout.",
"operator_status": "snoozed",
"resolved_at": null,
"resolved_by": null,
"resource_id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"severity": "error",
"snoozed_until": "2026-03-12T13:05:03Z",
"summary": "Timeout after payment provider retry budget was exhausted.",
"title": "Payment timeout anomaly detected",
"trace": {
"id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"name": "checkout runtime trace",
"request_id": "req-01HQ5PX7P7F4",
"status": "error"
},
"updated_at": "2026-03-12T09:05:03Z",
"workflow_target": {
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"name": "checkout-api"
}
}
400
Invalid snooze duration
Invalid snooze duration
404
Alert not found
Alert not found
422
Invalid alert ID format
Invalid alert ID format
POST
/api/v1/operator/alerts/:id/resolve
Web Session
Resolve alert
/api/v1/operator/alerts/:id/resolve
Web Session
Resolve alert
Description
Marks the grouped alert as resolved across all linked deliveries. Invalid IDs return 422 and missing alerts return 404.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Representative alert UUID |
Responses
200
Resolved alert
Returns: Alert
Resolved alert
Returns: Alert
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Representative delivery UUID for the grouped alert |
| message | string | Yes | Operator-facing alert message |
| trace | object | No | Trace linked to the alert |
| trace.id | string | Yes | Trace UUID |
| trace.name | string | Yes | Trace name |
| trace.status | string (running, ok, error, partial) | Yes | Trace status |
| trace.request_id | string | No | Internal request identifier |
| title | string | Yes | Operator-facing alert title |
| severity | string (info, warning, error, critical) | Yes | Alert severity |
| inserted_at | datetime (ISO 8601) | Yes | Timestamp of the newest grouped delivery |
| updated_at | datetime (ISO 8601) | Yes | Timestamp of the newest grouped delivery update |
| summary | string | No | Optional short summary |
| operator_status | string (open, acknowledged, snoozed, resolved) | Yes | Operator-managed alert lifecycle status |
| acknowledged_at | datetime (ISO 8601) | No | When the alert was acknowledged |
| acknowledged_by | object | No | User who acknowledged the alert |
| acknowledged_by.id | string | Yes | User UUID |
| acknowledged_by.email | string | Yes | User email |
| alert_group_key | string | Yes | Stable grouped alert key |
| alert_rule | object | No | Rule that emitted the alert |
| alert_rule.id | string | Yes | Alert rule UUID |
| alert_rule.name | string | Yes | Rule name |
| alert_rule.severity | string (info, warning, error, critical) | Yes | Delivery severity attached by the rule |
| alert_rule.conditions | object | Yes | Rule conditions map. For anomaly rules, `window_minutes` is evaluated against trace completion time (`ended_at`, falling back to `inserted_at`). |
| alert_rule.event_type | string | No | Event type matched by the rule |
| deliveries | array<object> | Yes | Per-destination delivery attempts for this grouped alert |
| deliveries[].id | string | Yes | Alert delivery UUID |
| deliveries[].status | string (pending, sent, failed, succeeded) | Yes | Transport delivery status |
| deliveries[].destination | object | Yes | Destination used for this delivery |
| deliveries[].destination.id | string | Yes | Alert destination UUID |
| deliveries[].destination.name | string | Yes | Destination display name |
| deliveries[].destination.type | string (email, slack, webhook, pagerduty) | Yes | Destination type |
| deliveries[].error_message | string | No | Latest transport error message |
| deliveries[].inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| deliveries[].updated_at | datetime (ISO 8601) | Yes | Record update timestamp |
| deliveries[].attempt_count | integer | Yes | Number of transport attempts |
| deliveries[].failed_at | datetime (ISO 8601) | No | Timestamp of latest failed delivery |
| deliveries[].last_attempt_at | datetime (ISO 8601) | No | Timestamp of the latest delivery attempt |
| deliveries[].operator_status | string (open, acknowledged, snoozed, resolved) | Yes | Operator-managed alert lifecycle status |
| deliveries[].succeeded_at | datetime (ISO 8601) | No | Timestamp of successful delivery |
| delivery_count | integer | Yes | Number of deliveries in the group |
| destinations | array<object> | Yes | Unique destinations attached to the grouped alert |
| destinations[].id | string | Yes | Alert destination UUID |
| destinations[].name | string | Yes | Destination display name |
| destinations[].type | string (email, slack, webhook, pagerduty) | Yes | Destination type |
| event_type | string | Yes | Alert event type |
| failure_group | object | No | Failure group linked to the alert |
| failure_group.id | string | Yes | Failure group UUID |
| failure_group.status | string (open, acknowledged, resolved) | Yes | Failure group status |
| failure_group.title | string | Yes | Failure group title |
| failure_group.severity | string (low, medium, high, critical) | Yes | Failure group severity |
| failure_group.occurrences | integer | Yes | Total grouped occurrences |
| failure_group.workflow_target_id | string | No | Workflow target UUID |
| latest_delivery_status | string (pending, sent, failed, succeeded) | Yes | Latest transport status across grouped deliveries |
| resolved_at | datetime (ISO 8601) | No | When the alert was resolved |
| resolved_by | object | No | User who resolved the alert |
| resolved_by.id | string | Yes | User UUID |
| resolved_by.email | string | Yes | User email |
| resource_id | string | No | Primary resource identifier tied to the alert |
| snoozed_until | datetime (ISO 8601) | No | When the alert snooze expires |
| workflow_target | object | No | Workflow target connected through the failure group |
| workflow_target.id | string | Yes | Workflow target UUID |
| workflow_target.name | string | Yes | Workflow target name |
Example
{
"acknowledged_at": "2026-03-12T09:08:00Z",
"acknowledged_by": {
"email": "[email protected]",
"id": "0f1cdac9-305d-4d11-a53d-3fca310c0635"
},
"alert_group_key": "36c7474d4600b9d0e1d29fe0c60b94f331762ee7c2f4f2fe875d97acbdaf0ef9",
"alert_rule": {
"conditions": {
"detector": "failure_group_occurrence_spike",
"min_failure_severity": "high",
"min_occurrences": 3,
"window_minutes": 60
},
"event_type": "failure_group.anomaly_detected",
"id": "5abffead-a4f6-479d-b2e1-d4176fa8d248",
"name": "Checkout anomaly",
"severity": "error"
},
"deliveries": [
{
"attempt_count": 1,
"destination": {
"id": "b2cbaf23-12dc-4137-b4f2-4951803a307e",
"name": "Primary Slack",
"type": "slack"
},
"error_message": null,
"failed_at": null,
"id": "6f1a651c-bfc7-41cc-b598-98a30fda59ca",
"inserted_at": "2026-03-12T09:05:02Z",
"last_attempt_at": "2026-03-12T09:05:03Z",
"operator_status": "acknowledged",
"status": "succeeded",
"succeeded_at": "2026-03-12T09:05:03Z",
"updated_at": "2026-03-12T09:05:03Z"
}
],
"delivery_count": 2,
"destinations": [
{
"id": "b2cbaf23-12dc-4137-b4f2-4951803a307e",
"name": "Primary Slack",
"type": "slack"
}
],
"event_type": "failure_group.anomaly_detected",
"failure_group": {
"id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"occurrences": 7,
"severity": "high",
"status": "open",
"title": "Payment timeout",
"workflow_target_id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea"
},
"id": "6f1a651c-bfc7-41cc-b598-98a30fda59ca",
"inserted_at": "2026-03-12T09:05:02Z",
"latest_delivery_status": "succeeded",
"message": "5 matching failures detected in the last 60 minutes for Payment timeout.",
"operator_status": "resolved",
"resolved_at": "2026-03-12T09:15:00Z",
"resolved_by": null,
"resource_id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"severity": "error",
"snoozed_until": null,
"summary": "Timeout after payment provider retry budget was exhausted.",
"title": "Payment timeout anomaly detected",
"trace": {
"id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"name": "checkout runtime trace",
"request_id": "req-01HQ5PX7P7F4",
"status": "error"
},
"updated_at": "2026-03-12T09:05:03Z",
"workflow_target": {
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"name": "checkout-api"
}
}
404
Alert not found
Alert not found
422
Invalid alert ID format
Invalid alert ID format
GET
/api/v1/operator/failure_groups
Web Session
List failure groups
/api/v1/operator/failure_groups
Web Session
List failure groups
Description
Returns grouped failure patterns for analysis.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| filter[status] | query | string | No | Filter by workflow status |
| filter[severity] | query | string | No | Filter by failure severity |
| filter[workflow_target_id] | query | string | No | Workflow target UUID |
Responses
200
List of failure groups
Returns: FailureGroupList
List of failure groups
Returns: FailureGroupList
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| failure_groups | array<object> | Yes | List of grouped failures |
| failure_groups[].id | string | Yes | Failure group UUID |
| failure_groups[].status | string (open, acknowledged, resolved) | Yes | Failure group status |
| failure_groups[].title | string | Yes | Operator-facing failure title |
| failure_groups[].signature | string | Yes | Stable failure signature |
| failure_groups[].severity | string (low, medium, high, critical) | Yes | Failure severity |
| failure_groups[].inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| failure_groups[].updated_at | datetime (ISO 8601) | Yes | Record update timestamp |
| failure_groups[].last_seen_at | datetime (ISO 8601) | No | Timestamp of the most recent occurrence |
| failure_groups[].occurrences | integer | Yes | Total grouped occurrences |
| failure_groups[].workflow_target | object | No | Workflow target associated with the grouped failures |
| failure_groups[].workflow_target.id | string | Yes | Workflow target UUID |
| failure_groups[].workflow_target.name | string | Yes | Workflow target name |
| failure_groups[].assignee | string | No | Current assignee handling the incident |
| failure_groups[].collaboration_notes | array<object> | Yes | Collaboration notes for the failure group |
| failure_groups[].collaboration_notes[].inserted_at | datetime (ISO 8601) | Yes | Entry insertion timestamp |
| failure_groups[].collaboration_notes[].author_email | string | No | Author email |
| failure_groups[].collaboration_notes[].author_id | string | No | Author user UUID |
| failure_groups[].collaboration_notes[].note | string | Yes | Free-form collaboration note |
| failure_groups[].escalation_level | string | No | Current escalation level |
| failure_groups[].escalation_updates | array<object> | Yes | Escalation timeline entries |
| failure_groups[].escalation_updates[].level | string | No | Escalation level at the time of the note |
| failure_groups[].escalation_updates[].inserted_at | datetime (ISO 8601) | Yes | Entry insertion timestamp |
| failure_groups[].escalation_updates[].author_email | string | No | Author email |
| failure_groups[].escalation_updates[].author_id | string | No | Author user UUID |
| failure_groups[].escalation_updates[].note | string | Yes | Escalation note |
| failure_groups[].first_seen_at | datetime (ISO 8601) | No | Timestamp of the first occurrence |
| failure_groups[].incident_eval_suggestions | array<object> | Yes | Incident eval suggestions generated from this failure group |
| failure_groups[].incident_eval_suggestions[].id | string | Yes | Incident eval suggestion UUID |
| failure_groups[].incident_eval_suggestions[].status | string (draft, approved, rejected, promoted) | Yes | Suggestion status |
| failure_groups[].incident_eval_suggestions[].approved_eval_case_id | string | No | Approved eval case UUID |
| failure_groups[].incident_eval_suggestions[].proposed_name | string | No | Suggested eval name |
| failure_groups[].incident_eval_suggestions[].target_eval_suite_id | string | No | Target eval suite UUID |
| failure_groups[].incident_owner | string | No | Incident owner responsible for the group |
| failure_groups[].playbook_url | string | No | Linked remediation playbook URL |
| failure_groups[].remediation_checklist | array<object> | Yes | Checklist items attached to the remediation plan |
| failure_groups[].remediation_checklist[].done | boolean | Yes | Whether the item is complete |
| failure_groups[].remediation_checklist[].item | string | Yes | Checklist entry text |
| failure_groups[].remediation_due_at | datetime (ISO 8601) | No | Target remediation due time |
| failure_groups[].remediation_status | string | No | Current remediation state |
| failure_groups[].sample_trace | object | No | Sample trace summary |
| failure_groups[].sample_trace.id | string | Yes | Trace UUID |
| failure_groups[].sample_trace.name | string | Yes | Trace name |
| failure_groups[].sample_trace.status | string (running, ok, error, partial) | Yes | Trace status |
| failure_groups[].sample_trace_id | string | No | UUID of the sample trace |
Example
{
"failure_groups": [
{
"assignee": "[email protected]",
"collaboration_notes": [
{
"author_email": "[email protected]",
"author_id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"inserted_at": "2026-03-12T08:47:00Z",
"note": "Started triage and log correlation."
}
],
"escalation_level": "l2",
"escalation_updates": [
{
"author_email": "[email protected]",
"author_id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"inserted_at": "2026-03-12T08:46:00Z",
"level": "l2",
"note": "Paging platform responders."
}
],
"first_seen_at": "2026-03-11T22:14:00Z",
"id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"incident_eval_suggestions": [
{
"approved_eval_case_id": null,
"id": "6a4473e5-5a35-4f0b-b99e-34c59d495f67",
"proposed_name": "Payment timeout recovery eval",
"status": "draft",
"target_eval_suite_id": "9e1f1538-ff37-48f0-a2f9-65066d7d6699"
}
],
"incident_owner": "[email protected]",
"inserted_at": "2026-03-11T22:14:00Z",
"last_seen_at": "2026-03-12T08:45:03Z",
"occurrences": 7,
"playbook_url": "https://runbooks.example.com/failure/payment-timeout",
"remediation_checklist": [
{
"done": false,
"item": "Collect provider traces"
},
{
"done": false,
"item": "Roll out timeout hotfix"
}
],
"remediation_due_at": "2026-03-12T10:00:00Z",
"remediation_status": "in_progress",
"sample_trace": {
"id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"name": "checkout runtime trace",
"status": "error"
},
"sample_trace_id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"severity": "high",
"signature": "payment:timeout",
"status": "open",
"title": "Payment timeout",
"updated_at": "2026-03-12T08:45:03Z",
"workflow_target": {
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"name": "checkout-api"
}
}
]
}
GET
/api/v1/operator/failure_groups/:id
Web Session
Get failure group details
/api/v1/operator/failure_groups/:id
Web Session
Get failure group details
Description
Returns details of a specific failure group.
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Failure group UUID |
Responses
200
Failure group details
Returns: FailureGroup
Failure group details
Returns: FailureGroup
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Failure group UUID |
| status | string (open, acknowledged, resolved) | Yes | Failure group status |
| title | string | Yes | Operator-facing failure title |
| signature | string | Yes | Stable failure signature |
| severity | string (low, medium, high, critical) | Yes | Failure severity |
| inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| updated_at | datetime (ISO 8601) | Yes | Record update timestamp |
| last_seen_at | datetime (ISO 8601) | No | Timestamp of the most recent occurrence |
| occurrences | integer | Yes | Total grouped occurrences |
| workflow_target | object | No | Workflow target associated with the grouped failures |
| workflow_target.id | string | Yes | Workflow target UUID |
| workflow_target.name | string | Yes | Workflow target name |
| assignee | string | No | Current assignee handling the incident |
| collaboration_notes | array<object> | Yes | Collaboration notes for the failure group |
| collaboration_notes[].inserted_at | datetime (ISO 8601) | Yes | Entry insertion timestamp |
| collaboration_notes[].author_email | string | No | Author email |
| collaboration_notes[].author_id | string | No | Author user UUID |
| collaboration_notes[].note | string | Yes | Free-form collaboration note |
| escalation_level | string | No | Current escalation level |
| escalation_updates | array<object> | Yes | Escalation timeline entries |
| escalation_updates[].level | string | No | Escalation level at the time of the note |
| escalation_updates[].inserted_at | datetime (ISO 8601) | Yes | Entry insertion timestamp |
| escalation_updates[].author_email | string | No | Author email |
| escalation_updates[].author_id | string | No | Author user UUID |
| escalation_updates[].note | string | Yes | Escalation note |
| first_seen_at | datetime (ISO 8601) | No | Timestamp of the first occurrence |
| incident_eval_suggestions | array<object> | Yes | Incident eval suggestions generated from this failure group |
| incident_eval_suggestions[].id | string | Yes | Incident eval suggestion UUID |
| incident_eval_suggestions[].status | string (draft, approved, rejected, promoted) | Yes | Suggestion status |
| incident_eval_suggestions[].approved_eval_case_id | string | No | Approved eval case UUID |
| incident_eval_suggestions[].proposed_name | string | No | Suggested eval name |
| incident_eval_suggestions[].target_eval_suite_id | string | No | Target eval suite UUID |
| incident_owner | string | No | Incident owner responsible for the group |
| playbook_url | string | No | Linked remediation playbook URL |
| remediation_checklist | array<object> | Yes | Checklist items attached to the remediation plan |
| remediation_checklist[].done | boolean | Yes | Whether the item is complete |
| remediation_checklist[].item | string | Yes | Checklist entry text |
| remediation_due_at | datetime (ISO 8601) | No | Target remediation due time |
| remediation_status | string | No | Current remediation state |
| sample_trace | object | No | Sample trace summary |
| sample_trace.id | string | Yes | Trace UUID |
| sample_trace.name | string | Yes | Trace name |
| sample_trace.status | string (running, ok, error, partial) | Yes | Trace status |
| sample_trace_id | string | No | UUID of the sample trace |
Example
{
"assignee": "[email protected]",
"collaboration_notes": [
{
"author_email": "[email protected]",
"author_id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"inserted_at": "2026-03-12T08:47:00Z",
"note": "Started triage and log correlation."
}
],
"escalation_level": "l2",
"escalation_updates": [
{
"author_email": "[email protected]",
"author_id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"inserted_at": "2026-03-12T08:46:00Z",
"level": "l2",
"note": "Paging platform responders."
}
],
"first_seen_at": "2026-03-11T22:14:00Z",
"id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"incident_eval_suggestions": [
{
"approved_eval_case_id": null,
"id": "6a4473e5-5a35-4f0b-b99e-34c59d495f67",
"proposed_name": "Payment timeout recovery eval",
"status": "draft",
"target_eval_suite_id": "9e1f1538-ff37-48f0-a2f9-65066d7d6699"
}
],
"incident_owner": "[email protected]",
"inserted_at": "2026-03-11T22:14:00Z",
"last_seen_at": "2026-03-12T08:45:03Z",
"occurrences": 7,
"playbook_url": "https://runbooks.example.com/failure/payment-timeout",
"remediation_checklist": [
{
"done": false,
"item": "Collect provider traces"
},
{
"done": false,
"item": "Roll out timeout hotfix"
}
],
"remediation_due_at": "2026-03-12T10:00:00Z",
"remediation_status": "in_progress",
"sample_trace": {
"id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"name": "checkout runtime trace",
"status": "error"
},
"sample_trace_id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"severity": "high",
"signature": "payment:timeout",
"status": "open",
"title": "Payment timeout",
"updated_at": "2026-03-12T08:45:03Z",
"workflow_target": {
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"name": "checkout-api"
}
}
404
Failure group not found
Failure group not found
PATCH
/api/v1/operator/failure_groups/:id
Web Session
Update failure group
/api/v1/operator/failure_groups/:id
Web Session
Update failure group
Description
Updates failure group settings (e.g., to mark as resolved).
Auth
Web SessionRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
| failure_group | object | Yes | Failure group attributes to update |
| failure_group.status | string (open, acknowledged, resolved) | No | Group status |
| failure_group.assignee | string | No | Current owner/on-call alias responsible for this failure group |
| failure_group.escalation_level | string (none, l1, l2, l3, sev1) | No | Escalation level |
| failure_group.incident_owner | string | No | Incident owner responsible for this failure group |
| failure_group.playbook_url | string | No | http(s) remediation playbook URL |
| failure_group.remediation_due_at | datetime (ISO 8601) | No | Target remediation due time |
| failure_group.remediation_status | string (identified, in_progress, monitoring, completed) | No | Remediation state |
| failure_group.collaboration_note | string | No | Appends a collaboration timeline note to this failure group |
| failure_group.escalation_note | string | No | Appends an escalation timeline note |
| failure_group.remediation_items | array<object> | No | Remediation checklist items written into metadata |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Failure group UUID |
Responses
200
Failure group updated
Returns: FailureGroup
Failure group updated
Returns: FailureGroup
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Failure group UUID |
| status | string (open, acknowledged, resolved) | Yes | Failure group status |
| title | string | Yes | Operator-facing failure title |
| signature | string | Yes | Stable failure signature |
| severity | string (low, medium, high, critical) | Yes | Failure severity |
| inserted_at | datetime (ISO 8601) | Yes | Record insertion timestamp |
| updated_at | datetime (ISO 8601) | Yes | Record update timestamp |
| last_seen_at | datetime (ISO 8601) | No | Timestamp of the most recent occurrence |
| occurrences | integer | Yes | Total grouped occurrences |
| workflow_target | object | No | Workflow target associated with the grouped failures |
| workflow_target.id | string | Yes | Workflow target UUID |
| workflow_target.name | string | Yes | Workflow target name |
| assignee | string | No | Current assignee handling the incident |
| collaboration_notes | array<object> | Yes | Collaboration notes for the failure group |
| collaboration_notes[].inserted_at | datetime (ISO 8601) | Yes | Entry insertion timestamp |
| collaboration_notes[].author_email | string | No | Author email |
| collaboration_notes[].author_id | string | No | Author user UUID |
| collaboration_notes[].note | string | Yes | Free-form collaboration note |
| escalation_level | string | No | Current escalation level |
| escalation_updates | array<object> | Yes | Escalation timeline entries |
| escalation_updates[].level | string | No | Escalation level at the time of the note |
| escalation_updates[].inserted_at | datetime (ISO 8601) | Yes | Entry insertion timestamp |
| escalation_updates[].author_email | string | No | Author email |
| escalation_updates[].author_id | string | No | Author user UUID |
| escalation_updates[].note | string | Yes | Escalation note |
| first_seen_at | datetime (ISO 8601) | No | Timestamp of the first occurrence |
| incident_eval_suggestions | array<object> | Yes | Incident eval suggestions generated from this failure group |
| incident_eval_suggestions[].id | string | Yes | Incident eval suggestion UUID |
| incident_eval_suggestions[].status | string (draft, approved, rejected, promoted) | Yes | Suggestion status |
| incident_eval_suggestions[].approved_eval_case_id | string | No | Approved eval case UUID |
| incident_eval_suggestions[].proposed_name | string | No | Suggested eval name |
| incident_eval_suggestions[].target_eval_suite_id | string | No | Target eval suite UUID |
| incident_owner | string | No | Incident owner responsible for the group |
| playbook_url | string | No | Linked remediation playbook URL |
| remediation_checklist | array<object> | Yes | Checklist items attached to the remediation plan |
| remediation_checklist[].done | boolean | Yes | Whether the item is complete |
| remediation_checklist[].item | string | Yes | Checklist entry text |
| remediation_due_at | datetime (ISO 8601) | No | Target remediation due time |
| remediation_status | string | No | Current remediation state |
| sample_trace | object | No | Sample trace summary |
| sample_trace.id | string | Yes | Trace UUID |
| sample_trace.name | string | Yes | Trace name |
| sample_trace.status | string (running, ok, error, partial) | Yes | Trace status |
| sample_trace_id | string | No | UUID of the sample trace |
Example
{
"assignee": "[email protected]",
"collaboration_notes": [
{
"author_email": "[email protected]",
"author_id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"inserted_at": "2026-03-12T08:47:00Z",
"note": "Started triage and log correlation."
}
],
"escalation_level": "l2",
"escalation_updates": [
{
"author_email": "[email protected]",
"author_id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"inserted_at": "2026-03-12T08:46:00Z",
"level": "l2",
"note": "Paging platform responders."
}
],
"first_seen_at": "2026-03-11T22:14:00Z",
"id": "95c77f8c-a4b8-4818-a9bc-aadad23cba02",
"incident_eval_suggestions": [
{
"approved_eval_case_id": null,
"id": "6a4473e5-5a35-4f0b-b99e-34c59d495f67",
"proposed_name": "Payment timeout recovery eval",
"status": "draft",
"target_eval_suite_id": "9e1f1538-ff37-48f0-a2f9-65066d7d6699"
}
],
"incident_owner": "[email protected]",
"inserted_at": "2026-03-11T22:14:00Z",
"last_seen_at": "2026-03-12T08:45:03Z",
"occurrences": 7,
"playbook_url": "https://runbooks.example.com/failure/payment-timeout",
"remediation_checklist": [
{
"done": false,
"item": "Collect provider traces"
},
{
"done": false,
"item": "Roll out timeout hotfix"
}
],
"remediation_due_at": "2026-03-12T10:00:00Z",
"remediation_status": "in_progress",
"sample_trace": {
"id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"name": "checkout runtime trace",
"status": "error"
},
"sample_trace_id": "6646e3ff-8f2f-4204-ad5c-f4ebc1830f9e",
"severity": "high",
"signature": "payment:timeout",
"status": "open",
"title": "Payment timeout",
"updated_at": "2026-03-12T08:45:03Z",
"workflow_target": {
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"name": "checkout-api"
}
}
404
Failure group not found
Failure group not found