API ReferenceIncidents
Incidents
Create incidents from alerts, record their progress, and resolve them after recovery.
Search all guides and API reference text. Method and scope filter endpoints only.
Endpoints
List incidents
#/api/v1/incidentsLists incidents that are not archived, newest first by default. The default page size is 50. The maximum is 100.
Repeated values for one filter match either value. Different filters must all match. Filters also apply to restricted_count.
Use the returned cursor with the same filters and sort order. Changes between requests can move incidents between pages.
- Required scope
- incidents:read
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request GET \
--url 'https://{company}.api.tellagen.com/api/v1/incidents' \
--header 'Authorization: Bearer <token>'Success: 200
Returns incidents and pagination fields. If has_more is true, next_cursor is the cursor for the next request. When include_counts is true, collection_counts describes the complete filtered collection before cursor and limit. Nullable fields are always present. Empty arrays and empty custom_fields objects are also present.
Success response JSON
{
"incidents": [
{
"id": 1,
"revision": 7,
"company_id": 7,
"human_id": "INC-2025-001",
"title": "Payments API requests timing out",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "active",
"status_changed_at": "2025-01-30T12:05:00Z",
"last_event_at": "2025-01-30T12:10:00Z",
"last_event_summary": "Investigating root cause",
"issue_type": "incident",
"severity_mode": "manual",
"impact_summary": "Payment processing delayed for EU customers",
"customer_impact_status": "confirmed",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": null,
"duration_seconds": 900,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 5,
"investigation_summary": null,
"status_update_summary": {
"latest_recorded_at": "2025-01-30T12:05:00Z",
"next_update_at": "2025-01-30T12:35:00Z",
"latest_excerpt": "Rolling back the payments deploy"
},
"postmortem_summary": {
"has_work": false,
"has_working_draft": false,
"latest_version_id": null,
"latest_version_kind": null,
"work_state": "none"
},
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {},
"archived_at": null,
"archived_by": null,
"incident_manager": "[email protected]",
"incident_responders": [
"[email protected]"
],
"has_assignees": true
}
],
"has_more": true,
"next_cursor": "opaque-server-cursor",
"pagination": {
"limit": 50,
"has_more": true,
"next_cursor": "opaque-server-cursor"
},
"collection_counts": {
"matched": 12,
"all": 20,
"ongoing": 8,
"by_status": {
"active": 8,
"resolved": 12
}
}
}Parameters, headers, and fields
Operation ID: listIncidents
Query parameters
| Field | Description |
|---|---|
limitinteger Optional | The maximum number of items in one page. The default is 50, and the maximum is 100. Minimum: 1. · Maximum: 100. · Default: 50. |
cursorstring Optional | The next_cursor value from the previous page. Clients treat this value as opaque and do not create, inspect, or change it. Minimum length: 1 characters. · Maximum length: 4096 characters. |
scopestring Optional | Selects all incidents or only postmortems. The default is all. With scope=postmortem, incidents whose postmortem work is missing or in review are listed even when they are older than the workspace history limit, and restricted_count counts only the incidents still hidden. Default: "all". Allowed values: "all""postmortem" |
statusstring[] Optional | Includes incidents with any supplied workflow status. Repeating status supplies more than one accepted value. |
severitystring[] Optional | Includes incidents with any supplied severity key. Repeating severity supplies more than one accepted value. |
servicestring[] Optional | Includes incidents with any supplied service slug. Repeating service supplies more than one accepted value. |
team_idinteger[] Optional | Includes incidents with any supplied owning-team ID. Repeating team_id supplies more than one accepted value. Each ID must be positive. |
created_fromstring (RFC 3339) Optional | Includes incidents created at or after this RFC 3339 timestamp. |
created_tostring (RFC 3339) Optional | Includes incidents created at or before this RFC 3339 timestamp. |
created_beforestring (RFC 3339) Optional | Includes incidents created strictly before this RFC 3339 timestamp. It cannot be combined with created_to. |
regionstring[] Optional | Includes incidents with any supplied case-insensitive region. Repeating region supplies more than one accepted value. Maximum items: 100. |
lifecyclestring[] Optional | Includes any supplied incident lifecycle: ticket, incident, postmortem, or alert. Maximum items: 100. Allowed values: "ticket""incident""postmortem""alert" |
service_tierstring[] Optional | Includes incidents whose canonical tenant service has any supplied tier. Maximum items: 100. Allowed values: "t0""t1""t2""t3" |
effective_team_idinteger[] Optional | Includes incidents assigned directly to any supplied team or inheriting it from the canonical service. Repeating the parameter supplies more than one accepted positive ID. Maximum items: 100. |
unassigned_teamboolean Optional | When true, also includes incidents with no direct or canonical-service team. Default: false. |
mineboolean Optional | When true, includes incidents assigned to the authenticated user, or created by that user when no active assignee exists. API-key-only authentication cannot use this filter. Default: false. |
active_onlyboolean Optional | When true, excludes workflow stages configured as terminal. False does not add a status restriction. |
status_scopestring Optional | Selects all statuses, nonterminal ongoing statuses, or one configured workflow-stage slug. Minimum length: 1 characters. · Maximum length: 2048 characters. |
diagnosisstring[] Optional | Includes incidents in any supplied diagnosis state. Repeating diagnosis supplies more than one accepted value. Maximum items: 100. Allowed values: "not_run""in_progress""completed""needs_attention""unavailable" |
sortstring Optional | Selects the collection sort field. Custom requires sort_custom_field. Owner orders by the active incident manager's email; incidents without an incident manager sort last in both directions. Signal orders by priority, with active incidents before resolved ones, then severity rank in the active severity catalog, then latest activity; it defaults to direction=asc, most urgent first. Omission keeps legacy created_at order. Allowed values: "created_at""last_event_at""severity""service""diagnosis""case""regions""team""impact""status""owner""events""custom""signal" |
directionstring Optional | Sort direction for both the selected key and incident-ID tiebreaker. Defaults to desc, except asc when sort is signal. Default: "desc". Allowed values: "asc""desc" |
sort_custom_fieldstring Optional | Active custom-field slug used when sort is custom. The server resolves and validates its stored type. Minimum length: 1 characters. · Maximum length: 64 characters. |
custom_filterstring[] Optional | A JSON object with slug, operator, and value. Repeat for up to 32 predicates. Values remain typed JSON; arrays preserve choices containing commas. Supported operators depend on the resolved field type: string is/is_not/contains/starts_with; select is/is_not; boolean is; number and monetary eq/gt/lt/gte/lte/between; date and datetime is/before/after/between/gte/lte; time is/before/after; multiselect includes_any/includes_all/excludes. SQL fragments and client-supplied field types are rejected. Maximum items: 32. |
include_countsboolean Optional | When true, returns authoritative matched, all, ongoing, and per-status counts before cursor and limit. Default: false. |
impact_statusstring[] Optional | Includes incidents with any supplied customer-impact status. Allowed values: "unknown""none""confirmed" |
affected_customers_opstring Optional | Selects the operator for the affected-customer comparison. This parameter and affected_customers_value must appear together. Allowed values: "<"">""=" |
affected_customers_valueinteger Optional | The non-negative affected-customer count for comparison. This parameter and affected_customers_op must appear together. Minimum: 0. |
mrr_opstring Optional | Selects the operator for the MRR comparison. This parameter and mrr_value must appear together. Allowed values: "<"">""=" |
mrr_valueinteger Optional | The non-negative MRR amount for comparison, in minor currency units. This parameter and mrr_op must appear together. Minimum: 0. |
mrr_currencystring Optional | A three-letter ISO currency code. If mrr_basis is source, this parameter is required. Pattern: ^[A-Z]{3}$. |
mrr_basisstring Optional | Selects normalized workspace currency values or original source currency values. The default is normalized. Default: "normalized". Allowed values: "normalized""source" |
Response 200
Returns incidents and pagination fields. If has_more is true, next_cursor is the cursor for the next request. When include_counts is true, collection_counts describes the complete filtered collection before cursor and limit. Nullable fields are always present. Empty arrays and empty custom_fields objects are also present.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
incidentsobject[] Always returned | The incidents in this page. |
incidents[].idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
incidents[].revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
incidents[].company_idinteger Always returned | The ID of the workspace that owns the incident. Minimum: 1. |
incidents[].human_idstring Always returned | The permanent incident reference shown to users. |
incidents[].titlestring Always returned | The editable display title of the incident. |
incidents[].servicestring Always returned | The service slug associated with the incident. |
incidents[].regionsstring[] Always returned | The affected regions. |
incidents[].severitystring Always returned | The configured severity key. |
incidents[].slack_channel_idstring Always returned | The linked Slack channel ID. An empty string means that no channel is linked. |
incidents[].meet_urlstring Always returned | The incident meeting URL. An empty string means that no meeting is linked. |
incidents[].doc_urlstring Always returned | The incident document or source URL. An empty string means that no URL is stored. |
incidents[].statusstring Always returned | The configured workflow-status key. |
incidents[].status_changed_atstring (RFC 3339) | null Always returned | The time of the latest workflow-status change. A null value means that this time is unavailable. |
incidents[].last_event_atstring (RFC 3339) | null Always returned | The start time of the latest timeline event. A null value means that no event exists. |
incidents[].last_event_summarystring Always returned | A summary of the latest timeline event. |
incidents[].issue_typestring Always returned | The work type. Possible values: "ticket""incident""postmortem" |
incidents[].severity_modestring Always returned | The severity selection mode. Possible values: "auto""manual" |
incidents[].impact_summarystring Always returned | The current customer or operational impact summary. |
incidents[].customer_impact_statusstring Always returned | The customer-impact assessment. Possible values: "unknown""none""confirmed" |
incidents[].impact_started_atstring (RFC 3339) | null Always returned | The impact start time. A null value means that the time is unknown. |
incidents[].first_reported_atstring (RFC 3339) | null Always returned | The time of the first incident report. A null value means that the time is unknown. |
incidents[].first_responded_atstring (RFC 3339) | null Always returned | The time of the first response. A null value means that the time is unknown. |
incidents[].recovered_atstring (RFC 3339) | null Always returned | The service recovery time. A null value means that recovery is not recorded. |
incidents[].duration_secondsinteger Always returned | The calculated incident duration in whole seconds. Minimum: 0. |
incidents[].duration_anchorstring Always returned | The timestamp field from which the API calculates duration. |
incidents[].team_idinteger | null Always returned | The owning-team ID. A null value means that the incident has no owning team. |
incidents[].event_countinteger Always returned | The number of timeline events for the incident. Minimum: 0. |
incidents[].investigation_summaryobject | null Always returned | A summary of investigation runs. A null value means that no investigation data exists. Must match exactly one of 2 schema variants. |
incidents[].investigation_summary.run_countinteger Always returned | The total number of investigation runs. Minimum: 0. |
incidents[].investigation_summary.latest_runobject | null Always returned | The most recent investigation run. A null value means that no run exists. Must match exactly one of 2 schema variants. |
incidents[].investigation_summary.latest_run.statusstring Always returned | The current investigation-run status. |
incidents[].investigation_summary.latest_run.started_atstring (RFC 3339) Always returned | The investigation-run start time. |
incidents[].investigation_summary.latest_run.completed_atstring (RFC 3339) Sometimes returned | The investigation-run completion time. |
incidents[].status_update_summaryobject | null Always returned | The latest recorded status update and the next update time that it set. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load status-update data. Must match exactly one of 2 schema variants. |
incidents[].status_update_summary.latest_recorded_atstring (RFC 3339) | null Always returned | The time of the latest status update. A null value means that no status update has been recorded. |
incidents[].status_update_summary.next_update_atstring (RFC 3339) | null Always returned | The next update time set by the latest status update. A null value means that no time was set. |
incidents[].status_update_summary.latest_excerptstring | null Always returned | One line from the latest status update: its current action, or its current impact when the action is blank, trimmed. Text longer than 120 characters keeps its first 117 characters and ends with an ellipsis (…). A null value means that no status update has been recorded. Only incident collection responses load this field; single-incident and mutation responses return status_update_summary as null. Maximum length: 120 characters. |
incidents[].status_update_summary.latest_deliveryobject | null Sometimes returned | How the latest status update was posted to Slack. A null value means that the update was recorded without sharing, that no status update has been recorded, or that the workspace does not have status update delivery turned on. Must match exactly one of 2 schema variants. |
incidents[].status_update_summary.latest_delivery.sentinteger Always returned | Delivered. Minimum: 0. |
incidents[].status_update_summary.latest_delivery.pendinginteger Always returned | Queued or being posted. Minimum: 0. |
incidents[].status_update_summary.latest_delivery.failedinteger Always returned | Failed or stopped without reaching Slack; a person can retry these. Minimum: 0. |
incidents[].status_update_summary.latest_delivery.unconfirmedinteger Always returned | Slack did not confirm these posts and may have accepted them. Check the channel before retrying. Minimum: 0. |
incidents[].status_update_summary.latest_delivery.skippedinteger Always returned | Never attempted. Minimum: 0. |
incidents[].postmortem_summaryobject | null Always returned | The postmortem work recorded for the incident and whether the incident still needs it. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load postmortem data. Must match exactly one of 2 schema variants. |
incidents[].postmortem_summary.has_workboolean Always returned | Indicates whether a postmortem draft with content, a postmortem version, or a revision request exists. |
incidents[].postmortem_summary.has_working_draftboolean Always returned | Indicates whether the working postmortem draft has content or prepared evidence. |
incidents[].postmortem_summary.latest_version_idinteger | null Always returned | The ID of the latest postmortem version. A null value means that no version exists. |
incidents[].postmortem_summary.latest_version_kindstring | null Always returned | The kind of the latest postmortem version. submitted is a human submission. draft, llm, and legacy need human review before submission. A null value means that no version exists. Possible values: "submitted""draft""llm""legacy"null |
incidents[].postmortem_summary.work_statestring Always returned | Whether the incident still needs postmortem work. none means that no postmortem is due: the incident is not resolved or closed, or it is archived without a submitted postmortem. missing means that a resolved or closed incident has no postmortem version. in_review means that the latest version needs human submission. complete means that the latest version is a human submission. missing and in_review need work; the postmortem queue (scope=postmortem) shows those incidents even when the plan's history window hides other finished incidents. Only incident collection responses load this field; single-incident and mutation responses return postmortem_summary as null. Possible values: "none""missing""in_review""complete" |
incidents[].created_atstring (RFC 3339) Always returned | The incident creation time. |
incidents[].created_bystring Always returned | The identifier of the user who created the incident. |
incidents[].custom_fieldsobject Always returned | The incident values keyed by custom-field slug. |
incidents[].archived_atstring (RFC 3339) | null Always returned | The incident archive time. A null value means that the incident is active. |
incidents[].archived_byinteger | null Always returned | The user ID that archived the incident. A null value means that the incident is active. |
incidents[].incident_managerstring Always returned | The user identifier of the incident manager. An empty string means that no manager is assigned. |
incidents[].incident_respondersstring[] Always returned | The user identifiers of assigned responders. |
incidents[].has_assigneesboolean Always returned | Indicates whether the incident has a manager or at least one responder. |
has_moreboolean Always returned | Deprecated top-level alias for pagination.has_more. |
next_cursorstring Sometimes returned | Deprecated top-level alias for pagination.next_cursor. |
paginationobject Always returned | Pagination details for a collection response. |
pagination.limitinteger Always returned | The maximum number of items requested for this page. Minimum: 1. · Maximum: 100. |
pagination.has_moreboolean Always returned | Indicates whether another page is available. |
pagination.next_cursorstring Sometimes returned | The opaque cursor for the next page. This field is absent on the final page. |
restricted_countinteger Sometimes returned | The number of matching incidents excluded by the workspace history limit. Minimum: 0. |
history_limitedboolean Sometimes returned | Indicates whether the workspace history limit applies to this response. |
mrr_currencystring Sometimes returned | The workspace reporting currency used for normalized MRR values. |
mrr_conversion_modestring Sometimes returned | The workspace mode for MRR currency conversion. Possible values: "normalized""source_only" |
mrr_projection_statestring Sometimes returned | The MRR projection state. Possible values: "ready""stale""unavailable" |
supported_mrr_currenciesstring[] Sometimes returned | The ISO currency codes supported by MRR filters. |
collection_countsobject Sometimes returned | Complete collection counts before cursor and limit when include_counts is true. |
collection_counts.matchedinteger Always returned | Count after every predicate, including status selection. Minimum: 0. |
collection_counts.allinteger Always returned | Count after non-status predicates, excluding status, status_scope, and active_only. Minimum: 0. |
collection_counts.ongoinginteger Always returned | Nonterminal count after non-status predicates. Minimum: 0. |
collection_counts.by_statusobject Always returned | Exact counts by normalized stored status after non-status predicates. |
Errors and recovery (7)
You can repeat this request. If the API returns 429, wait for Retry-After. Set a maximum number of attempts. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Create incident
#/api/v1/incidentsCreates an incident from an alert or another tool. The API validates all fields before it saves the incident and its declaration event.
If Slack is configured and create_slack_channel is true, Tellagen creates the channel after it saves the incident. The getIncidentProvisioning endpoint shows progress. The retryIncidentProvisioning endpoint retries failed steps.
- Required scope
- incidents:write
Example request
Replace {company}, <token>, and any other placeholders with your values.
For <idempotency-key>, choose a unique key on the first attempt. Reuse it only when retrying the identical request.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/incidents' \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'Content-Type: application/json' \
--data '{
"title": "Payments API requests timing out",
"impact_summary": "EU customers cannot complete payment authorization",
"create_slack_channel": false
}'Success: 201
The incident field contains the saved incident. custom_field_values contains values saved in the same database transaction. timeline_event contains the incident_declared event. source_timeline_event contains the imported source event. A 201 response does not guarantee a successful evidence import. source_timeline_import identifies the provider and reports the import result.
Success response JSON
{
"incident": {
"id": 1,
"revision": 1,
"company_id": 7,
"human_id": "INC-2025-001",
"title": "Payments API requests timing out",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev2",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://acme.pagerduty.com/incidents/PXYZ123",
"status": "active",
"status_changed_at": "2025-01-30T12:00:00Z",
"last_event_at": null,
"last_event_summary": "",
"issue_type": "incident",
"severity_mode": "manual",
"impact_summary": "EU customers cannot complete payment authorization",
"customer_impact_status": "unknown",
"impact_started_at": null,
"first_reported_at": null,
"first_responded_at": null,
"recovered_at": null,
"duration_seconds": 0,
"duration_anchor": "created_at",
"team_id": 42,
"event_count": 0,
"investigation_summary": null,
"status_update_summary": null,
"postmortem_summary": null,
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {},
"archived_at": null,
"archived_by": null,
"incident_manager": "",
"incident_responders": [],
"has_assignees": false
},
"timeline_event": {
"id": 101,
"revision": 1,
"incident_id": 1,
"started_at": "2025-01-30T12:00:00Z",
"at": "2025-01-30T12:00:00Z",
"ended_at": null,
"is_ongoing": false,
"group_id": null,
"is_key": false,
"source": "system",
"source_ref": "",
"type": "incident_declared",
"icon": "🚨",
"title": "Incident declared",
"body": "PagerDuty reports elevated payment authorization latency.",
"collaboration_generation": 1,
"tags": [],
"ai_context": "",
"created_by": "[email protected]",
"comment_count": 0,
"attachments": [],
"source_window_started_at": null,
"source_window_ended_at": null,
"evidence_links": []
},
"source_timeline_event": {
"id": 102,
"revision": 1,
"incident_id": 1,
"started_at": "2025-01-30T12:00:00.000001Z",
"at": "2025-01-30T12:00:00.000001Z",
"ended_at": null,
"is_ongoing": false,
"group_id": null,
"is_key": false,
"source": "pagerduty",
"source_ref": "pagerduty:PXYZ123",
"type": "alert",
"icon": "🚨",
"title": "Payment authorization latency",
"body": "PagerDuty incident PXYZ123 is triggered.",
"collaboration_generation": 1,
"tags": [],
"ai_context": "",
"created_by": "[email protected]",
"comment_count": 0,
"attachments": [],
"source_window_started_at": null,
"source_window_ended_at": null,
"evidence_links": []
},
"source_timeline_import": {
"provider": "pagerduty",
"status": "imported"
},
"custom_field_values": [
{
"id": 1,
"incident_id": 1,
"custom_field_id": 50,
"value": 1500,
"created_at": "2025-01-30T12:00:00Z",
"updated_at": "2025-01-30T12:00:00Z"
}
]
}Parameters, headers, and fields
Operation ID: createIncident
Request headers
| Field | Description |
|---|---|
Idempotency-Keystring Optional | A key for safe retries of a create request. It must contain 1–128 visible, non-space ASCII characters. The same key applies only to an identical request. Minimum length: 1 characters. · Maximum length: 128 characters. · Pattern: ^[\x21-\x7E]+$. |
Request body
Optional fields can be omitted. To clear a value, use the format in its description. Nested fields apply only within their parent object.
| Field | Description |
|---|---|
titlestring Optional | The incident display title. The maximum length is 160 characters. If title is omitted, the API derives it from impact_summary or service. Maximum length: 160 characters. |
servicestring Optional | The service slug. The maximum length is 128 characters. Maximum length: 128 characters. |
regionsstring[] Optional | The affected regions. The API trims each value and removes duplicates. |
severitystring Optional | A severity key from the workspace configuration. If severity is omitted, the API uses the configured default severity. |
short_titlestring Conditional | A short slug for the incident reference and Slack channel name. The API normalizes it and limits it to 12 characters. If short_title_required is true, this field is required. This field is not the incident title. Required when Required when the workspace configuration enables short titles. Maximum length: 12 characters. |
impact_summarystring Optional | The customer or operational impact summary. This field is separate from title and can change independently. |
declaration_evidencestring Optional | Alert or log text for the incident_declared timeline event. This field records responder evidence and does not set customer_impact_status. |
doc_urlstring Optional | An absolute HTTP or HTTPS URL stored as an incident reference. The API can import a supported initial report as a separate timeline event. |
import_source_timeline_eventboolean Conditional | If this value is true, the API imports a supported Slack or PagerDuty doc_url as a timeline event. This value requires doc_url. A signed Slack declaration can require import regardless of this value. Required when This field may be true only when doc_url is provided. |
team_idinteger Optional | A positive owning-team ID. If the team does not exist, the API returns 404. If the team is archived, the API returns 400. If the request omits team_id, the API uses the service owner. Minimum: 1. |
issue_typestring Optional | The work type. If the request omits issue_type, the API uses incident. Allowed values: "ticket""incident""postmortem" |
statusstring Optional | An initial workflow-status key from the workspace configuration. If the request omits status, the API uses the configured default status. |
severity_modestring Optional | The severity selection mode. If the request omits severity_mode, the API uses auto. Allowed values: "auto""manual" |
create_slack_channelboolean Optional | Controls Slack channel creation. If the request omits create_slack_channel, the API uses the workspace Slack configuration. Slack must be configured before the API can create a channel. |
invite_usergroupsstring[] Optional | The Slack user-group IDs to invite. If the request omits invite_usergroups, the API uses the workspace Slack configuration. |
custom_field_valuesobject[] Optional | Custom-field values for the new incident. The API validates every value and each required_on_creation field before Slack work. It saves these values and the incident in one database transaction. |
custom_field_values[].field_idinteger Required | The positive ID of the custom-field definition. Minimum: 1. |
custom_field_values[].valueany Required | The value for the custom field. The accepted type depends on field_type. |
Response 201
The incident field contains the saved incident. custom_field_values contains values saved in the same database transaction. timeline_event contains the incident_declared event. source_timeline_event contains the imported source event. A 201 response does not guarantee a successful evidence import. source_timeline_import identifies the provider and reports the import result.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
incidentobject Always returned | The complete public record for an incident. |
incident.idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
incident.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
incident.company_idinteger Always returned | The ID of the workspace that owns the incident. Minimum: 1. |
incident.human_idstring Always returned | The permanent incident reference shown to users. |
incident.titlestring Always returned | The editable display title of the incident. |
incident.servicestring Always returned | The service slug associated with the incident. |
incident.regionsstring[] Always returned | The affected regions. |
incident.severitystring Always returned | The configured severity key. |
incident.slack_channel_idstring Always returned | The linked Slack channel ID. An empty string means that no channel is linked. |
incident.meet_urlstring Always returned | The incident meeting URL. An empty string means that no meeting is linked. |
incident.doc_urlstring Always returned | The incident document or source URL. An empty string means that no URL is stored. |
incident.statusstring Always returned | The configured workflow-status key. |
incident.status_changed_atstring (RFC 3339) | null Always returned | The time of the latest workflow-status change. A null value means that this time is unavailable. |
incident.last_event_atstring (RFC 3339) | null Always returned | The start time of the latest timeline event. A null value means that no event exists. |
incident.last_event_summarystring Always returned | A summary of the latest timeline event. |
incident.issue_typestring Always returned | The work type. Possible values: "ticket""incident""postmortem" |
incident.severity_modestring Always returned | The severity selection mode. Possible values: "auto""manual" |
incident.impact_summarystring Always returned | The current customer or operational impact summary. |
incident.customer_impact_statusstring Always returned | The customer-impact assessment. Possible values: "unknown""none""confirmed" |
incident.impact_started_atstring (RFC 3339) | null Always returned | The impact start time. A null value means that the time is unknown. |
incident.first_reported_atstring (RFC 3339) | null Always returned | The time of the first incident report. A null value means that the time is unknown. |
incident.first_responded_atstring (RFC 3339) | null Always returned | The time of the first response. A null value means that the time is unknown. |
incident.recovered_atstring (RFC 3339) | null Always returned | The service recovery time. A null value means that recovery is not recorded. |
incident.duration_secondsinteger Always returned | The calculated incident duration in whole seconds. Minimum: 0. |
incident.duration_anchorstring Always returned | The timestamp field from which the API calculates duration. |
incident.team_idinteger | null Always returned | The owning-team ID. A null value means that the incident has no owning team. |
incident.event_countinteger Always returned | The number of timeline events for the incident. Minimum: 0. |
incident.investigation_summaryobject | null Always returned | A summary of investigation runs. A null value means that no investigation data exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.run_countinteger Always returned | The total number of investigation runs. Minimum: 0. |
incident.investigation_summary.latest_runobject | null Always returned | The most recent investigation run. A null value means that no run exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.latest_run.statusstring Always returned | The current investigation-run status. |
incident.investigation_summary.latest_run.started_atstring (RFC 3339) Always returned | The investigation-run start time. |
incident.investigation_summary.latest_run.completed_atstring (RFC 3339) Sometimes returned | The investigation-run completion time. |
incident.status_update_summaryobject | null Always returned | The latest recorded status update and the next update time that it set. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load status-update data. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_recorded_atstring (RFC 3339) | null Always returned | The time of the latest status update. A null value means that no status update has been recorded. |
incident.status_update_summary.next_update_atstring (RFC 3339) | null Always returned | The next update time set by the latest status update. A null value means that no time was set. |
incident.status_update_summary.latest_excerptstring | null Always returned | One line from the latest status update: its current action, or its current impact when the action is blank, trimmed. Text longer than 120 characters keeps its first 117 characters and ends with an ellipsis (…). A null value means that no status update has been recorded. Only incident collection responses load this field; single-incident and mutation responses return status_update_summary as null. Maximum length: 120 characters. |
incident.status_update_summary.latest_deliveryobject | null Sometimes returned | How the latest status update was posted to Slack. A null value means that the update was recorded without sharing, that no status update has been recorded, or that the workspace does not have status update delivery turned on. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_delivery.sentinteger Always returned | Delivered. Minimum: 0. |
incident.status_update_summary.latest_delivery.pendinginteger Always returned | Queued or being posted. Minimum: 0. |
incident.status_update_summary.latest_delivery.failedinteger Always returned | Failed or stopped without reaching Slack; a person can retry these. Minimum: 0. |
incident.status_update_summary.latest_delivery.unconfirmedinteger Always returned | Slack did not confirm these posts and may have accepted them. Check the channel before retrying. Minimum: 0. |
incident.status_update_summary.latest_delivery.skippedinteger Always returned | Never attempted. Minimum: 0. |
incident.postmortem_summaryobject | null Always returned | The postmortem work recorded for the incident and whether the incident still needs it. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load postmortem data. Must match exactly one of 2 schema variants. |
incident.postmortem_summary.has_workboolean Always returned | Indicates whether a postmortem draft with content, a postmortem version, or a revision request exists. |
incident.postmortem_summary.has_working_draftboolean Always returned | Indicates whether the working postmortem draft has content or prepared evidence. |
incident.postmortem_summary.latest_version_idinteger | null Always returned | The ID of the latest postmortem version. A null value means that no version exists. |
incident.postmortem_summary.latest_version_kindstring | null Always returned | The kind of the latest postmortem version. submitted is a human submission. draft, llm, and legacy need human review before submission. A null value means that no version exists. Possible values: "submitted""draft""llm""legacy"null |
incident.postmortem_summary.work_statestring Always returned | Whether the incident still needs postmortem work. none means that no postmortem is due: the incident is not resolved or closed, or it is archived without a submitted postmortem. missing means that a resolved or closed incident has no postmortem version. in_review means that the latest version needs human submission. complete means that the latest version is a human submission. missing and in_review need work; the postmortem queue (scope=postmortem) shows those incidents even when the plan's history window hides other finished incidents. Only incident collection responses load this field; single-incident and mutation responses return postmortem_summary as null. Possible values: "none""missing""in_review""complete" |
incident.created_atstring (RFC 3339) Always returned | The incident creation time. |
incident.created_bystring Always returned | The identifier of the user who created the incident. |
incident.custom_fieldsobject Always returned | The incident values keyed by custom-field slug. |
incident.archived_atstring (RFC 3339) | null Always returned | The incident archive time. A null value means that the incident is active. |
incident.archived_byinteger | null Always returned | The user ID that archived the incident. A null value means that the incident is active. |
incident.incident_managerstring Always returned | The user identifier of the incident manager. An empty string means that no manager is assigned. |
incident.incident_respondersstring[] Always returned | The user identifiers of assigned responders. |
incident.has_assigneesboolean Always returned | Indicates whether the incident has a manager or at least one responder. |
timeline_eventobject Sometimes returned | The complete public record for a timeline event. |
timeline_event.idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
timeline_event.incident_idinteger Always returned | The positive numeric ID of the incident. |
timeline_event.started_atstring (RFC 3339) Always returned | The event start time. |
timeline_event.atstring (RFC 3339) Always returned | A deprecated response alias for started_at. Both fields contain the same value. |
timeline_event.ended_atstring (RFC 3339) | null Always returned | The event end time. A null value means that the event has no end time. |
timeline_event.is_ongoingboolean Always returned | Indicates whether the event is still in progress. |
timeline_event.group_idinteger | null Always returned | The timeline-group ID. A null value means that the event has no group. |
timeline_event.is_keyboolean Always returned | Indicates whether responders marked this as a key incident event. |
timeline_event.sourcestring Always returned | The system or actor that created the event. |
timeline_event.source_refstring Always returned | The source-specific reference for the event. |
timeline_event.typestring Always returned | The event type used for grouping and display. |
timeline_event.iconstring Always returned | The event icon. The maximum length is 8 Unicode characters. Maximum length: 8 characters. |
timeline_event.titlestring Always returned | The optional display title of the event. |
timeline_event.bodystring Always returned | The event description. |
timeline_event.collaboration_generationinteger Always returned | The version of collaborative content associated with the event. |
timeline_event.tagsstring[] Always returned | The normalized event tags. |
timeline_event.ai_contextstring Always returned | The saved AI context for a generated event. An empty string means that no context is stored. |
timeline_event.created_bystring Always returned | The identifier of the user or system that created the event. |
timeline_event.comment_countinteger Always returned | The number of comments on the event. |
timeline_event.attachmentsobject[] Always returned | The files attached to the event. |
timeline_event.attachments[].idinteger Always returned | The positive numeric ID of the attachment. |
timeline_event.attachments[].timeline_event_idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.attachments[].filenamestring Always returned | The original file name. |
timeline_event.attachments[].urlstring Always returned | A temporary download URL. An empty string means that no URL is currently available. |
timeline_event.attachments[].url_availableboolean Always returned | Indicates whether url contains an available download URL. |
timeline_event.attachments[].content_typestring Always returned | The media type of the attached file. |
timeline_event.attachments[].size_bytesinteger Always returned | The file size in bytes. |
timeline_event.attachments[].created_atstring (RFC 3339) Always returned | The attachment creation time. |
timeline_event.attachments[].created_bystring Always returned | The identifier of the user who attached the file. |
timeline_event.source_window_started_atstring (RFC 3339) | null Always returned | The start of the source-data window. A null value means that no window is recorded. |
timeline_event.source_window_ended_atstring (RFC 3339) | null Always returned | The end of the source-data window. A null value means that no window is recorded. |
timeline_event.evidence_linksobject[] Always returned | The evidence references associated with the event. |
timeline_event.evidence_links[].sourcestring Always returned | The system or provider that supplied the evidence. |
timeline_event.evidence_links[].urlstring Always returned | The absolute URL of the evidence. |
timeline_event.evidence_links[].labelstring Sometimes returned | A short display name for the evidence. |
timeline_event.evidence_links[].summarystring Sometimes returned | A short summary of the evidence. |
timeline_event.evidence_links[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
timeline_event.evidence_links[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
timeline_event.evidence_links[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
timeline_event.evidence_links[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
timeline_event.operational_updateobject | null Sometimes returned | The validated operational status payload. Null or absent for ordinary and legacy timeline events. Must match exactly one of 2 schema variants. |
timeline_event.operational_update.current_impactstring Always returned | The current customer or system impact in human-authored text. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.current_actionstring Always returned | The response work currently in progress. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.next_update_atstring (RFC 3339) | null Always returned | The planned next update time as RFC 3339 |
timeline_event.operational_update.audiencestring Always returned | The intended audience for the status update. Possible values: "responders""stakeholders""customers" |
timeline_event.operational_update.channelstring Always returned | Records the destination workflow. manual_external means the caller must deliver the copied message themselves. Possible values: "incident_record""manual_external" |
timeline_event.operational_update.destinationstring Always returned | The human-readable external destination for manual_external Maximum length: 200 characters. |
timeline_event.operational_update.communications_owner_user_idinteger | null Always returned | The active incident participant responsible for coordinating manual delivery |
timeline_event.operational_update.delivery_statestring Always returned | The server-derived delivery state. Tellagen does not claim that a manual external message was sent. Possible values: "recorded""pending_manual_delivery" |
source_timeline_eventobject Sometimes returned | The complete public record for a timeline event. |
source_timeline_event.idinteger Always returned | The positive numeric ID of the timeline event. |
source_timeline_event.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
source_timeline_event.incident_idinteger Always returned | The positive numeric ID of the incident. |
source_timeline_event.started_atstring (RFC 3339) Always returned | The event start time. |
source_timeline_event.atstring (RFC 3339) Always returned | A deprecated response alias for started_at. Both fields contain the same value. |
source_timeline_event.ended_atstring (RFC 3339) | null Always returned | The event end time. A null value means that the event has no end time. |
source_timeline_event.is_ongoingboolean Always returned | Indicates whether the event is still in progress. |
source_timeline_event.group_idinteger | null Always returned | The timeline-group ID. A null value means that the event has no group. |
source_timeline_event.is_keyboolean Always returned | Indicates whether responders marked this as a key incident event. |
source_timeline_event.sourcestring Always returned | The system or actor that created the event. |
source_timeline_event.source_refstring Always returned | The source-specific reference for the event. |
source_timeline_event.typestring Always returned | The event type used for grouping and display. |
source_timeline_event.iconstring Always returned | The event icon. The maximum length is 8 Unicode characters. Maximum length: 8 characters. |
source_timeline_event.titlestring Always returned | The optional display title of the event. |
source_timeline_event.bodystring Always returned | The event description. |
source_timeline_event.collaboration_generationinteger Always returned | The version of collaborative content associated with the event. |
source_timeline_event.tagsstring[] Always returned | The normalized event tags. |
source_timeline_event.ai_contextstring Always returned | The saved AI context for a generated event. An empty string means that no context is stored. |
source_timeline_event.created_bystring Always returned | The identifier of the user or system that created the event. |
source_timeline_event.comment_countinteger Always returned | The number of comments on the event. |
source_timeline_event.attachmentsobject[] Always returned | The files attached to the event. |
source_timeline_event.attachments[].idinteger Always returned | The positive numeric ID of the attachment. |
source_timeline_event.attachments[].timeline_event_idinteger Always returned | The positive numeric ID of the timeline event. |
source_timeline_event.attachments[].filenamestring Always returned | The original file name. |
source_timeline_event.attachments[].urlstring Always returned | A temporary download URL. An empty string means that no URL is currently available. |
source_timeline_event.attachments[].url_availableboolean Always returned | Indicates whether url contains an available download URL. |
source_timeline_event.attachments[].content_typestring Always returned | The media type of the attached file. |
source_timeline_event.attachments[].size_bytesinteger Always returned | The file size in bytes. |
source_timeline_event.attachments[].created_atstring (RFC 3339) Always returned | The attachment creation time. |
source_timeline_event.attachments[].created_bystring Always returned | The identifier of the user who attached the file. |
source_timeline_event.source_window_started_atstring (RFC 3339) | null Always returned | The start of the source-data window. A null value means that no window is recorded. |
source_timeline_event.source_window_ended_atstring (RFC 3339) | null Always returned | The end of the source-data window. A null value means that no window is recorded. |
source_timeline_event.evidence_linksobject[] Always returned | The evidence references associated with the event. |
source_timeline_event.evidence_links[].sourcestring Always returned | The system or provider that supplied the evidence. |
source_timeline_event.evidence_links[].urlstring Always returned | The absolute URL of the evidence. |
source_timeline_event.evidence_links[].labelstring Sometimes returned | A short display name for the evidence. |
source_timeline_event.evidence_links[].summarystring Sometimes returned | A short summary of the evidence. |
source_timeline_event.evidence_links[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
source_timeline_event.evidence_links[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
source_timeline_event.evidence_links[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
source_timeline_event.evidence_links[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
source_timeline_event.operational_updateobject | null Sometimes returned | The validated operational status payload. Null or absent for ordinary and legacy timeline events. Must match exactly one of 2 schema variants. |
source_timeline_event.operational_update.current_impactstring Always returned | The current customer or system impact in human-authored text. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
source_timeline_event.operational_update.current_actionstring Always returned | The response work currently in progress. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
source_timeline_event.operational_update.next_update_atstring (RFC 3339) | null Always returned | The planned next update time as RFC 3339 |
source_timeline_event.operational_update.audiencestring Always returned | The intended audience for the status update. Possible values: "responders""stakeholders""customers" |
source_timeline_event.operational_update.channelstring Always returned | Records the destination workflow. manual_external means the caller must deliver the copied message themselves. Possible values: "incident_record""manual_external" |
source_timeline_event.operational_update.destinationstring Always returned | The human-readable external destination for manual_external Maximum length: 200 characters. |
source_timeline_event.operational_update.communications_owner_user_idinteger | null Always returned | The active incident participant responsible for coordinating manual delivery |
source_timeline_event.operational_update.delivery_statestring Always returned | The server-derived delivery state. Tellagen does not claim that a manual external message was sent. Possible values: "recorded""pending_manual_delivery" |
source_timeline_importobject Sometimes returned | The result of importing an initial report as a timeline event. |
source_timeline_import.statusstring Always returned | The import result. Possible values: "imported""failed""unavailable""invalid""unsupported" |
source_timeline_import.providerstring Sometimes returned | The detected source provider. When the provider is unavailable, this field is absent. |
slack_declaration_attachmentobject Sometimes returned | The result of attaching Slack declaration context to the incident. |
slack_declaration_attachment.statusstring Always returned | The attachment result. Possible values: "attached""failed" |
slack_declaration_imagesobject Sometimes returned | The result of copying images from a Slack declaration. |
slack_declaration_images.statusstring Always returned | The image-copy result. Possible values: "attached""partial""failed" |
slack_declaration_images.totalinteger Always returned | The total number of Slack images considered. Minimum: 0. |
slack_declaration_images.attachedinteger Always returned | The number of images copied successfully. Minimum: 0. |
slack_declaration_images.failedinteger Always returned | The number of images that the API did not copy. Minimum: 0. |
declaration_nextstring Sometimes returned | The next incident workspace section requested by a signed Slack declaration. |
custom_field_valuesobject[] Sometimes returned | The custom-field values saved in the same transaction as the incident. |
custom_field_values[].idinteger Always returned | The positive numeric ID of the stored value. Minimum: 1. |
custom_field_values[].incident_idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
custom_field_values[].custom_field_idinteger Always returned | The positive numeric ID of the custom-field definition. Minimum: 1. |
custom_field_values[].valueany Sometimes returned | The stored field value. Its type depends on field_type. |
custom_field_values[].created_atstring (RFC 3339) Always returned | The initial value storage time. |
custom_field_values[].updated_atstring (RFC 3339) Always returned | The time of the latest value change. |
Response headers
| Field | Description |
|---|---|
Tellagen-Resource-Versioninteger Always returned | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (7)
Within 24 hours, retry with the original Idempotency-Key and identical body. If the result is unknown, do not retry automatically. Check whether the resource exists. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
List archived incidents
#/api/v1/incidents/archivedReturns one page of archived incidents. The default page size is 50, and the maximum is 100. Results are ordered by archived_at and incident ID. The workspace history limit can exclude older incidents.
- Required scope
- incidents:read
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request GET \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/archived' \
--header 'Authorization: Bearer <token>'Success: 200
Returns archived incidents, pagination fields, and workspace history-limit details. The filters also apply to restricted_count.
Success response JSON
{
"incidents": [
{
"id": 1,
"revision": 7,
"company_id": 7,
"human_id": "INC-2025-001",
"title": "Payments API requests timing out",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "active",
"status_changed_at": "2025-01-30T12:05:00Z",
"last_event_at": "2025-01-30T12:10:00Z",
"last_event_summary": "Investigating root cause",
"issue_type": "incident",
"severity_mode": "manual",
"impact_summary": "Payment processing delayed for EU customers",
"customer_impact_status": "confirmed",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": null,
"duration_seconds": 900,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 5,
"investigation_summary": null,
"status_update_summary": {
"latest_recorded_at": null,
"next_update_at": null,
"latest_excerpt": null
},
"postmortem_summary": {
"has_work": false,
"has_working_draft": false,
"latest_version_id": null,
"latest_version_kind": null,
"work_state": "none"
},
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {},
"archived_at": "2025-02-07T09:30:00Z",
"archived_by": 42,
"incident_manager": "[email protected]",
"incident_responders": [
"[email protected]"
],
"has_assignees": true
}
],
"restricted_count": 3,
"history_limited": true,
"has_more": false,
"pagination": {
"limit": 50,
"has_more": false
}
}Parameters, headers, and fields
Operation ID: listArchivedIncidents
Query parameters
| Field | Description |
|---|---|
limitinteger Optional | The maximum number of items in one page. The default is 50, and the maximum is 100. Minimum: 1. · Maximum: 100. · Default: 50. |
cursorstring Optional | The next_cursor value from the previous page. Clients treat this value as opaque and do not create, inspect, or change it. Minimum length: 1 characters. · Maximum length: 4096 characters. |
scopestring Optional | Selects all incidents or only postmortems. The default is all. With scope=postmortem, incidents whose postmortem work is missing or in review are listed even when they are older than the workspace history limit, and restricted_count counts only the incidents still hidden. Default: "all". Allowed values: "all""postmortem" |
statusstring[] Optional | Includes incidents with any supplied workflow status. Repeating status supplies more than one accepted value. |
severitystring[] Optional | Includes incidents with any supplied severity key. Repeating severity supplies more than one accepted value. |
servicestring[] Optional | Includes incidents with any supplied service slug. Repeating service supplies more than one accepted value. |
team_idinteger[] Optional | Includes incidents with any supplied owning-team ID. Repeating team_id supplies more than one accepted value. Each ID must be positive. |
created_fromstring (RFC 3339) Optional | Includes incidents created at or after this RFC 3339 timestamp. |
created_tostring (RFC 3339) Optional | Includes incidents created at or before this RFC 3339 timestamp. |
created_beforestring (RFC 3339) Optional | Includes incidents created strictly before this RFC 3339 timestamp. It cannot be combined with created_to. |
regionstring[] Optional | Includes incidents with any supplied case-insensitive region. Repeating region supplies more than one accepted value. Maximum items: 100. |
lifecyclestring[] Optional | Includes any supplied incident lifecycle: ticket, incident, postmortem, or alert. Maximum items: 100. Allowed values: "ticket""incident""postmortem""alert" |
service_tierstring[] Optional | Includes incidents whose canonical tenant service has any supplied tier. Maximum items: 100. Allowed values: "t0""t1""t2""t3" |
effective_team_idinteger[] Optional | Includes incidents assigned directly to any supplied team or inheriting it from the canonical service. Repeating the parameter supplies more than one accepted positive ID. Maximum items: 100. |
unassigned_teamboolean Optional | When true, also includes incidents with no direct or canonical-service team. Default: false. |
mineboolean Optional | When true, includes incidents assigned to the authenticated user, or created by that user when no active assignee exists. API-key-only authentication cannot use this filter. Default: false. |
active_onlyboolean Optional | When true, excludes workflow stages configured as terminal. False does not add a status restriction. |
status_scopestring Optional | Selects all statuses, nonterminal ongoing statuses, or one configured workflow-stage slug. Minimum length: 1 characters. · Maximum length: 2048 characters. |
diagnosisstring[] Optional | Includes incidents in any supplied diagnosis state. Repeating diagnosis supplies more than one accepted value. Maximum items: 100. Allowed values: "not_run""in_progress""completed""needs_attention""unavailable" |
sortstring Optional | Selects the collection sort field. Custom requires sort_custom_field. Owner orders by the active incident manager's email; incidents without an incident manager sort last in both directions. Signal orders by priority, with active incidents before resolved ones, then severity rank in the active severity catalog, then latest activity; it defaults to direction=asc, most urgent first. Omission keeps legacy created_at order. Allowed values: "created_at""last_event_at""severity""service""diagnosis""case""regions""team""impact""status""owner""events""custom""signal" |
directionstring Optional | Sort direction for both the selected key and incident-ID tiebreaker. Defaults to desc, except asc when sort is signal. Default: "desc". Allowed values: "asc""desc" |
sort_custom_fieldstring Optional | Active custom-field slug used when sort is custom. The server resolves and validates its stored type. Minimum length: 1 characters. · Maximum length: 64 characters. |
custom_filterstring[] Optional | A JSON object with slug, operator, and value. Repeat for up to 32 predicates. Values remain typed JSON; arrays preserve choices containing commas. Supported operators depend on the resolved field type: string is/is_not/contains/starts_with; select is/is_not; boolean is; number and monetary eq/gt/lt/gte/lte/between; date and datetime is/before/after/between/gte/lte; time is/before/after; multiselect includes_any/includes_all/excludes. SQL fragments and client-supplied field types are rejected. Maximum items: 32. |
include_countsboolean Optional | When true, returns authoritative matched, all, ongoing, and per-status counts before cursor and limit. Default: false. |
impact_statusstring[] Optional | Includes incidents with any supplied customer-impact status. Allowed values: "unknown""none""confirmed" |
affected_customers_opstring Optional | Selects the operator for the affected-customer comparison. This parameter and affected_customers_value must appear together. Allowed values: "<"">""=" |
affected_customers_valueinteger Optional | The non-negative affected-customer count for comparison. This parameter and affected_customers_op must appear together. Minimum: 0. |
mrr_opstring Optional | Selects the operator for the MRR comparison. This parameter and mrr_value must appear together. Allowed values: "<"">""=" |
mrr_valueinteger Optional | The non-negative MRR amount for comparison, in minor currency units. This parameter and mrr_op must appear together. Minimum: 0. |
mrr_currencystring Optional | A three-letter ISO currency code. If mrr_basis is source, this parameter is required. Pattern: ^[A-Z]{3}$. |
mrr_basisstring Optional | Selects normalized workspace currency values or original source currency values. The default is normalized. Default: "normalized". Allowed values: "normalized""source" |
Response 200
Returns archived incidents, pagination fields, and workspace history-limit details. The filters also apply to restricted_count.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
incidentsobject[] Always returned | The incidents in this page. |
incidents[].idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
incidents[].revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
incidents[].company_idinteger Always returned | The ID of the workspace that owns the incident. Minimum: 1. |
incidents[].human_idstring Always returned | The permanent incident reference shown to users. |
incidents[].titlestring Always returned | The editable display title of the incident. |
incidents[].servicestring Always returned | The service slug associated with the incident. |
incidents[].regionsstring[] Always returned | The affected regions. |
incidents[].severitystring Always returned | The configured severity key. |
incidents[].slack_channel_idstring Always returned | The linked Slack channel ID. An empty string means that no channel is linked. |
incidents[].meet_urlstring Always returned | The incident meeting URL. An empty string means that no meeting is linked. |
incidents[].doc_urlstring Always returned | The incident document or source URL. An empty string means that no URL is stored. |
incidents[].statusstring Always returned | The configured workflow-status key. |
incidents[].status_changed_atstring (RFC 3339) | null Always returned | The time of the latest workflow-status change. A null value means that this time is unavailable. |
incidents[].last_event_atstring (RFC 3339) | null Always returned | The start time of the latest timeline event. A null value means that no event exists. |
incidents[].last_event_summarystring Always returned | A summary of the latest timeline event. |
incidents[].issue_typestring Always returned | The work type. Possible values: "ticket""incident""postmortem" |
incidents[].severity_modestring Always returned | The severity selection mode. Possible values: "auto""manual" |
incidents[].impact_summarystring Always returned | The current customer or operational impact summary. |
incidents[].customer_impact_statusstring Always returned | The customer-impact assessment. Possible values: "unknown""none""confirmed" |
incidents[].impact_started_atstring (RFC 3339) | null Always returned | The impact start time. A null value means that the time is unknown. |
incidents[].first_reported_atstring (RFC 3339) | null Always returned | The time of the first incident report. A null value means that the time is unknown. |
incidents[].first_responded_atstring (RFC 3339) | null Always returned | The time of the first response. A null value means that the time is unknown. |
incidents[].recovered_atstring (RFC 3339) | null Always returned | The service recovery time. A null value means that recovery is not recorded. |
incidents[].duration_secondsinteger Always returned | The calculated incident duration in whole seconds. Minimum: 0. |
incidents[].duration_anchorstring Always returned | The timestamp field from which the API calculates duration. |
incidents[].team_idinteger | null Always returned | The owning-team ID. A null value means that the incident has no owning team. |
incidents[].event_countinteger Always returned | The number of timeline events for the incident. Minimum: 0. |
incidents[].investigation_summaryobject | null Always returned | A summary of investigation runs. A null value means that no investigation data exists. Must match exactly one of 2 schema variants. |
incidents[].investigation_summary.run_countinteger Always returned | The total number of investigation runs. Minimum: 0. |
incidents[].investigation_summary.latest_runobject | null Always returned | The most recent investigation run. A null value means that no run exists. Must match exactly one of 2 schema variants. |
incidents[].investigation_summary.latest_run.statusstring Always returned | The current investigation-run status. |
incidents[].investigation_summary.latest_run.started_atstring (RFC 3339) Always returned | The investigation-run start time. |
incidents[].investigation_summary.latest_run.completed_atstring (RFC 3339) Sometimes returned | The investigation-run completion time. |
incidents[].status_update_summaryobject | null Always returned | The latest recorded status update and the next update time that it set. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load status-update data. Must match exactly one of 2 schema variants. |
incidents[].status_update_summary.latest_recorded_atstring (RFC 3339) | null Always returned | The time of the latest status update. A null value means that no status update has been recorded. |
incidents[].status_update_summary.next_update_atstring (RFC 3339) | null Always returned | The next update time set by the latest status update. A null value means that no time was set. |
incidents[].status_update_summary.latest_excerptstring | null Always returned | One line from the latest status update: its current action, or its current impact when the action is blank, trimmed. Text longer than 120 characters keeps its first 117 characters and ends with an ellipsis (…). A null value means that no status update has been recorded. Only incident collection responses load this field; single-incident and mutation responses return status_update_summary as null. Maximum length: 120 characters. |
incidents[].status_update_summary.latest_deliveryobject | null Sometimes returned | How the latest status update was posted to Slack. A null value means that the update was recorded without sharing, that no status update has been recorded, or that the workspace does not have status update delivery turned on. Must match exactly one of 2 schema variants. |
incidents[].status_update_summary.latest_delivery.sentinteger Always returned | Delivered. Minimum: 0. |
incidents[].status_update_summary.latest_delivery.pendinginteger Always returned | Queued or being posted. Minimum: 0. |
incidents[].status_update_summary.latest_delivery.failedinteger Always returned | Failed or stopped without reaching Slack; a person can retry these. Minimum: 0. |
incidents[].status_update_summary.latest_delivery.unconfirmedinteger Always returned | Slack did not confirm these posts and may have accepted them. Check the channel before retrying. Minimum: 0. |
incidents[].status_update_summary.latest_delivery.skippedinteger Always returned | Never attempted. Minimum: 0. |
incidents[].postmortem_summaryobject | null Always returned | The postmortem work recorded for the incident and whether the incident still needs it. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load postmortem data. Must match exactly one of 2 schema variants. |
incidents[].postmortem_summary.has_workboolean Always returned | Indicates whether a postmortem draft with content, a postmortem version, or a revision request exists. |
incidents[].postmortem_summary.has_working_draftboolean Always returned | Indicates whether the working postmortem draft has content or prepared evidence. |
incidents[].postmortem_summary.latest_version_idinteger | null Always returned | The ID of the latest postmortem version. A null value means that no version exists. |
incidents[].postmortem_summary.latest_version_kindstring | null Always returned | The kind of the latest postmortem version. submitted is a human submission. draft, llm, and legacy need human review before submission. A null value means that no version exists. Possible values: "submitted""draft""llm""legacy"null |
incidents[].postmortem_summary.work_statestring Always returned | Whether the incident still needs postmortem work. none means that no postmortem is due: the incident is not resolved or closed, or it is archived without a submitted postmortem. missing means that a resolved or closed incident has no postmortem version. in_review means that the latest version needs human submission. complete means that the latest version is a human submission. missing and in_review need work; the postmortem queue (scope=postmortem) shows those incidents even when the plan's history window hides other finished incidents. Only incident collection responses load this field; single-incident and mutation responses return postmortem_summary as null. Possible values: "none""missing""in_review""complete" |
incidents[].created_atstring (RFC 3339) Always returned | The incident creation time. |
incidents[].created_bystring Always returned | The identifier of the user who created the incident. |
incidents[].custom_fieldsobject Always returned | The incident values keyed by custom-field slug. |
incidents[].archived_atstring (RFC 3339) | null Always returned | The incident archive time. A null value means that the incident is active. |
incidents[].archived_byinteger | null Always returned | The user ID that archived the incident. A null value means that the incident is active. |
incidents[].incident_managerstring Always returned | The user identifier of the incident manager. An empty string means that no manager is assigned. |
incidents[].incident_respondersstring[] Always returned | The user identifiers of assigned responders. |
incidents[].has_assigneesboolean Always returned | Indicates whether the incident has a manager or at least one responder. |
has_moreboolean Always returned | Deprecated top-level alias for pagination.has_more. |
next_cursorstring Sometimes returned | Deprecated top-level alias for pagination.next_cursor. |
paginationobject Always returned | Pagination details for a collection response. |
pagination.limitinteger Always returned | The maximum number of items requested for this page. Minimum: 1. · Maximum: 100. |
pagination.has_moreboolean Always returned | Indicates whether another page is available. |
pagination.next_cursorstring Sometimes returned | The opaque cursor for the next page. This field is absent on the final page. |
restricted_countinteger Sometimes returned | The number of matching incidents excluded by the workspace history limit. Minimum: 0. |
history_limitedboolean Sometimes returned | Indicates whether the workspace history limit applies to this response. |
mrr_currencystring Sometimes returned | The workspace reporting currency used for normalized MRR values. |
mrr_conversion_modestring Sometimes returned | The workspace mode for MRR currency conversion. Possible values: "normalized""source_only" |
mrr_projection_statestring Sometimes returned | The MRR projection state. Possible values: "ready""stale""unavailable" |
supported_mrr_currenciesstring[] Sometimes returned | The ISO currency codes supported by MRR filters. |
collection_countsobject Sometimes returned | Complete collection counts before cursor and limit when include_counts is true. |
collection_counts.matchedinteger Always returned | Count after every predicate, including status selection. Minimum: 0. |
collection_counts.allinteger Always returned | Count after non-status predicates, excluding status, status_scope, and active_only. Minimum: 0. |
collection_counts.ongoinginteger Always returned | Nonterminal count after non-status predicates. Minimum: 0. |
collection_counts.by_statusobject Always returned | Exact counts by normalized stored status after non-status predicates. |
Errors and recovery (7)
You can repeat this request. If the API returns 429, wait for Retry-After. Set a maximum number of attempts. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Get incident by permanent reference
#/api/v1/incident-references/{reference}Returns an incident from its permanent, opaque reference. This endpoint is suitable for stored references and links in other systems. The numeric-ID endpoint accepts only a positive ID returned by this API.
- Required scope
- incidents:read
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request GET \
--url 'https://{company}.api.tellagen.com/api/v1/incident-references/{reference}' \
--header 'Authorization: Bearer <token>'Success: 200
Returns the complete incident record. The reference continues to identify the same incident after editable fields change.
Success response JSON
{
"incident": {
"id": 1,
"revision": 7,
"company_id": 7,
"human_id": "INC-2025-001",
"title": "Payments API requests timing out",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "active",
"status_changed_at": "2025-01-30T12:05:00Z",
"last_event_at": "2025-01-30T12:10:00Z",
"last_event_summary": "Investigating root cause",
"issue_type": "incident",
"severity_mode": "manual",
"impact_summary": "Payment processing delayed for EU customers",
"customer_impact_status": "confirmed",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": null,
"duration_seconds": 900,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 5,
"investigation_summary": null,
"status_update_summary": null,
"postmortem_summary": null,
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {},
"archived_at": null,
"archived_by": null,
"incident_manager": "[email protected]",
"incident_responders": [
"[email protected]"
],
"has_assignees": true
}
}Parameters, headers, and fields
Operation ID: getIncidentByReference
Path parameters
| Field | Description |
|---|---|
referencestring Required | A permanent, opaque reference from Tellagen incident links and messages. This parameter does not accept a numeric incident ID. Minimum length: 1 characters. |
Response 200
Returns the complete incident record. The reference continues to identify the same incident after editable fields change.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
incidentobject Always returned | The complete public record for an incident. |
incident.idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
incident.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
incident.company_idinteger Always returned | The ID of the workspace that owns the incident. Minimum: 1. |
incident.human_idstring Always returned | The permanent incident reference shown to users. |
incident.titlestring Always returned | The editable display title of the incident. |
incident.servicestring Always returned | The service slug associated with the incident. |
incident.regionsstring[] Always returned | The affected regions. |
incident.severitystring Always returned | The configured severity key. |
incident.slack_channel_idstring Always returned | The linked Slack channel ID. An empty string means that no channel is linked. |
incident.meet_urlstring Always returned | The incident meeting URL. An empty string means that no meeting is linked. |
incident.doc_urlstring Always returned | The incident document or source URL. An empty string means that no URL is stored. |
incident.statusstring Always returned | The configured workflow-status key. |
incident.status_changed_atstring (RFC 3339) | null Always returned | The time of the latest workflow-status change. A null value means that this time is unavailable. |
incident.last_event_atstring (RFC 3339) | null Always returned | The start time of the latest timeline event. A null value means that no event exists. |
incident.last_event_summarystring Always returned | A summary of the latest timeline event. |
incident.issue_typestring Always returned | The work type. Possible values: "ticket""incident""postmortem" |
incident.severity_modestring Always returned | The severity selection mode. Possible values: "auto""manual" |
incident.impact_summarystring Always returned | The current customer or operational impact summary. |
incident.customer_impact_statusstring Always returned | The customer-impact assessment. Possible values: "unknown""none""confirmed" |
incident.impact_started_atstring (RFC 3339) | null Always returned | The impact start time. A null value means that the time is unknown. |
incident.first_reported_atstring (RFC 3339) | null Always returned | The time of the first incident report. A null value means that the time is unknown. |
incident.first_responded_atstring (RFC 3339) | null Always returned | The time of the first response. A null value means that the time is unknown. |
incident.recovered_atstring (RFC 3339) | null Always returned | The service recovery time. A null value means that recovery is not recorded. |
incident.duration_secondsinteger Always returned | The calculated incident duration in whole seconds. Minimum: 0. |
incident.duration_anchorstring Always returned | The timestamp field from which the API calculates duration. |
incident.team_idinteger | null Always returned | The owning-team ID. A null value means that the incident has no owning team. |
incident.event_countinteger Always returned | The number of timeline events for the incident. Minimum: 0. |
incident.investigation_summaryobject | null Always returned | A summary of investigation runs. A null value means that no investigation data exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.run_countinteger Always returned | The total number of investigation runs. Minimum: 0. |
incident.investigation_summary.latest_runobject | null Always returned | The most recent investigation run. A null value means that no run exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.latest_run.statusstring Always returned | The current investigation-run status. |
incident.investigation_summary.latest_run.started_atstring (RFC 3339) Always returned | The investigation-run start time. |
incident.investigation_summary.latest_run.completed_atstring (RFC 3339) Sometimes returned | The investigation-run completion time. |
incident.status_update_summaryobject | null Always returned | The latest recorded status update and the next update time that it set. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load status-update data. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_recorded_atstring (RFC 3339) | null Always returned | The time of the latest status update. A null value means that no status update has been recorded. |
incident.status_update_summary.next_update_atstring (RFC 3339) | null Always returned | The next update time set by the latest status update. A null value means that no time was set. |
incident.status_update_summary.latest_excerptstring | null Always returned | One line from the latest status update: its current action, or its current impact when the action is blank, trimmed. Text longer than 120 characters keeps its first 117 characters and ends with an ellipsis (…). A null value means that no status update has been recorded. Only incident collection responses load this field; single-incident and mutation responses return status_update_summary as null. Maximum length: 120 characters. |
incident.status_update_summary.latest_deliveryobject | null Sometimes returned | How the latest status update was posted to Slack. A null value means that the update was recorded without sharing, that no status update has been recorded, or that the workspace does not have status update delivery turned on. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_delivery.sentinteger Always returned | Delivered. Minimum: 0. |
incident.status_update_summary.latest_delivery.pendinginteger Always returned | Queued or being posted. Minimum: 0. |
incident.status_update_summary.latest_delivery.failedinteger Always returned | Failed or stopped without reaching Slack; a person can retry these. Minimum: 0. |
incident.status_update_summary.latest_delivery.unconfirmedinteger Always returned | Slack did not confirm these posts and may have accepted them. Check the channel before retrying. Minimum: 0. |
incident.status_update_summary.latest_delivery.skippedinteger Always returned | Never attempted. Minimum: 0. |
incident.postmortem_summaryobject | null Always returned | The postmortem work recorded for the incident and whether the incident still needs it. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load postmortem data. Must match exactly one of 2 schema variants. |
incident.postmortem_summary.has_workboolean Always returned | Indicates whether a postmortem draft with content, a postmortem version, or a revision request exists. |
incident.postmortem_summary.has_working_draftboolean Always returned | Indicates whether the working postmortem draft has content or prepared evidence. |
incident.postmortem_summary.latest_version_idinteger | null Always returned | The ID of the latest postmortem version. A null value means that no version exists. |
incident.postmortem_summary.latest_version_kindstring | null Always returned | The kind of the latest postmortem version. submitted is a human submission. draft, llm, and legacy need human review before submission. A null value means that no version exists. Possible values: "submitted""draft""llm""legacy"null |
incident.postmortem_summary.work_statestring Always returned | Whether the incident still needs postmortem work. none means that no postmortem is due: the incident is not resolved or closed, or it is archived without a submitted postmortem. missing means that a resolved or closed incident has no postmortem version. in_review means that the latest version needs human submission. complete means that the latest version is a human submission. missing and in_review need work; the postmortem queue (scope=postmortem) shows those incidents even when the plan's history window hides other finished incidents. Only incident collection responses load this field; single-incident and mutation responses return postmortem_summary as null. Possible values: "none""missing""in_review""complete" |
incident.created_atstring (RFC 3339) Always returned | The incident creation time. |
incident.created_bystring Always returned | The identifier of the user who created the incident. |
incident.custom_fieldsobject Always returned | The incident values keyed by custom-field slug. |
incident.archived_atstring (RFC 3339) | null Always returned | The incident archive time. A null value means that the incident is active. |
incident.archived_byinteger | null Always returned | The user ID that archived the incident. A null value means that the incident is active. |
incident.incident_managerstring Always returned | The user identifier of the incident manager. An empty string means that no manager is assigned. |
incident.incident_respondersstring[] Always returned | The user identifiers of assigned responders. |
incident.has_assigneesboolean Always returned | Indicates whether the incident has a manager or at least one responder. |
timeline_eventobject Sometimes returned | The complete public record for a timeline event. |
timeline_event.idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
timeline_event.incident_idinteger Always returned | The positive numeric ID of the incident. |
timeline_event.started_atstring (RFC 3339) Always returned | The event start time. |
timeline_event.atstring (RFC 3339) Always returned | A deprecated response alias for started_at. Both fields contain the same value. |
timeline_event.ended_atstring (RFC 3339) | null Always returned | The event end time. A null value means that the event has no end time. |
timeline_event.is_ongoingboolean Always returned | Indicates whether the event is still in progress. |
timeline_event.group_idinteger | null Always returned | The timeline-group ID. A null value means that the event has no group. |
timeline_event.is_keyboolean Always returned | Indicates whether responders marked this as a key incident event. |
timeline_event.sourcestring Always returned | The system or actor that created the event. |
timeline_event.source_refstring Always returned | The source-specific reference for the event. |
timeline_event.typestring Always returned | The event type used for grouping and display. |
timeline_event.iconstring Always returned | The event icon. The maximum length is 8 Unicode characters. Maximum length: 8 characters. |
timeline_event.titlestring Always returned | The optional display title of the event. |
timeline_event.bodystring Always returned | The event description. |
timeline_event.collaboration_generationinteger Always returned | The version of collaborative content associated with the event. |
timeline_event.tagsstring[] Always returned | The normalized event tags. |
timeline_event.ai_contextstring Always returned | The saved AI context for a generated event. An empty string means that no context is stored. |
timeline_event.created_bystring Always returned | The identifier of the user or system that created the event. |
timeline_event.comment_countinteger Always returned | The number of comments on the event. |
timeline_event.attachmentsobject[] Always returned | The files attached to the event. |
timeline_event.attachments[].idinteger Always returned | The positive numeric ID of the attachment. |
timeline_event.attachments[].timeline_event_idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.attachments[].filenamestring Always returned | The original file name. |
timeline_event.attachments[].urlstring Always returned | A temporary download URL. An empty string means that no URL is currently available. |
timeline_event.attachments[].url_availableboolean Always returned | Indicates whether url contains an available download URL. |
timeline_event.attachments[].content_typestring Always returned | The media type of the attached file. |
timeline_event.attachments[].size_bytesinteger Always returned | The file size in bytes. |
timeline_event.attachments[].created_atstring (RFC 3339) Always returned | The attachment creation time. |
timeline_event.attachments[].created_bystring Always returned | The identifier of the user who attached the file. |
timeline_event.source_window_started_atstring (RFC 3339) | null Always returned | The start of the source-data window. A null value means that no window is recorded. |
timeline_event.source_window_ended_atstring (RFC 3339) | null Always returned | The end of the source-data window. A null value means that no window is recorded. |
timeline_event.evidence_linksobject[] Always returned | The evidence references associated with the event. |
timeline_event.evidence_links[].sourcestring Always returned | The system or provider that supplied the evidence. |
timeline_event.evidence_links[].urlstring Always returned | The absolute URL of the evidence. |
timeline_event.evidence_links[].labelstring Sometimes returned | A short display name for the evidence. |
timeline_event.evidence_links[].summarystring Sometimes returned | A short summary of the evidence. |
timeline_event.evidence_links[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
timeline_event.evidence_links[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
timeline_event.evidence_links[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
timeline_event.evidence_links[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
timeline_event.operational_updateobject | null Sometimes returned | The validated operational status payload. Null or absent for ordinary and legacy timeline events. Must match exactly one of 2 schema variants. |
timeline_event.operational_update.current_impactstring Always returned | The current customer or system impact in human-authored text. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.current_actionstring Always returned | The response work currently in progress. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.next_update_atstring (RFC 3339) | null Always returned | The planned next update time as RFC 3339 |
timeline_event.operational_update.audiencestring Always returned | The intended audience for the status update. Possible values: "responders""stakeholders""customers" |
timeline_event.operational_update.channelstring Always returned | Records the destination workflow. manual_external means the caller must deliver the copied message themselves. Possible values: "incident_record""manual_external" |
timeline_event.operational_update.destinationstring Always returned | The human-readable external destination for manual_external Maximum length: 200 characters. |
timeline_event.operational_update.communications_owner_user_idinteger | null Always returned | The active incident participant responsible for coordinating manual delivery |
timeline_event.operational_update.delivery_statestring Always returned | The server-derived delivery state. Tellagen does not claim that a manual external message was sent. Possible values: "recorded""pending_manual_delivery" |
Response headers
| Field | Description |
|---|---|
Tellagen-Resource-Versioninteger Always returned | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (7)
You can repeat this request. If the API returns 429, wait for Retry-After. Set a maximum number of attempts. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Get incident
#/api/v1/incidents/{id}Returns one incident by its positive numeric ID. The permanent-reference endpoint is suitable for stored references, external links, and workflows in other systems.
- Required scope
- incidents:read
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request GET \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}' \
--header 'Authorization: Bearer <token>'Success: 200
Returns the complete incident record. Nullable timestamps, team details, archive details, and investigation_summary are always present. These fields can be null. Arrays and custom_fields are never null.
Success response JSON
{
"incident": {
"id": 1,
"revision": 7,
"company_id": 7,
"human_id": "INC-2025-001",
"title": "Payments API requests timing out",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "active",
"status_changed_at": "2025-01-30T12:05:00Z",
"last_event_at": "2025-01-30T12:10:00Z",
"last_event_summary": "Investigating root cause",
"issue_type": "incident",
"severity_mode": "manual",
"impact_summary": "Payment processing delayed for EU customers",
"customer_impact_status": "confirmed",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": null,
"duration_seconds": 900,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 5,
"investigation_summary": null,
"status_update_summary": null,
"postmortem_summary": null,
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {},
"archived_at": null,
"archived_by": null,
"incident_manager": "[email protected]",
"incident_responders": [
"[email protected]"
],
"has_assignees": true
}
}Parameters, headers, and fields
Operation ID: getIncident
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Response 200
Returns the complete incident record. Nullable timestamps, team details, archive details, and investigation_summary are always present. These fields can be null. Arrays and custom_fields are never null.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
incidentobject Always returned | The complete public record for an incident. |
incident.idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
incident.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
incident.company_idinteger Always returned | The ID of the workspace that owns the incident. Minimum: 1. |
incident.human_idstring Always returned | The permanent incident reference shown to users. |
incident.titlestring Always returned | The editable display title of the incident. |
incident.servicestring Always returned | The service slug associated with the incident. |
incident.regionsstring[] Always returned | The affected regions. |
incident.severitystring Always returned | The configured severity key. |
incident.slack_channel_idstring Always returned | The linked Slack channel ID. An empty string means that no channel is linked. |
incident.meet_urlstring Always returned | The incident meeting URL. An empty string means that no meeting is linked. |
incident.doc_urlstring Always returned | The incident document or source URL. An empty string means that no URL is stored. |
incident.statusstring Always returned | The configured workflow-status key. |
incident.status_changed_atstring (RFC 3339) | null Always returned | The time of the latest workflow-status change. A null value means that this time is unavailable. |
incident.last_event_atstring (RFC 3339) | null Always returned | The start time of the latest timeline event. A null value means that no event exists. |
incident.last_event_summarystring Always returned | A summary of the latest timeline event. |
incident.issue_typestring Always returned | The work type. Possible values: "ticket""incident""postmortem" |
incident.severity_modestring Always returned | The severity selection mode. Possible values: "auto""manual" |
incident.impact_summarystring Always returned | The current customer or operational impact summary. |
incident.customer_impact_statusstring Always returned | The customer-impact assessment. Possible values: "unknown""none""confirmed" |
incident.impact_started_atstring (RFC 3339) | null Always returned | The impact start time. A null value means that the time is unknown. |
incident.first_reported_atstring (RFC 3339) | null Always returned | The time of the first incident report. A null value means that the time is unknown. |
incident.first_responded_atstring (RFC 3339) | null Always returned | The time of the first response. A null value means that the time is unknown. |
incident.recovered_atstring (RFC 3339) | null Always returned | The service recovery time. A null value means that recovery is not recorded. |
incident.duration_secondsinteger Always returned | The calculated incident duration in whole seconds. Minimum: 0. |
incident.duration_anchorstring Always returned | The timestamp field from which the API calculates duration. |
incident.team_idinteger | null Always returned | The owning-team ID. A null value means that the incident has no owning team. |
incident.event_countinteger Always returned | The number of timeline events for the incident. Minimum: 0. |
incident.investigation_summaryobject | null Always returned | A summary of investigation runs. A null value means that no investigation data exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.run_countinteger Always returned | The total number of investigation runs. Minimum: 0. |
incident.investigation_summary.latest_runobject | null Always returned | The most recent investigation run. A null value means that no run exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.latest_run.statusstring Always returned | The current investigation-run status. |
incident.investigation_summary.latest_run.started_atstring (RFC 3339) Always returned | The investigation-run start time. |
incident.investigation_summary.latest_run.completed_atstring (RFC 3339) Sometimes returned | The investigation-run completion time. |
incident.status_update_summaryobject | null Always returned | The latest recorded status update and the next update time that it set. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load status-update data. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_recorded_atstring (RFC 3339) | null Always returned | The time of the latest status update. A null value means that no status update has been recorded. |
incident.status_update_summary.next_update_atstring (RFC 3339) | null Always returned | The next update time set by the latest status update. A null value means that no time was set. |
incident.status_update_summary.latest_excerptstring | null Always returned | One line from the latest status update: its current action, or its current impact when the action is blank, trimmed. Text longer than 120 characters keeps its first 117 characters and ends with an ellipsis (…). A null value means that no status update has been recorded. Only incident collection responses load this field; single-incident and mutation responses return status_update_summary as null. Maximum length: 120 characters. |
incident.status_update_summary.latest_deliveryobject | null Sometimes returned | How the latest status update was posted to Slack. A null value means that the update was recorded without sharing, that no status update has been recorded, or that the workspace does not have status update delivery turned on. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_delivery.sentinteger Always returned | Delivered. Minimum: 0. |
incident.status_update_summary.latest_delivery.pendinginteger Always returned | Queued or being posted. Minimum: 0. |
incident.status_update_summary.latest_delivery.failedinteger Always returned | Failed or stopped without reaching Slack; a person can retry these. Minimum: 0. |
incident.status_update_summary.latest_delivery.unconfirmedinteger Always returned | Slack did not confirm these posts and may have accepted them. Check the channel before retrying. Minimum: 0. |
incident.status_update_summary.latest_delivery.skippedinteger Always returned | Never attempted. Minimum: 0. |
incident.postmortem_summaryobject | null Always returned | The postmortem work recorded for the incident and whether the incident still needs it. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load postmortem data. Must match exactly one of 2 schema variants. |
incident.postmortem_summary.has_workboolean Always returned | Indicates whether a postmortem draft with content, a postmortem version, or a revision request exists. |
incident.postmortem_summary.has_working_draftboolean Always returned | Indicates whether the working postmortem draft has content or prepared evidence. |
incident.postmortem_summary.latest_version_idinteger | null Always returned | The ID of the latest postmortem version. A null value means that no version exists. |
incident.postmortem_summary.latest_version_kindstring | null Always returned | The kind of the latest postmortem version. submitted is a human submission. draft, llm, and legacy need human review before submission. A null value means that no version exists. Possible values: "submitted""draft""llm""legacy"null |
incident.postmortem_summary.work_statestring Always returned | Whether the incident still needs postmortem work. none means that no postmortem is due: the incident is not resolved or closed, or it is archived without a submitted postmortem. missing means that a resolved or closed incident has no postmortem version. in_review means that the latest version needs human submission. complete means that the latest version is a human submission. missing and in_review need work; the postmortem queue (scope=postmortem) shows those incidents even when the plan's history window hides other finished incidents. Only incident collection responses load this field; single-incident and mutation responses return postmortem_summary as null. Possible values: "none""missing""in_review""complete" |
incident.created_atstring (RFC 3339) Always returned | The incident creation time. |
incident.created_bystring Always returned | The identifier of the user who created the incident. |
incident.custom_fieldsobject Always returned | The incident values keyed by custom-field slug. |
incident.archived_atstring (RFC 3339) | null Always returned | The incident archive time. A null value means that the incident is active. |
incident.archived_byinteger | null Always returned | The user ID that archived the incident. A null value means that the incident is active. |
incident.incident_managerstring Always returned | The user identifier of the incident manager. An empty string means that no manager is assigned. |
incident.incident_respondersstring[] Always returned | The user identifiers of assigned responders. |
incident.has_assigneesboolean Always returned | Indicates whether the incident has a manager or at least one responder. |
timeline_eventobject Sometimes returned | The complete public record for a timeline event. |
timeline_event.idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
timeline_event.incident_idinteger Always returned | The positive numeric ID of the incident. |
timeline_event.started_atstring (RFC 3339) Always returned | The event start time. |
timeline_event.atstring (RFC 3339) Always returned | A deprecated response alias for started_at. Both fields contain the same value. |
timeline_event.ended_atstring (RFC 3339) | null Always returned | The event end time. A null value means that the event has no end time. |
timeline_event.is_ongoingboolean Always returned | Indicates whether the event is still in progress. |
timeline_event.group_idinteger | null Always returned | The timeline-group ID. A null value means that the event has no group. |
timeline_event.is_keyboolean Always returned | Indicates whether responders marked this as a key incident event. |
timeline_event.sourcestring Always returned | The system or actor that created the event. |
timeline_event.source_refstring Always returned | The source-specific reference for the event. |
timeline_event.typestring Always returned | The event type used for grouping and display. |
timeline_event.iconstring Always returned | The event icon. The maximum length is 8 Unicode characters. Maximum length: 8 characters. |
timeline_event.titlestring Always returned | The optional display title of the event. |
timeline_event.bodystring Always returned | The event description. |
timeline_event.collaboration_generationinteger Always returned | The version of collaborative content associated with the event. |
timeline_event.tagsstring[] Always returned | The normalized event tags. |
timeline_event.ai_contextstring Always returned | The saved AI context for a generated event. An empty string means that no context is stored. |
timeline_event.created_bystring Always returned | The identifier of the user or system that created the event. |
timeline_event.comment_countinteger Always returned | The number of comments on the event. |
timeline_event.attachmentsobject[] Always returned | The files attached to the event. |
timeline_event.attachments[].idinteger Always returned | The positive numeric ID of the attachment. |
timeline_event.attachments[].timeline_event_idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.attachments[].filenamestring Always returned | The original file name. |
timeline_event.attachments[].urlstring Always returned | A temporary download URL. An empty string means that no URL is currently available. |
timeline_event.attachments[].url_availableboolean Always returned | Indicates whether url contains an available download URL. |
timeline_event.attachments[].content_typestring Always returned | The media type of the attached file. |
timeline_event.attachments[].size_bytesinteger Always returned | The file size in bytes. |
timeline_event.attachments[].created_atstring (RFC 3339) Always returned | The attachment creation time. |
timeline_event.attachments[].created_bystring Always returned | The identifier of the user who attached the file. |
timeline_event.source_window_started_atstring (RFC 3339) | null Always returned | The start of the source-data window. A null value means that no window is recorded. |
timeline_event.source_window_ended_atstring (RFC 3339) | null Always returned | The end of the source-data window. A null value means that no window is recorded. |
timeline_event.evidence_linksobject[] Always returned | The evidence references associated with the event. |
timeline_event.evidence_links[].sourcestring Always returned | The system or provider that supplied the evidence. |
timeline_event.evidence_links[].urlstring Always returned | The absolute URL of the evidence. |
timeline_event.evidence_links[].labelstring Sometimes returned | A short display name for the evidence. |
timeline_event.evidence_links[].summarystring Sometimes returned | A short summary of the evidence. |
timeline_event.evidence_links[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
timeline_event.evidence_links[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
timeline_event.evidence_links[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
timeline_event.evidence_links[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
timeline_event.operational_updateobject | null Sometimes returned | The validated operational status payload. Null or absent for ordinary and legacy timeline events. Must match exactly one of 2 schema variants. |
timeline_event.operational_update.current_impactstring Always returned | The current customer or system impact in human-authored text. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.current_actionstring Always returned | The response work currently in progress. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.next_update_atstring (RFC 3339) | null Always returned | The planned next update time as RFC 3339 |
timeline_event.operational_update.audiencestring Always returned | The intended audience for the status update. Possible values: "responders""stakeholders""customers" |
timeline_event.operational_update.channelstring Always returned | Records the destination workflow. manual_external means the caller must deliver the copied message themselves. Possible values: "incident_record""manual_external" |
timeline_event.operational_update.destinationstring Always returned | The human-readable external destination for manual_external Maximum length: 200 characters. |
timeline_event.operational_update.communications_owner_user_idinteger | null Always returned | The active incident participant responsible for coordinating manual delivery |
timeline_event.operational_update.delivery_statestring Always returned | The server-derived delivery state. Tellagen does not claim that a manual external message was sent. Possible values: "recorded""pending_manual_delivery" |
Response headers
| Field | Description |
|---|---|
Tellagen-Resource-Versioninteger Always returned | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (7)
You can repeat this request. If the API returns 429, wait for Retry-After. Set a maximum number of attempts. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Update incident
#/api/v1/incidents/{id}Updates only the fields that you send. Other fields keep their current values. The response contains the complete incident.
Use resolve, close, or reopen to change the workflow status. This endpoint still accepts status changes for existing API v1 clients. The API checks new timestamps against existing timestamps. Field changes can also change automatic severity.
- Required scope
- incidents:write
- Also required
- Active responder seatIncident is not archived
Example request
Replace {company}, <token>, and any other placeholders with your values.
Use the Tellagen-Resource-Version header from a GET of this resource for <resource-version>.
curl --request PATCH \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}' \
--header 'Authorization: Bearer <token>' \
--header 'If-Tellagen-Resource-Version: <resource-version>' \
--header 'Content-Type: application/json' \
--data '{
"title": "Payments API recovered; monitoring authorization backlog",
"impact_summary": "Full payment outage in EU region"
}'Success: 200
Returns the complete updated incident. A transition to resolved changes issue_type to postmortem. A transition from resolved to active changes issue_type to incident.
Success response JSON
{
"incident": {
"id": 1,
"revision": 7,
"company_id": 7,
"human_id": "INC-2025-001",
"title": "Payments API recovered; monitoring authorization backlog",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "active",
"status_changed_at": "2025-01-30T12:00:00Z",
"last_event_at": "2025-01-30T13:30:00Z",
"last_event_summary": "Service fully recovered",
"issue_type": "incident",
"severity_mode": "manual",
"impact_summary": "Full payment outage in EU region",
"customer_impact_status": "confirmed",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": "2025-01-30T13:30:00Z",
"duration_seconds": 5700,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 12,
"investigation_summary": null,
"status_update_summary": null,
"postmortem_summary": null,
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {},
"archived_at": null,
"archived_by": null,
"incident_manager": "[email protected]",
"incident_responders": [
"[email protected]"
],
"has_assignees": true
}
}Parameters, headers, and fields
Operation ID: updateIncident
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Request headers
| Field | Description |
|---|---|
If-Tellagen-Resource-Versioninteger Required | The current positive resource version from the latest response. API-key PATCH requests must send this value. Minimum: 1. |
Request body
Optional fields can be omitted. To clear a value, use the format in its description. Nested fields apply only within their parent object.
| Field | Description |
|---|---|
titlestring Optional | The incident display title. The maximum length is 160 characters. This field is separate from impact_summary. Maximum length: 160 characters. |
servicestring Optional | The service slug. The maximum length is 128 characters. Maximum length: 128 characters. |
regionsstring[] Optional | The complete replacement list of affected regions. An empty array removes all regions. |
severitystring Optional | A severity key from the workspace configuration. |
slack_channel_idstring Optional | The stored Slack channel ID. |
meet_urlstring Optional | The absolute HTTP or HTTPS meeting URL. |
doc_urlstring Optional | An absolute HTTP or HTTPS URL for an incident document or source. |
statusstring Optional | A workflow-status key from the workspace configuration. New clients use the resolve, close, and reopen operations for lifecycle changes. |
issue_typestring Optional | The work type. Existing alert records remain available for compatibility. Allowed values: "ticket""incident""postmortem" |
team_idinteger | null Optional | The positive ID of an active owning team. A null value removes the current team assignment. |
severity_modestring Optional | The severity selection mode. Allowed values: "auto""manual" |
impact_summarystring Optional | The customer or operational impact summary. |
customer_impact_statusstring Optional | The customer-impact assessment. Allowed values: "unknown""none""confirmed" |
impact_started_atstring (RFC 3339) Optional | The RFC 3339 impact start time. |
first_reported_atstring (RFC 3339) Optional | The RFC 3339 time of the first incident report. |
first_responded_atstring (RFC 3339) Optional | The RFC 3339 time of the first response. |
recovered_atstring (RFC 3339) Optional | The RFC 3339 service recovery time. |
Response 200
Returns the complete updated incident. A transition to resolved changes issue_type to postmortem. A transition from resolved to active changes issue_type to incident.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
incidentobject Always returned | The complete public record for an incident. |
incident.idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
incident.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
incident.company_idinteger Always returned | The ID of the workspace that owns the incident. Minimum: 1. |
incident.human_idstring Always returned | The permanent incident reference shown to users. |
incident.titlestring Always returned | The editable display title of the incident. |
incident.servicestring Always returned | The service slug associated with the incident. |
incident.regionsstring[] Always returned | The affected regions. |
incident.severitystring Always returned | The configured severity key. |
incident.slack_channel_idstring Always returned | The linked Slack channel ID. An empty string means that no channel is linked. |
incident.meet_urlstring Always returned | The incident meeting URL. An empty string means that no meeting is linked. |
incident.doc_urlstring Always returned | The incident document or source URL. An empty string means that no URL is stored. |
incident.statusstring Always returned | The configured workflow-status key. |
incident.status_changed_atstring (RFC 3339) | null Always returned | The time of the latest workflow-status change. A null value means that this time is unavailable. |
incident.last_event_atstring (RFC 3339) | null Always returned | The start time of the latest timeline event. A null value means that no event exists. |
incident.last_event_summarystring Always returned | A summary of the latest timeline event. |
incident.issue_typestring Always returned | The work type. Possible values: "ticket""incident""postmortem" |
incident.severity_modestring Always returned | The severity selection mode. Possible values: "auto""manual" |
incident.impact_summarystring Always returned | The current customer or operational impact summary. |
incident.customer_impact_statusstring Always returned | The customer-impact assessment. Possible values: "unknown""none""confirmed" |
incident.impact_started_atstring (RFC 3339) | null Always returned | The impact start time. A null value means that the time is unknown. |
incident.first_reported_atstring (RFC 3339) | null Always returned | The time of the first incident report. A null value means that the time is unknown. |
incident.first_responded_atstring (RFC 3339) | null Always returned | The time of the first response. A null value means that the time is unknown. |
incident.recovered_atstring (RFC 3339) | null Always returned | The service recovery time. A null value means that recovery is not recorded. |
incident.duration_secondsinteger Always returned | The calculated incident duration in whole seconds. Minimum: 0. |
incident.duration_anchorstring Always returned | The timestamp field from which the API calculates duration. |
incident.team_idinteger | null Always returned | The owning-team ID. A null value means that the incident has no owning team. |
incident.event_countinteger Always returned | The number of timeline events for the incident. Minimum: 0. |
incident.investigation_summaryobject | null Always returned | A summary of investigation runs. A null value means that no investigation data exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.run_countinteger Always returned | The total number of investigation runs. Minimum: 0. |
incident.investigation_summary.latest_runobject | null Always returned | The most recent investigation run. A null value means that no run exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.latest_run.statusstring Always returned | The current investigation-run status. |
incident.investigation_summary.latest_run.started_atstring (RFC 3339) Always returned | The investigation-run start time. |
incident.investigation_summary.latest_run.completed_atstring (RFC 3339) Sometimes returned | The investigation-run completion time. |
incident.status_update_summaryobject | null Always returned | The latest recorded status update and the next update time that it set. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load status-update data. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_recorded_atstring (RFC 3339) | null Always returned | The time of the latest status update. A null value means that no status update has been recorded. |
incident.status_update_summary.next_update_atstring (RFC 3339) | null Always returned | The next update time set by the latest status update. A null value means that no time was set. |
incident.status_update_summary.latest_excerptstring | null Always returned | One line from the latest status update: its current action, or its current impact when the action is blank, trimmed. Text longer than 120 characters keeps its first 117 characters and ends with an ellipsis (…). A null value means that no status update has been recorded. Only incident collection responses load this field; single-incident and mutation responses return status_update_summary as null. Maximum length: 120 characters. |
incident.status_update_summary.latest_deliveryobject | null Sometimes returned | How the latest status update was posted to Slack. A null value means that the update was recorded without sharing, that no status update has been recorded, or that the workspace does not have status update delivery turned on. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_delivery.sentinteger Always returned | Delivered. Minimum: 0. |
incident.status_update_summary.latest_delivery.pendinginteger Always returned | Queued or being posted. Minimum: 0. |
incident.status_update_summary.latest_delivery.failedinteger Always returned | Failed or stopped without reaching Slack; a person can retry these. Minimum: 0. |
incident.status_update_summary.latest_delivery.unconfirmedinteger Always returned | Slack did not confirm these posts and may have accepted them. Check the channel before retrying. Minimum: 0. |
incident.status_update_summary.latest_delivery.skippedinteger Always returned | Never attempted. Minimum: 0. |
incident.postmortem_summaryobject | null Always returned | The postmortem work recorded for the incident and whether the incident still needs it. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load postmortem data. Must match exactly one of 2 schema variants. |
incident.postmortem_summary.has_workboolean Always returned | Indicates whether a postmortem draft with content, a postmortem version, or a revision request exists. |
incident.postmortem_summary.has_working_draftboolean Always returned | Indicates whether the working postmortem draft has content or prepared evidence. |
incident.postmortem_summary.latest_version_idinteger | null Always returned | The ID of the latest postmortem version. A null value means that no version exists. |
incident.postmortem_summary.latest_version_kindstring | null Always returned | The kind of the latest postmortem version. submitted is a human submission. draft, llm, and legacy need human review before submission. A null value means that no version exists. Possible values: "submitted""draft""llm""legacy"null |
incident.postmortem_summary.work_statestring Always returned | Whether the incident still needs postmortem work. none means that no postmortem is due: the incident is not resolved or closed, or it is archived without a submitted postmortem. missing means that a resolved or closed incident has no postmortem version. in_review means that the latest version needs human submission. complete means that the latest version is a human submission. missing and in_review need work; the postmortem queue (scope=postmortem) shows those incidents even when the plan's history window hides other finished incidents. Only incident collection responses load this field; single-incident and mutation responses return postmortem_summary as null. Possible values: "none""missing""in_review""complete" |
incident.created_atstring (RFC 3339) Always returned | The incident creation time. |
incident.created_bystring Always returned | The identifier of the user who created the incident. |
incident.custom_fieldsobject Always returned | The incident values keyed by custom-field slug. |
incident.archived_atstring (RFC 3339) | null Always returned | The incident archive time. A null value means that the incident is active. |
incident.archived_byinteger | null Always returned | The user ID that archived the incident. A null value means that the incident is active. |
incident.incident_managerstring Always returned | The user identifier of the incident manager. An empty string means that no manager is assigned. |
incident.incident_respondersstring[] Always returned | The user identifiers of assigned responders. |
incident.has_assigneesboolean Always returned | Indicates whether the incident has a manager or at least one responder. |
timeline_eventobject Sometimes returned | The complete public record for a timeline event. |
timeline_event.idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
timeline_event.incident_idinteger Always returned | The positive numeric ID of the incident. |
timeline_event.started_atstring (RFC 3339) Always returned | The event start time. |
timeline_event.atstring (RFC 3339) Always returned | A deprecated response alias for started_at. Both fields contain the same value. |
timeline_event.ended_atstring (RFC 3339) | null Always returned | The event end time. A null value means that the event has no end time. |
timeline_event.is_ongoingboolean Always returned | Indicates whether the event is still in progress. |
timeline_event.group_idinteger | null Always returned | The timeline-group ID. A null value means that the event has no group. |
timeline_event.is_keyboolean Always returned | Indicates whether responders marked this as a key incident event. |
timeline_event.sourcestring Always returned | The system or actor that created the event. |
timeline_event.source_refstring Always returned | The source-specific reference for the event. |
timeline_event.typestring Always returned | The event type used for grouping and display. |
timeline_event.iconstring Always returned | The event icon. The maximum length is 8 Unicode characters. Maximum length: 8 characters. |
timeline_event.titlestring Always returned | The optional display title of the event. |
timeline_event.bodystring Always returned | The event description. |
timeline_event.collaboration_generationinteger Always returned | The version of collaborative content associated with the event. |
timeline_event.tagsstring[] Always returned | The normalized event tags. |
timeline_event.ai_contextstring Always returned | The saved AI context for a generated event. An empty string means that no context is stored. |
timeline_event.created_bystring Always returned | The identifier of the user or system that created the event. |
timeline_event.comment_countinteger Always returned | The number of comments on the event. |
timeline_event.attachmentsobject[] Always returned | The files attached to the event. |
timeline_event.attachments[].idinteger Always returned | The positive numeric ID of the attachment. |
timeline_event.attachments[].timeline_event_idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.attachments[].filenamestring Always returned | The original file name. |
timeline_event.attachments[].urlstring Always returned | A temporary download URL. An empty string means that no URL is currently available. |
timeline_event.attachments[].url_availableboolean Always returned | Indicates whether url contains an available download URL. |
timeline_event.attachments[].content_typestring Always returned | The media type of the attached file. |
timeline_event.attachments[].size_bytesinteger Always returned | The file size in bytes. |
timeline_event.attachments[].created_atstring (RFC 3339) Always returned | The attachment creation time. |
timeline_event.attachments[].created_bystring Always returned | The identifier of the user who attached the file. |
timeline_event.source_window_started_atstring (RFC 3339) | null Always returned | The start of the source-data window. A null value means that no window is recorded. |
timeline_event.source_window_ended_atstring (RFC 3339) | null Always returned | The end of the source-data window. A null value means that no window is recorded. |
timeline_event.evidence_linksobject[] Always returned | The evidence references associated with the event. |
timeline_event.evidence_links[].sourcestring Always returned | The system or provider that supplied the evidence. |
timeline_event.evidence_links[].urlstring Always returned | The absolute URL of the evidence. |
timeline_event.evidence_links[].labelstring Sometimes returned | A short display name for the evidence. |
timeline_event.evidence_links[].summarystring Sometimes returned | A short summary of the evidence. |
timeline_event.evidence_links[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
timeline_event.evidence_links[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
timeline_event.evidence_links[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
timeline_event.evidence_links[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
timeline_event.operational_updateobject | null Sometimes returned | The validated operational status payload. Null or absent for ordinary and legacy timeline events. Must match exactly one of 2 schema variants. |
timeline_event.operational_update.current_impactstring Always returned | The current customer or system impact in human-authored text. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.current_actionstring Always returned | The response work currently in progress. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.next_update_atstring (RFC 3339) | null Always returned | The planned next update time as RFC 3339 |
timeline_event.operational_update.audiencestring Always returned | The intended audience for the status update. Possible values: "responders""stakeholders""customers" |
timeline_event.operational_update.channelstring Always returned | Records the destination workflow. manual_external means the caller must deliver the copied message themselves. Possible values: "incident_record""manual_external" |
timeline_event.operational_update.destinationstring Always returned | The human-readable external destination for manual_external Maximum length: 200 characters. |
timeline_event.operational_update.communications_owner_user_idinteger | null Always returned | The active incident participant responsible for coordinating manual delivery |
timeline_event.operational_update.delivery_statestring Always returned | The server-derived delivery state. Tellagen does not claim that a manual external message was sent. Possible values: "recorded""pending_manual_delivery" |
Response headers
| Field | Description |
|---|---|
Tellagen-Resource-Versioninteger Always returned | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (9)
If the API returns 412, read the resource again. Compare the latest changes before you retry with the new version. Retries and updates
Error responses (9)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 412
- The resource changed after the client obtained its If-Tellagen-Resource-Version value.
- 428
- An API-key PATCH request did not include the required If-Tellagen-Resource-Version header.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
List incident actions
#/api/v1/incidents/{id}/actionsReturns the incident actions that match the repeated status filters. If status is omitted, the API returns open, in_progress, blocked, and waiting actions. The response is ordered by priority, due time, and creation time. The total field equals the number of returned actions.
- Required scope
- incidents:read
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request GET \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/actions' \
--header 'Authorization: Bearer <token>'Success: 200
Returns the matching action records and their count. Blocker fields are present for blocked or waiting actions; an unassigned unblock owner is represented by a null value or an omitted response field.
Success response JSON
{
"actions": [
{
"id": 301,
"incident_id": 1,
"title": "Confirm provider recovery",
"description": "Confirm the provider has restored the payment path.",
"status": "blocked",
"priority": "high",
"category": "immediate",
"operational_caveat": "",
"blocker_reason": "Waiting for provider confirmation",
"unblock_owner_user_id": 42,
"source": "custom",
"assignee_user_id": 7,
"due_at": "2026-08-31T13:00:00Z",
"created_by": "[email protected]",
"completed_at": null,
"created_at": "2026-08-31T12:15:00Z",
"updated_at": "2026-08-31T12:20:00Z",
"supporting_evidence": []
}
],
"total": 1
}Parameters, headers, and fields
Operation ID: listIncidentActions
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Query parameters
| Field | Description |
|---|---|
statusstring[] Optional | Repeated action statuses to include. The default is open, in_progress, blocked, and waiting. Allowed values: "open""in_progress""blocked""waiting""completed""canceled" |
Response 200
Returns the matching action records and their count. Blocker fields are present for blocked or waiting actions; an unassigned unblock owner is represented by a null value or an omitted response field.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
actionsobject[] Always returned | The incident actions matching the requested statuses. |
actions[].idinteger Always returned | The positive numeric ID of the action. Minimum: 1. |
actions[].incident_idinteger Always returned | The positive numeric ID of the incident that owns the action. Minimum: 1. |
actions[].titlestring Always returned | The action title after trimming. The maximum length is 160 Unicode characters. Minimum length: 1 characters. · Maximum length: 160 characters. |
actions[].descriptionstring Always returned | The action details after trimming. The maximum length is 2 Maximum length: 2000 characters. |
actions[].statusstring Always returned | The response-work state of an incident action. Possible values: "open""in_progress""blocked""waiting""completed""canceled" |
actions[].prioritystring Always returned | The urgency assigned to an incident action. Possible values: "critical""high""medium""low" |
actions[].categorystring Always returned | The response-work category assigned to an incident action. Possible values: "immediate""prevent_recurrence""investigate""monitor""unspecified" |
actions[].operational_caveatstring Sometimes returned | The diagnostic guidance caveat for the action. This is separate from blocker_reason and is omitted when empty. |
actions[].blocker_reasonstring Sometimes returned | The human dependency explanation. It is present and nonempty for blocked or waiting actions and omitted after leaving those states. Maximum length: 2000 characters. |
actions[].unblock_owner_user_idinteger | null Sometimes returned | The active incident manager or responder responsible for clearing the dependency. A null value means unassigned and this field may be omitted from responses. Minimum: 1. |
actions[].sourcestring Always returned | The source that created an incident action. Possible values: "custom""diagnostic""suggestion" |
actions[].source_suggestion_idinteger | null Sometimes returned | The source suggestion ID when the action was accepted from a diagnostic suggestion. This field is omitted for other sources. Minimum: 1. |
actions[].assignee_user_idinteger | null Sometimes returned | The active incident participant responsible for carrying out the action. A null value means unassigned and this field may be omitted from responses. Minimum: 1. |
actions[].due_atstring (RFC 3339) | null Sometimes returned | The action due time in RFC 3339 format. A null value means no due time and this field may be omitted from responses. |
actions[].completed_atstring (RFC 3339) | null Sometimes returned | The completion time in RFC 3339 format. It is null or omitted while the action is not completed. |
actions[].created_bystring Always returned | The identifier of the user who created the action. |
actions[].created_atstring (RFC 3339) Always returned | The action creation time. |
actions[].updated_atstring (RFC 3339) Always returned | The time of the latest action change. |
actions[].supporting_evidenceobject[] Always returned | Evidence references attached to the action. |
actions[].supporting_evidence[].sourcestring Always returned | The system or provider that supplied the evidence. |
actions[].supporting_evidence[].urlstring Always returned | The absolute URL of the evidence. |
actions[].supporting_evidence[].labelstring Sometimes returned | A short display name for the evidence. |
actions[].supporting_evidence[].summarystring Sometimes returned | A short summary of the evidence. |
actions[].supporting_evidence[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
actions[].supporting_evidence[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
actions[].supporting_evidence[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
actions[].supporting_evidence[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
totalinteger Always returned | The number of actions in the actions array. Minimum: 0. |
Errors and recovery (7)
You can repeat this request. If the API returns 429, wait for Retry-After. Set a maximum number of attempts. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Create incident action
#/api/v1/incidents/{id}/actionsCreates an open action on an active incident. The API validates the title, description, priority, assignee, and due time before saving. New actions do not accept blocker fields; use the update operation to move an action to blocked or waiting with a required blocker reason.
- Required scope
- incidents:write
- Also required
- Active responder seatIncident is not archived
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/actions' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"title": "Confirm provider recovery",
"description": "Confirm the provider has restored the payment path.",
"priority": "high",
"assignee_user_id": 7,
"due_at": "2026-08-31T13:00:00Z"
}'Success: 201
Returns the created open action.
Success response JSON
{
"action": {
"id": 301,
"incident_id": 1,
"title": "Confirm provider recovery",
"description": "Confirm the provider has restored the payment path.",
"status": "open",
"priority": "high",
"category": "unspecified",
"operational_caveat": "",
"source": "custom",
"assignee_user_id": 7,
"due_at": "2026-08-31T13:00:00Z",
"created_by": "[email protected]",
"completed_at": null,
"created_at": "2026-08-31T12:15:00Z",
"updated_at": "2026-08-31T12:15:00Z",
"supporting_evidence": []
}
}Parameters, headers, and fields
Operation ID: createIncidentAction
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Request body
Optional fields can be omitted. To clear a value, use the format in its description. Nested fields apply only within their parent object.
| Field | Description |
|---|---|
titlestring Required | The action title. Leading and trailing whitespace is removed before the maximum of 160 Unicode characters is enforced. Minimum length: 1 characters. · Maximum length: 160 characters. |
descriptionstring Optional | Optional action details. Leading and trailing whitespace is removed before the maximum of 2 Maximum length: 2000 characters. |
prioritystring Optional | The urgency assigned to an incident action. Allowed values: "critical""high""medium""low" |
assignee_user_idinteger | null Optional | The positive ID of an active incident manager or responder. A null value leaves the action unassigned. Minimum: 1. |
due_atstring (RFC 3339) | null Optional | The due time in RFC 3339 format |
Response 201
Returns the created open action.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
actionobject Always returned | The complete public record for an incident action. A blocker reason is required for blocked and waiting actions. Blocker fields are omitted when they are empty or unassigned. |
action.idinteger Always returned | The positive numeric ID of the action. Minimum: 1. |
action.incident_idinteger Always returned | The positive numeric ID of the incident that owns the action. Minimum: 1. |
action.titlestring Always returned | The action title after trimming. The maximum length is 160 Unicode characters. Minimum length: 1 characters. · Maximum length: 160 characters. |
action.descriptionstring Always returned | The action details after trimming. The maximum length is 2 Maximum length: 2000 characters. |
action.statusstring Always returned | The response-work state of an incident action. Possible values: "open""in_progress""blocked""waiting""completed""canceled" |
action.prioritystring Always returned | The urgency assigned to an incident action. Possible values: "critical""high""medium""low" |
action.categorystring Always returned | The response-work category assigned to an incident action. Possible values: "immediate""prevent_recurrence""investigate""monitor""unspecified" |
action.operational_caveatstring Sometimes returned | The diagnostic guidance caveat for the action. This is separate from blocker_reason and is omitted when empty. |
action.blocker_reasonstring Sometimes returned | The human dependency explanation. It is present and nonempty for blocked or waiting actions and omitted after leaving those states. Maximum length: 2000 characters. |
action.unblock_owner_user_idinteger | null Sometimes returned | The active incident manager or responder responsible for clearing the dependency. A null value means unassigned and this field may be omitted from responses. Minimum: 1. |
action.sourcestring Always returned | The source that created an incident action. Possible values: "custom""diagnostic""suggestion" |
action.source_suggestion_idinteger | null Sometimes returned | The source suggestion ID when the action was accepted from a diagnostic suggestion. This field is omitted for other sources. Minimum: 1. |
action.assignee_user_idinteger | null Sometimes returned | The active incident participant responsible for carrying out the action. A null value means unassigned and this field may be omitted from responses. Minimum: 1. |
action.due_atstring (RFC 3339) | null Sometimes returned | The action due time in RFC 3339 format. A null value means no due time and this field may be omitted from responses. |
action.completed_atstring (RFC 3339) | null Sometimes returned | The completion time in RFC 3339 format. It is null or omitted while the action is not completed. |
action.created_bystring Always returned | The identifier of the user who created the action. |
action.created_atstring (RFC 3339) Always returned | The action creation time. |
action.updated_atstring (RFC 3339) Always returned | The time of the latest action change. |
action.supporting_evidenceobject[] Always returned | Evidence references attached to the action. |
action.supporting_evidence[].sourcestring Always returned | The system or provider that supplied the evidence. |
action.supporting_evidence[].urlstring Always returned | The absolute URL of the evidence. |
action.supporting_evidence[].labelstring Sometimes returned | A short display name for the evidence. |
action.supporting_evidence[].summarystring Sometimes returned | A short summary of the evidence. |
action.supporting_evidence[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
action.supporting_evidence[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
action.supporting_evidence[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
action.supporting_evidence[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
Errors and recovery (7)
If the result is unknown, read the resource before another attempt. The error details explain the next step. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Update incident action
#/api/v1/incident-actions/{id}Updates the supplied action fields after validating the merged result. Omitted fields stay unchanged. Set status to blocked or waiting only with a nonempty trimmed blocker_reason of at most 2,000 Unicode characters; an unblock_owner_user_id, when supplied, must identify an active incident manager or responder. A null blocker_reason or unblock_owner_user_id clears that field when the resulting status is not blocked or waiting. Leaving a blocked or waiting status clears both blocker fields. The update is serialized with other action changes so a stale read cannot persist an invalid status and blocker combination.
- Required scope
- incidents:write
- Also required
- Active responder seatIncident is not archived
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request PATCH \
--url 'https://{company}.api.tellagen.com/api/v1/incident-actions/{id}' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"status": "waiting",
"blocker_reason": "Waiting for the maintenance window.",
"unblock_owner_user_id": null
}'Success: 200
Returns the updated action. Blocker fields are present only while the action is blocked or waiting; an unassigned unblock owner is represented by a null value or an omitted response field.
Success response JSON
{
"action": {
"id": 301,
"incident_id": 1,
"title": "Confirm provider recovery",
"description": "Confirm the provider has restored the payment path.",
"status": "waiting",
"priority": "high",
"category": "immediate",
"operational_caveat": "",
"blocker_reason": "Waiting for the maintenance window.",
"unblock_owner_user_id": null,
"source": "custom",
"assignee_user_id": 7,
"due_at": "2026-08-31T13:00:00Z",
"created_by": "[email protected]",
"completed_at": null,
"created_at": "2026-08-31T12:15:00Z",
"updated_at": "2026-08-31T12:25:00Z",
"supporting_evidence": []
}
}Parameters, headers, and fields
Operation ID: updateIncidentAction
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident-action ID returned by this API. Minimum: 1. |
Request body
Optional fields can be omitted. To clear a value, use the format in its description. Nested fields apply only within their parent object.
| Field | Description |
|---|---|
titlestring Optional | The replacement action title after trimming. The maximum length is 160 Unicode characters. Minimum length: 1 characters. · Maximum length: 160 characters. |
descriptionstring Optional | The replacement action details after trimming. The maximum length is 2 Maximum length: 2000 characters. |
statusstring Optional | The response-work state of an incident action. Allowed values: "open""in_progress""blocked""waiting""completed""canceled" |
prioritystring Optional | The urgency assigned to an incident action. Allowed values: "critical""high""medium""low" |
assignee_user_idinteger | null Optional | The positive ID of an active incident manager or responder Minimum: 1. |
due_atstring (RFC 3339) | null Optional | The replacement due time in RFC 3339 format |
blocker_reasonstring | null Optional | The trimmed dependency explanation Maximum length: 2000 characters. |
unblock_owner_user_idinteger | null Optional | The active incident manager or responder responsible for clearing the dependency, or null to clear the owner while the merged status remains blocked or waiting. Both blocker fields are cleared automatically when the merged status is another state. Minimum: 1. |
Response 200
Returns the updated action. Blocker fields are present only while the action is blocked or waiting; an unassigned unblock owner is represented by a null value or an omitted response field.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
actionobject Always returned | The complete public record for an incident action. A blocker reason is required for blocked and waiting actions. Blocker fields are omitted when they are empty or unassigned. |
action.idinteger Always returned | The positive numeric ID of the action. Minimum: 1. |
action.incident_idinteger Always returned | The positive numeric ID of the incident that owns the action. Minimum: 1. |
action.titlestring Always returned | The action title after trimming. The maximum length is 160 Unicode characters. Minimum length: 1 characters. · Maximum length: 160 characters. |
action.descriptionstring Always returned | The action details after trimming. The maximum length is 2 Maximum length: 2000 characters. |
action.statusstring Always returned | The response-work state of an incident action. Possible values: "open""in_progress""blocked""waiting""completed""canceled" |
action.prioritystring Always returned | The urgency assigned to an incident action. Possible values: "critical""high""medium""low" |
action.categorystring Always returned | The response-work category assigned to an incident action. Possible values: "immediate""prevent_recurrence""investigate""monitor""unspecified" |
action.operational_caveatstring Sometimes returned | The diagnostic guidance caveat for the action. This is separate from blocker_reason and is omitted when empty. |
action.blocker_reasonstring Sometimes returned | The human dependency explanation. It is present and nonempty for blocked or waiting actions and omitted after leaving those states. Maximum length: 2000 characters. |
action.unblock_owner_user_idinteger | null Sometimes returned | The active incident manager or responder responsible for clearing the dependency. A null value means unassigned and this field may be omitted from responses. Minimum: 1. |
action.sourcestring Always returned | The source that created an incident action. Possible values: "custom""diagnostic""suggestion" |
action.source_suggestion_idinteger | null Sometimes returned | The source suggestion ID when the action was accepted from a diagnostic suggestion. This field is omitted for other sources. Minimum: 1. |
action.assignee_user_idinteger | null Sometimes returned | The active incident participant responsible for carrying out the action. A null value means unassigned and this field may be omitted from responses. Minimum: 1. |
action.due_atstring (RFC 3339) | null Sometimes returned | The action due time in RFC 3339 format. A null value means no due time and this field may be omitted from responses. |
action.completed_atstring (RFC 3339) | null Sometimes returned | The completion time in RFC 3339 format. It is null or omitted while the action is not completed. |
action.created_bystring Always returned | The identifier of the user who created the action. |
action.created_atstring (RFC 3339) Always returned | The action creation time. |
action.updated_atstring (RFC 3339) Always returned | The time of the latest action change. |
action.supporting_evidenceobject[] Always returned | Evidence references attached to the action. |
action.supporting_evidence[].sourcestring Always returned | The system or provider that supplied the evidence. |
action.supporting_evidence[].urlstring Always returned | The absolute URL of the evidence. |
action.supporting_evidence[].labelstring Sometimes returned | A short display name for the evidence. |
action.supporting_evidence[].summarystring Sometimes returned | A short summary of the evidence. |
action.supporting_evidence[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
action.supporting_evidence[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
action.supporting_evidence[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
action.supporting_evidence[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
Errors and recovery (7)
If the result is unknown, read the resource before another attempt. The error details explain the next step. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Resolve incident
#/api/v1/incidents/{id}/resolveMarks the incident resolved and changes issue_type to postmortem. Tellagen saves the status, recovery time, and resolution note together. Existing postmortem drafts and versions stay unchanged.
The request body is optional. An outdated expected_revision returns 412. If the incident is already resolved, an empty request succeeds without another event. A repeated request with a note or recovery edit returns 412.
- Required scope
- incidents:write
- Also required
- Active responder seatIncident is not archived
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/resolve' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"resolution_note": "Rolled back the deployment and verified payment processing.",
"recovered_at": "2025-01-30T12:04:00Z",
"expected_revision": 6
}'Success: 200
Returns the complete incident and the committed resolution timeline event.
Success response JSON
{
"incident": {
"id": 1,
"revision": 7,
"company_id": 7,
"human_id": "INC-2025-001",
"title": "Payments API requests timing out",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "resolved",
"status_changed_at": "2025-01-30T12:05:00Z",
"last_event_at": "2025-01-30T12:10:00Z",
"last_event_summary": "Investigating root cause",
"issue_type": "postmortem",
"severity_mode": "manual",
"impact_summary": "Payment processing delayed for EU customers",
"customer_impact_status": "confirmed",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": "2025-01-30T13:30:00Z",
"duration_seconds": 900,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 5,
"investigation_summary": null,
"status_update_summary": null,
"postmortem_summary": null,
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {},
"archived_at": null,
"archived_by": null,
"incident_manager": "[email protected]",
"incident_responders": [
"[email protected]"
],
"has_assignees": true
}
}Parameters, headers, and fields
Operation ID: resolveIncident
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Request body
Optional fields can be omitted. To clear a value, use the format in its description. Nested fields apply only within their parent object.
| Field | Description |
|---|---|
resolution_notestring Optional | An optional note stored in the resolution timeline event. Leading and trailing whitespace is removed before enforcing the 1000 Unicode character limit. |
recovered_atstring Optional | The recovery timestamp in RFC 3339 format. Omit to preserve the current value. An empty string clears it. The timestamp must follow recorded impact, report, and response times and must not be in the future. |
expected_revisioninteger Optional | The incident revision displayed to the responder. A mismatch returns 412 without saving any changes. |
Response 200
Returns the complete incident and the committed resolution timeline event.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
incidentobject Always returned | The complete public record for an incident. |
incident.idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
incident.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
incident.company_idinteger Always returned | The ID of the workspace that owns the incident. Minimum: 1. |
incident.human_idstring Always returned | The permanent incident reference shown to users. |
incident.titlestring Always returned | The editable display title of the incident. |
incident.servicestring Always returned | The service slug associated with the incident. |
incident.regionsstring[] Always returned | The affected regions. |
incident.severitystring Always returned | The configured severity key. |
incident.slack_channel_idstring Always returned | The linked Slack channel ID. An empty string means that no channel is linked. |
incident.meet_urlstring Always returned | The incident meeting URL. An empty string means that no meeting is linked. |
incident.doc_urlstring Always returned | The incident document or source URL. An empty string means that no URL is stored. |
incident.statusstring Always returned | The configured workflow-status key. |
incident.status_changed_atstring (RFC 3339) | null Always returned | The time of the latest workflow-status change. A null value means that this time is unavailable. |
incident.last_event_atstring (RFC 3339) | null Always returned | The start time of the latest timeline event. A null value means that no event exists. |
incident.last_event_summarystring Always returned | A summary of the latest timeline event. |
incident.issue_typestring Always returned | The work type. Possible values: "ticket""incident""postmortem" |
incident.severity_modestring Always returned | The severity selection mode. Possible values: "auto""manual" |
incident.impact_summarystring Always returned | The current customer or operational impact summary. |
incident.customer_impact_statusstring Always returned | The customer-impact assessment. Possible values: "unknown""none""confirmed" |
incident.impact_started_atstring (RFC 3339) | null Always returned | The impact start time. A null value means that the time is unknown. |
incident.first_reported_atstring (RFC 3339) | null Always returned | The time of the first incident report. A null value means that the time is unknown. |
incident.first_responded_atstring (RFC 3339) | null Always returned | The time of the first response. A null value means that the time is unknown. |
incident.recovered_atstring (RFC 3339) | null Always returned | The service recovery time. A null value means that recovery is not recorded. |
incident.duration_secondsinteger Always returned | The calculated incident duration in whole seconds. Minimum: 0. |
incident.duration_anchorstring Always returned | The timestamp field from which the API calculates duration. |
incident.team_idinteger | null Always returned | The owning-team ID. A null value means that the incident has no owning team. |
incident.event_countinteger Always returned | The number of timeline events for the incident. Minimum: 0. |
incident.investigation_summaryobject | null Always returned | A summary of investigation runs. A null value means that no investigation data exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.run_countinteger Always returned | The total number of investigation runs. Minimum: 0. |
incident.investigation_summary.latest_runobject | null Always returned | The most recent investigation run. A null value means that no run exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.latest_run.statusstring Always returned | The current investigation-run status. |
incident.investigation_summary.latest_run.started_atstring (RFC 3339) Always returned | The investigation-run start time. |
incident.investigation_summary.latest_run.completed_atstring (RFC 3339) Sometimes returned | The investigation-run completion time. |
incident.status_update_summaryobject | null Always returned | The latest recorded status update and the next update time that it set. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load status-update data. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_recorded_atstring (RFC 3339) | null Always returned | The time of the latest status update. A null value means that no status update has been recorded. |
incident.status_update_summary.next_update_atstring (RFC 3339) | null Always returned | The next update time set by the latest status update. A null value means that no time was set. |
incident.status_update_summary.latest_excerptstring | null Always returned | One line from the latest status update: its current action, or its current impact when the action is blank, trimmed. Text longer than 120 characters keeps its first 117 characters and ends with an ellipsis (…). A null value means that no status update has been recorded. Only incident collection responses load this field; single-incident and mutation responses return status_update_summary as null. Maximum length: 120 characters. |
incident.status_update_summary.latest_deliveryobject | null Sometimes returned | How the latest status update was posted to Slack. A null value means that the update was recorded without sharing, that no status update has been recorded, or that the workspace does not have status update delivery turned on. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_delivery.sentinteger Always returned | Delivered. Minimum: 0. |
incident.status_update_summary.latest_delivery.pendinginteger Always returned | Queued or being posted. Minimum: 0. |
incident.status_update_summary.latest_delivery.failedinteger Always returned | Failed or stopped without reaching Slack; a person can retry these. Minimum: 0. |
incident.status_update_summary.latest_delivery.unconfirmedinteger Always returned | Slack did not confirm these posts and may have accepted them. Check the channel before retrying. Minimum: 0. |
incident.status_update_summary.latest_delivery.skippedinteger Always returned | Never attempted. Minimum: 0. |
incident.postmortem_summaryobject | null Always returned | The postmortem work recorded for the incident and whether the incident still needs it. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load postmortem data. Must match exactly one of 2 schema variants. |
incident.postmortem_summary.has_workboolean Always returned | Indicates whether a postmortem draft with content, a postmortem version, or a revision request exists. |
incident.postmortem_summary.has_working_draftboolean Always returned | Indicates whether the working postmortem draft has content or prepared evidence. |
incident.postmortem_summary.latest_version_idinteger | null Always returned | The ID of the latest postmortem version. A null value means that no version exists. |
incident.postmortem_summary.latest_version_kindstring | null Always returned | The kind of the latest postmortem version. submitted is a human submission. draft, llm, and legacy need human review before submission. A null value means that no version exists. Possible values: "submitted""draft""llm""legacy"null |
incident.postmortem_summary.work_statestring Always returned | Whether the incident still needs postmortem work. none means that no postmortem is due: the incident is not resolved or closed, or it is archived without a submitted postmortem. missing means that a resolved or closed incident has no postmortem version. in_review means that the latest version needs human submission. complete means that the latest version is a human submission. missing and in_review need work; the postmortem queue (scope=postmortem) shows those incidents even when the plan's history window hides other finished incidents. Only incident collection responses load this field; single-incident and mutation responses return postmortem_summary as null. Possible values: "none""missing""in_review""complete" |
incident.created_atstring (RFC 3339) Always returned | The incident creation time. |
incident.created_bystring Always returned | The identifier of the user who created the incident. |
incident.custom_fieldsobject Always returned | The incident values keyed by custom-field slug. |
incident.archived_atstring (RFC 3339) | null Always returned | The incident archive time. A null value means that the incident is active. |
incident.archived_byinteger | null Always returned | The user ID that archived the incident. A null value means that the incident is active. |
incident.incident_managerstring Always returned | The user identifier of the incident manager. An empty string means that no manager is assigned. |
incident.incident_respondersstring[] Always returned | The user identifiers of assigned responders. |
incident.has_assigneesboolean Always returned | Indicates whether the incident has a manager or at least one responder. |
timeline_eventobject Sometimes returned | The complete public record for a timeline event. |
timeline_event.idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
timeline_event.incident_idinteger Always returned | The positive numeric ID of the incident. |
timeline_event.started_atstring (RFC 3339) Always returned | The event start time. |
timeline_event.atstring (RFC 3339) Always returned | A deprecated response alias for started_at. Both fields contain the same value. |
timeline_event.ended_atstring (RFC 3339) | null Always returned | The event end time. A null value means that the event has no end time. |
timeline_event.is_ongoingboolean Always returned | Indicates whether the event is still in progress. |
timeline_event.group_idinteger | null Always returned | The timeline-group ID. A null value means that the event has no group. |
timeline_event.is_keyboolean Always returned | Indicates whether responders marked this as a key incident event. |
timeline_event.sourcestring Always returned | The system or actor that created the event. |
timeline_event.source_refstring Always returned | The source-specific reference for the event. |
timeline_event.typestring Always returned | The event type used for grouping and display. |
timeline_event.iconstring Always returned | The event icon. The maximum length is 8 Unicode characters. Maximum length: 8 characters. |
timeline_event.titlestring Always returned | The optional display title of the event. |
timeline_event.bodystring Always returned | The event description. |
timeline_event.collaboration_generationinteger Always returned | The version of collaborative content associated with the event. |
timeline_event.tagsstring[] Always returned | The normalized event tags. |
timeline_event.ai_contextstring Always returned | The saved AI context for a generated event. An empty string means that no context is stored. |
timeline_event.created_bystring Always returned | The identifier of the user or system that created the event. |
timeline_event.comment_countinteger Always returned | The number of comments on the event. |
timeline_event.attachmentsobject[] Always returned | The files attached to the event. |
timeline_event.attachments[].idinteger Always returned | The positive numeric ID of the attachment. |
timeline_event.attachments[].timeline_event_idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.attachments[].filenamestring Always returned | The original file name. |
timeline_event.attachments[].urlstring Always returned | A temporary download URL. An empty string means that no URL is currently available. |
timeline_event.attachments[].url_availableboolean Always returned | Indicates whether url contains an available download URL. |
timeline_event.attachments[].content_typestring Always returned | The media type of the attached file. |
timeline_event.attachments[].size_bytesinteger Always returned | The file size in bytes. |
timeline_event.attachments[].created_atstring (RFC 3339) Always returned | The attachment creation time. |
timeline_event.attachments[].created_bystring Always returned | The identifier of the user who attached the file. |
timeline_event.source_window_started_atstring (RFC 3339) | null Always returned | The start of the source-data window. A null value means that no window is recorded. |
timeline_event.source_window_ended_atstring (RFC 3339) | null Always returned | The end of the source-data window. A null value means that no window is recorded. |
timeline_event.evidence_linksobject[] Always returned | The evidence references associated with the event. |
timeline_event.evidence_links[].sourcestring Always returned | The system or provider that supplied the evidence. |
timeline_event.evidence_links[].urlstring Always returned | The absolute URL of the evidence. |
timeline_event.evidence_links[].labelstring Sometimes returned | A short display name for the evidence. |
timeline_event.evidence_links[].summarystring Sometimes returned | A short summary of the evidence. |
timeline_event.evidence_links[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
timeline_event.evidence_links[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
timeline_event.evidence_links[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
timeline_event.evidence_links[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
timeline_event.operational_updateobject | null Sometimes returned | The validated operational status payload. Null or absent for ordinary and legacy timeline events. Must match exactly one of 2 schema variants. |
timeline_event.operational_update.current_impactstring Always returned | The current customer or system impact in human-authored text. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.current_actionstring Always returned | The response work currently in progress. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.next_update_atstring (RFC 3339) | null Always returned | The planned next update time as RFC 3339 |
timeline_event.operational_update.audiencestring Always returned | The intended audience for the status update. Possible values: "responders""stakeholders""customers" |
timeline_event.operational_update.channelstring Always returned | Records the destination workflow. manual_external means the caller must deliver the copied message themselves. Possible values: "incident_record""manual_external" |
timeline_event.operational_update.destinationstring Always returned | The human-readable external destination for manual_external Maximum length: 200 characters. |
timeline_event.operational_update.communications_owner_user_idinteger | null Always returned | The active incident participant responsible for coordinating manual delivery |
timeline_event.operational_update.delivery_statestring Always returned | The server-derived delivery state. Tellagen does not claim that a manual external message was sent. Possible values: "recorded""pending_manual_delivery" |
Response headers
| Field | Description |
|---|---|
Tellagen-Resource-Versioninteger Always returned | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (7)
If the result is unknown, read the resource before another attempt. The error details explain the next step. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Close incident without resolution
#/api/v1/incidents/{id}/closeCloses an incident from a non-terminal workflow status without marking it resolved. The API records the reason and comment in a lifecycle event.
- Required scope
- incidents:write
- Also required
- Active responder seatIncident is not archived
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/close' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"reason": "duplicate",
"comment": "Tracked by the primary payment incident.",
"related_incident_id": 99
}'Success: 200
Returns the complete incident after closure.
Success response JSON
{
"incident": {
"id": 1,
"revision": 7,
"company_id": 7,
"human_id": "INC-2025-001",
"title": "Payments API requests timing out",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "closed",
"status_changed_at": "2025-01-30T12:05:00Z",
"last_event_at": "2025-01-30T12:10:00Z",
"last_event_summary": "Investigating root cause",
"issue_type": "incident",
"severity_mode": "manual",
"impact_summary": "Payment processing delayed for EU customers",
"customer_impact_status": "confirmed",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": null,
"duration_seconds": 900,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 5,
"investigation_summary": null,
"status_update_summary": null,
"postmortem_summary": null,
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {},
"archived_at": null,
"archived_by": null,
"incident_manager": "[email protected]",
"incident_responders": [
"[email protected]"
],
"has_assignees": true
}
}Parameters, headers, and fields
Operation ID: closeIncident
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Request body
Optional fields can be omitted. To clear a value, use the format in its description. Nested fields apply only within their parent object.
| Field | Description |
|---|---|
reasonstring Required | The closure reason. Allowed values: "duplicate""false_alarm""test_or_accidental""not_an_incident""other" |
commentstring Required | The explanation for the closure. The maximum length is 1000 characters. Minimum length: 1 characters. · Maximum length: 1000 characters. |
related_incident_idinteger Conditional | The positive ID of the primary incident. If reason is duplicate, this field is required. Required when Required when reason is "duplicate". Minimum: 1. |
Response 200
Returns the complete incident after closure.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
incidentobject Always returned | The complete public record for an incident. |
incident.idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
incident.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
incident.company_idinteger Always returned | The ID of the workspace that owns the incident. Minimum: 1. |
incident.human_idstring Always returned | The permanent incident reference shown to users. |
incident.titlestring Always returned | The editable display title of the incident. |
incident.servicestring Always returned | The service slug associated with the incident. |
incident.regionsstring[] Always returned | The affected regions. |
incident.severitystring Always returned | The configured severity key. |
incident.slack_channel_idstring Always returned | The linked Slack channel ID. An empty string means that no channel is linked. |
incident.meet_urlstring Always returned | The incident meeting URL. An empty string means that no meeting is linked. |
incident.doc_urlstring Always returned | The incident document or source URL. An empty string means that no URL is stored. |
incident.statusstring Always returned | The configured workflow-status key. |
incident.status_changed_atstring (RFC 3339) | null Always returned | The time of the latest workflow-status change. A null value means that this time is unavailable. |
incident.last_event_atstring (RFC 3339) | null Always returned | The start time of the latest timeline event. A null value means that no event exists. |
incident.last_event_summarystring Always returned | A summary of the latest timeline event. |
incident.issue_typestring Always returned | The work type. Possible values: "ticket""incident""postmortem" |
incident.severity_modestring Always returned | The severity selection mode. Possible values: "auto""manual" |
incident.impact_summarystring Always returned | The current customer or operational impact summary. |
incident.customer_impact_statusstring Always returned | The customer-impact assessment. Possible values: "unknown""none""confirmed" |
incident.impact_started_atstring (RFC 3339) | null Always returned | The impact start time. A null value means that the time is unknown. |
incident.first_reported_atstring (RFC 3339) | null Always returned | The time of the first incident report. A null value means that the time is unknown. |
incident.first_responded_atstring (RFC 3339) | null Always returned | The time of the first response. A null value means that the time is unknown. |
incident.recovered_atstring (RFC 3339) | null Always returned | The service recovery time. A null value means that recovery is not recorded. |
incident.duration_secondsinteger Always returned | The calculated incident duration in whole seconds. Minimum: 0. |
incident.duration_anchorstring Always returned | The timestamp field from which the API calculates duration. |
incident.team_idinteger | null Always returned | The owning-team ID. A null value means that the incident has no owning team. |
incident.event_countinteger Always returned | The number of timeline events for the incident. Minimum: 0. |
incident.investigation_summaryobject | null Always returned | A summary of investigation runs. A null value means that no investigation data exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.run_countinteger Always returned | The total number of investigation runs. Minimum: 0. |
incident.investigation_summary.latest_runobject | null Always returned | The most recent investigation run. A null value means that no run exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.latest_run.statusstring Always returned | The current investigation-run status. |
incident.investigation_summary.latest_run.started_atstring (RFC 3339) Always returned | The investigation-run start time. |
incident.investigation_summary.latest_run.completed_atstring (RFC 3339) Sometimes returned | The investigation-run completion time. |
incident.status_update_summaryobject | null Always returned | The latest recorded status update and the next update time that it set. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load status-update data. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_recorded_atstring (RFC 3339) | null Always returned | The time of the latest status update. A null value means that no status update has been recorded. |
incident.status_update_summary.next_update_atstring (RFC 3339) | null Always returned | The next update time set by the latest status update. A null value means that no time was set. |
incident.status_update_summary.latest_excerptstring | null Always returned | One line from the latest status update: its current action, or its current impact when the action is blank, trimmed. Text longer than 120 characters keeps its first 117 characters and ends with an ellipsis (…). A null value means that no status update has been recorded. Only incident collection responses load this field; single-incident and mutation responses return status_update_summary as null. Maximum length: 120 characters. |
incident.status_update_summary.latest_deliveryobject | null Sometimes returned | How the latest status update was posted to Slack. A null value means that the update was recorded without sharing, that no status update has been recorded, or that the workspace does not have status update delivery turned on. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_delivery.sentinteger Always returned | Delivered. Minimum: 0. |
incident.status_update_summary.latest_delivery.pendinginteger Always returned | Queued or being posted. Minimum: 0. |
incident.status_update_summary.latest_delivery.failedinteger Always returned | Failed or stopped without reaching Slack; a person can retry these. Minimum: 0. |
incident.status_update_summary.latest_delivery.unconfirmedinteger Always returned | Slack did not confirm these posts and may have accepted them. Check the channel before retrying. Minimum: 0. |
incident.status_update_summary.latest_delivery.skippedinteger Always returned | Never attempted. Minimum: 0. |
incident.postmortem_summaryobject | null Always returned | The postmortem work recorded for the incident and whether the incident still needs it. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load postmortem data. Must match exactly one of 2 schema variants. |
incident.postmortem_summary.has_workboolean Always returned | Indicates whether a postmortem draft with content, a postmortem version, or a revision request exists. |
incident.postmortem_summary.has_working_draftboolean Always returned | Indicates whether the working postmortem draft has content or prepared evidence. |
incident.postmortem_summary.latest_version_idinteger | null Always returned | The ID of the latest postmortem version. A null value means that no version exists. |
incident.postmortem_summary.latest_version_kindstring | null Always returned | The kind of the latest postmortem version. submitted is a human submission. draft, llm, and legacy need human review before submission. A null value means that no version exists. Possible values: "submitted""draft""llm""legacy"null |
incident.postmortem_summary.work_statestring Always returned | Whether the incident still needs postmortem work. none means that no postmortem is due: the incident is not resolved or closed, or it is archived without a submitted postmortem. missing means that a resolved or closed incident has no postmortem version. in_review means that the latest version needs human submission. complete means that the latest version is a human submission. missing and in_review need work; the postmortem queue (scope=postmortem) shows those incidents even when the plan's history window hides other finished incidents. Only incident collection responses load this field; single-incident and mutation responses return postmortem_summary as null. Possible values: "none""missing""in_review""complete" |
incident.created_atstring (RFC 3339) Always returned | The incident creation time. |
incident.created_bystring Always returned | The identifier of the user who created the incident. |
incident.custom_fieldsobject Always returned | The incident values keyed by custom-field slug. |
incident.archived_atstring (RFC 3339) | null Always returned | The incident archive time. A null value means that the incident is active. |
incident.archived_byinteger | null Always returned | The user ID that archived the incident. A null value means that the incident is active. |
incident.incident_managerstring Always returned | The user identifier of the incident manager. An empty string means that no manager is assigned. |
incident.incident_respondersstring[] Always returned | The user identifiers of assigned responders. |
incident.has_assigneesboolean Always returned | Indicates whether the incident has a manager or at least one responder. |
timeline_eventobject Sometimes returned | The complete public record for a timeline event. |
timeline_event.idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
timeline_event.incident_idinteger Always returned | The positive numeric ID of the incident. |
timeline_event.started_atstring (RFC 3339) Always returned | The event start time. |
timeline_event.atstring (RFC 3339) Always returned | A deprecated response alias for started_at. Both fields contain the same value. |
timeline_event.ended_atstring (RFC 3339) | null Always returned | The event end time. A null value means that the event has no end time. |
timeline_event.is_ongoingboolean Always returned | Indicates whether the event is still in progress. |
timeline_event.group_idinteger | null Always returned | The timeline-group ID. A null value means that the event has no group. |
timeline_event.is_keyboolean Always returned | Indicates whether responders marked this as a key incident event. |
timeline_event.sourcestring Always returned | The system or actor that created the event. |
timeline_event.source_refstring Always returned | The source-specific reference for the event. |
timeline_event.typestring Always returned | The event type used for grouping and display. |
timeline_event.iconstring Always returned | The event icon. The maximum length is 8 Unicode characters. Maximum length: 8 characters. |
timeline_event.titlestring Always returned | The optional display title of the event. |
timeline_event.bodystring Always returned | The event description. |
timeline_event.collaboration_generationinteger Always returned | The version of collaborative content associated with the event. |
timeline_event.tagsstring[] Always returned | The normalized event tags. |
timeline_event.ai_contextstring Always returned | The saved AI context for a generated event. An empty string means that no context is stored. |
timeline_event.created_bystring Always returned | The identifier of the user or system that created the event. |
timeline_event.comment_countinteger Always returned | The number of comments on the event. |
timeline_event.attachmentsobject[] Always returned | The files attached to the event. |
timeline_event.attachments[].idinteger Always returned | The positive numeric ID of the attachment. |
timeline_event.attachments[].timeline_event_idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.attachments[].filenamestring Always returned | The original file name. |
timeline_event.attachments[].urlstring Always returned | A temporary download URL. An empty string means that no URL is currently available. |
timeline_event.attachments[].url_availableboolean Always returned | Indicates whether url contains an available download URL. |
timeline_event.attachments[].content_typestring Always returned | The media type of the attached file. |
timeline_event.attachments[].size_bytesinteger Always returned | The file size in bytes. |
timeline_event.attachments[].created_atstring (RFC 3339) Always returned | The attachment creation time. |
timeline_event.attachments[].created_bystring Always returned | The identifier of the user who attached the file. |
timeline_event.source_window_started_atstring (RFC 3339) | null Always returned | The start of the source-data window. A null value means that no window is recorded. |
timeline_event.source_window_ended_atstring (RFC 3339) | null Always returned | The end of the source-data window. A null value means that no window is recorded. |
timeline_event.evidence_linksobject[] Always returned | The evidence references associated with the event. |
timeline_event.evidence_links[].sourcestring Always returned | The system or provider that supplied the evidence. |
timeline_event.evidence_links[].urlstring Always returned | The absolute URL of the evidence. |
timeline_event.evidence_links[].labelstring Sometimes returned | A short display name for the evidence. |
timeline_event.evidence_links[].summarystring Sometimes returned | A short summary of the evidence. |
timeline_event.evidence_links[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
timeline_event.evidence_links[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
timeline_event.evidence_links[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
timeline_event.evidence_links[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
timeline_event.operational_updateobject | null Sometimes returned | The validated operational status payload. Null or absent for ordinary and legacy timeline events. Must match exactly one of 2 schema variants. |
timeline_event.operational_update.current_impactstring Always returned | The current customer or system impact in human-authored text. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.current_actionstring Always returned | The response work currently in progress. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.next_update_atstring (RFC 3339) | null Always returned | The planned next update time as RFC 3339 |
timeline_event.operational_update.audiencestring Always returned | The intended audience for the status update. Possible values: "responders""stakeholders""customers" |
timeline_event.operational_update.channelstring Always returned | Records the destination workflow. manual_external means the caller must deliver the copied message themselves. Possible values: "incident_record""manual_external" |
timeline_event.operational_update.destinationstring Always returned | The human-readable external destination for manual_external Maximum length: 200 characters. |
timeline_event.operational_update.communications_owner_user_idinteger | null Always returned | The active incident participant responsible for coordinating manual delivery |
timeline_event.operational_update.delivery_statestring Always returned | The server-derived delivery state. Tellagen does not claim that a manual external message was sent. Possible values: "recorded""pending_manual_delivery" |
Response headers
| Field | Description |
|---|---|
Tellagen-Resource-Versioninteger Always returned | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (7)
If the result is unknown, read the resource before another attempt. The error details explain the next step. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Reopen incident
#/api/v1/incidents/{id}/reopenChanges a resolved or closed incident to active. A closed incident requires a comment. A comment is optional for a resolved incident. If issue_type is postmortem, the API changes it to incident.
- Required scope
- incidents:write
- Also required
- Active responder seatIncident is not archived
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/reopen' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"comment": "Customer-visible errors returned."
}'Success: 200
Returns the complete incident after it becomes active.
Success response JSON
{
"incident": {
"id": 1,
"revision": 7,
"company_id": 7,
"human_id": "INC-2025-001",
"title": "Payments API requests timing out",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "active",
"status_changed_at": "2025-01-30T12:05:00Z",
"last_event_at": "2025-01-30T12:10:00Z",
"last_event_summary": "Investigating root cause",
"issue_type": "incident",
"severity_mode": "manual",
"impact_summary": "Payment processing delayed for EU customers",
"customer_impact_status": "confirmed",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": null,
"duration_seconds": 900,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 5,
"investigation_summary": null,
"status_update_summary": null,
"postmortem_summary": null,
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {},
"archived_at": null,
"archived_by": null,
"incident_manager": "[email protected]",
"incident_responders": [
"[email protected]"
],
"has_assignees": true
}
}Parameters, headers, and fields
Operation ID: reopenIncident
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Request body
Optional fields can be omitted. To clear a value, use the format in its description. Nested fields apply only within their parent object.
| Field | Description |
|---|---|
commentstring Conditional | The reason for reopening. A closed incident requires this field. The maximum length is 500 characters. Required when Required when reopening a closed incident. Maximum length: 500 characters. |
Response 200
Returns the complete incident after it becomes active.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
incidentobject Always returned | The complete public record for an incident. |
incident.idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
incident.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
incident.company_idinteger Always returned | The ID of the workspace that owns the incident. Minimum: 1. |
incident.human_idstring Always returned | The permanent incident reference shown to users. |
incident.titlestring Always returned | The editable display title of the incident. |
incident.servicestring Always returned | The service slug associated with the incident. |
incident.regionsstring[] Always returned | The affected regions. |
incident.severitystring Always returned | The configured severity key. |
incident.slack_channel_idstring Always returned | The linked Slack channel ID. An empty string means that no channel is linked. |
incident.meet_urlstring Always returned | The incident meeting URL. An empty string means that no meeting is linked. |
incident.doc_urlstring Always returned | The incident document or source URL. An empty string means that no URL is stored. |
incident.statusstring Always returned | The configured workflow-status key. |
incident.status_changed_atstring (RFC 3339) | null Always returned | The time of the latest workflow-status change. A null value means that this time is unavailable. |
incident.last_event_atstring (RFC 3339) | null Always returned | The start time of the latest timeline event. A null value means that no event exists. |
incident.last_event_summarystring Always returned | A summary of the latest timeline event. |
incident.issue_typestring Always returned | The work type. Possible values: "ticket""incident""postmortem" |
incident.severity_modestring Always returned | The severity selection mode. Possible values: "auto""manual" |
incident.impact_summarystring Always returned | The current customer or operational impact summary. |
incident.customer_impact_statusstring Always returned | The customer-impact assessment. Possible values: "unknown""none""confirmed" |
incident.impact_started_atstring (RFC 3339) | null Always returned | The impact start time. A null value means that the time is unknown. |
incident.first_reported_atstring (RFC 3339) | null Always returned | The time of the first incident report. A null value means that the time is unknown. |
incident.first_responded_atstring (RFC 3339) | null Always returned | The time of the first response. A null value means that the time is unknown. |
incident.recovered_atstring (RFC 3339) | null Always returned | The service recovery time. A null value means that recovery is not recorded. |
incident.duration_secondsinteger Always returned | The calculated incident duration in whole seconds. Minimum: 0. |
incident.duration_anchorstring Always returned | The timestamp field from which the API calculates duration. |
incident.team_idinteger | null Always returned | The owning-team ID. A null value means that the incident has no owning team. |
incident.event_countinteger Always returned | The number of timeline events for the incident. Minimum: 0. |
incident.investigation_summaryobject | null Always returned | A summary of investigation runs. A null value means that no investigation data exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.run_countinteger Always returned | The total number of investigation runs. Minimum: 0. |
incident.investigation_summary.latest_runobject | null Always returned | The most recent investigation run. A null value means that no run exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.latest_run.statusstring Always returned | The current investigation-run status. |
incident.investigation_summary.latest_run.started_atstring (RFC 3339) Always returned | The investigation-run start time. |
incident.investigation_summary.latest_run.completed_atstring (RFC 3339) Sometimes returned | The investigation-run completion time. |
incident.status_update_summaryobject | null Always returned | The latest recorded status update and the next update time that it set. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load status-update data. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_recorded_atstring (RFC 3339) | null Always returned | The time of the latest status update. A null value means that no status update has been recorded. |
incident.status_update_summary.next_update_atstring (RFC 3339) | null Always returned | The next update time set by the latest status update. A null value means that no time was set. |
incident.status_update_summary.latest_excerptstring | null Always returned | One line from the latest status update: its current action, or its current impact when the action is blank, trimmed. Text longer than 120 characters keeps its first 117 characters and ends with an ellipsis (…). A null value means that no status update has been recorded. Only incident collection responses load this field; single-incident and mutation responses return status_update_summary as null. Maximum length: 120 characters. |
incident.status_update_summary.latest_deliveryobject | null Sometimes returned | How the latest status update was posted to Slack. A null value means that the update was recorded without sharing, that no status update has been recorded, or that the workspace does not have status update delivery turned on. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_delivery.sentinteger Always returned | Delivered. Minimum: 0. |
incident.status_update_summary.latest_delivery.pendinginteger Always returned | Queued or being posted. Minimum: 0. |
incident.status_update_summary.latest_delivery.failedinteger Always returned | Failed or stopped without reaching Slack; a person can retry these. Minimum: 0. |
incident.status_update_summary.latest_delivery.unconfirmedinteger Always returned | Slack did not confirm these posts and may have accepted them. Check the channel before retrying. Minimum: 0. |
incident.status_update_summary.latest_delivery.skippedinteger Always returned | Never attempted. Minimum: 0. |
incident.postmortem_summaryobject | null Always returned | The postmortem work recorded for the incident and whether the incident still needs it. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load postmortem data. Must match exactly one of 2 schema variants. |
incident.postmortem_summary.has_workboolean Always returned | Indicates whether a postmortem draft with content, a postmortem version, or a revision request exists. |
incident.postmortem_summary.has_working_draftboolean Always returned | Indicates whether the working postmortem draft has content or prepared evidence. |
incident.postmortem_summary.latest_version_idinteger | null Always returned | The ID of the latest postmortem version. A null value means that no version exists. |
incident.postmortem_summary.latest_version_kindstring | null Always returned | The kind of the latest postmortem version. submitted is a human submission. draft, llm, and legacy need human review before submission. A null value means that no version exists. Possible values: "submitted""draft""llm""legacy"null |
incident.postmortem_summary.work_statestring Always returned | Whether the incident still needs postmortem work. none means that no postmortem is due: the incident is not resolved or closed, or it is archived without a submitted postmortem. missing means that a resolved or closed incident has no postmortem version. in_review means that the latest version needs human submission. complete means that the latest version is a human submission. missing and in_review need work; the postmortem queue (scope=postmortem) shows those incidents even when the plan's history window hides other finished incidents. Only incident collection responses load this field; single-incident and mutation responses return postmortem_summary as null. Possible values: "none""missing""in_review""complete" |
incident.created_atstring (RFC 3339) Always returned | The incident creation time. |
incident.created_bystring Always returned | The identifier of the user who created the incident. |
incident.custom_fieldsobject Always returned | The incident values keyed by custom-field slug. |
incident.archived_atstring (RFC 3339) | null Always returned | The incident archive time. A null value means that the incident is active. |
incident.archived_byinteger | null Always returned | The user ID that archived the incident. A null value means that the incident is active. |
incident.incident_managerstring Always returned | The user identifier of the incident manager. An empty string means that no manager is assigned. |
incident.incident_respondersstring[] Always returned | The user identifiers of assigned responders. |
incident.has_assigneesboolean Always returned | Indicates whether the incident has a manager or at least one responder. |
timeline_eventobject Sometimes returned | The complete public record for a timeline event. |
timeline_event.idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
timeline_event.incident_idinteger Always returned | The positive numeric ID of the incident. |
timeline_event.started_atstring (RFC 3339) Always returned | The event start time. |
timeline_event.atstring (RFC 3339) Always returned | A deprecated response alias for started_at. Both fields contain the same value. |
timeline_event.ended_atstring (RFC 3339) | null Always returned | The event end time. A null value means that the event has no end time. |
timeline_event.is_ongoingboolean Always returned | Indicates whether the event is still in progress. |
timeline_event.group_idinteger | null Always returned | The timeline-group ID. A null value means that the event has no group. |
timeline_event.is_keyboolean Always returned | Indicates whether responders marked this as a key incident event. |
timeline_event.sourcestring Always returned | The system or actor that created the event. |
timeline_event.source_refstring Always returned | The source-specific reference for the event. |
timeline_event.typestring Always returned | The event type used for grouping and display. |
timeline_event.iconstring Always returned | The event icon. The maximum length is 8 Unicode characters. Maximum length: 8 characters. |
timeline_event.titlestring Always returned | The optional display title of the event. |
timeline_event.bodystring Always returned | The event description. |
timeline_event.collaboration_generationinteger Always returned | The version of collaborative content associated with the event. |
timeline_event.tagsstring[] Always returned | The normalized event tags. |
timeline_event.ai_contextstring Always returned | The saved AI context for a generated event. An empty string means that no context is stored. |
timeline_event.created_bystring Always returned | The identifier of the user or system that created the event. |
timeline_event.comment_countinteger Always returned | The number of comments on the event. |
timeline_event.attachmentsobject[] Always returned | The files attached to the event. |
timeline_event.attachments[].idinteger Always returned | The positive numeric ID of the attachment. |
timeline_event.attachments[].timeline_event_idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.attachments[].filenamestring Always returned | The original file name. |
timeline_event.attachments[].urlstring Always returned | A temporary download URL. An empty string means that no URL is currently available. |
timeline_event.attachments[].url_availableboolean Always returned | Indicates whether url contains an available download URL. |
timeline_event.attachments[].content_typestring Always returned | The media type of the attached file. |
timeline_event.attachments[].size_bytesinteger Always returned | The file size in bytes. |
timeline_event.attachments[].created_atstring (RFC 3339) Always returned | The attachment creation time. |
timeline_event.attachments[].created_bystring Always returned | The identifier of the user who attached the file. |
timeline_event.source_window_started_atstring (RFC 3339) | null Always returned | The start of the source-data window. A null value means that no window is recorded. |
timeline_event.source_window_ended_atstring (RFC 3339) | null Always returned | The end of the source-data window. A null value means that no window is recorded. |
timeline_event.evidence_linksobject[] Always returned | The evidence references associated with the event. |
timeline_event.evidence_links[].sourcestring Always returned | The system or provider that supplied the evidence. |
timeline_event.evidence_links[].urlstring Always returned | The absolute URL of the evidence. |
timeline_event.evidence_links[].labelstring Sometimes returned | A short display name for the evidence. |
timeline_event.evidence_links[].summarystring Sometimes returned | A short summary of the evidence. |
timeline_event.evidence_links[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
timeline_event.evidence_links[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
timeline_event.evidence_links[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
timeline_event.evidence_links[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
timeline_event.operational_updateobject | null Sometimes returned | The validated operational status payload. Null or absent for ordinary and legacy timeline events. Must match exactly one of 2 schema variants. |
timeline_event.operational_update.current_impactstring Always returned | The current customer or system impact in human-authored text. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.current_actionstring Always returned | The response work currently in progress. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.next_update_atstring (RFC 3339) | null Always returned | The planned next update time as RFC 3339 |
timeline_event.operational_update.audiencestring Always returned | The intended audience for the status update. Possible values: "responders""stakeholders""customers" |
timeline_event.operational_update.channelstring Always returned | Records the destination workflow. manual_external means the caller must deliver the copied message themselves. Possible values: "incident_record""manual_external" |
timeline_event.operational_update.destinationstring Always returned | The human-readable external destination for manual_external Maximum length: 200 characters. |
timeline_event.operational_update.communications_owner_user_idinteger | null Always returned | The active incident participant responsible for coordinating manual delivery |
timeline_event.operational_update.delivery_statestring Always returned | The server-derived delivery state. Tellagen does not claim that a manual external message was sent. Possible values: "recorded""pending_manual_delivery" |
Response headers
| Field | Description |
|---|---|
Tellagen-Resource-Versioninteger Always returned | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (7)
If the result is unknown, read the resource before another attempt. The error details explain the next step. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Get incident integration setup
#/api/v1/incidents/{id}/provisioningShows progress for integration tasks, such as Slack channel creation. Pending tasks resume after a server restart. Failed tasks retry automatically. The completed state means that all saved tasks finished.
- Required scope
- incidents:read
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request GET \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/provisioning' \
--header 'Authorization: Bearer <token>'Success: 200
Current setup state. Retryable indicates whether failed steps can be retried manually.
Success response JSON
{
"status": "pending",
"retryable": false
}Parameters, headers, and fields
Operation ID: getIncidentProvisioning
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Response 200
Current setup state. Retryable indicates whether failed steps can be retried manually.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
statusstring Always returned | Aggregate state of persisted incident integration steps. Possible values: "pending""failed""completed" |
retryableboolean Always returned | True when a failed step can be made eligible for immediate retry. |
Errors and recovery (7)
You can repeat this request. If the API returns 429, wait for Retry-After. Set a maximum number of attempts. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Retry incident integration setup
#/api/v1/incidents/{id}/provisioning/retryMakes failed setup steps eligible to run again. Completed steps and incident history are not repeated. The caller must have an active responder seat. Demo workspaces cannot retry external setup.
- Required scope
- incidents:write
- Also required
- Active responder seat
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/provisioning/retry' \
--header 'Authorization: Bearer <token>'Success: 200
Current setup state. Retryable indicates whether failed steps can be retried manually.
Success response JSON
{
"status": "pending",
"retryable": false
}Parameters, headers, and fields
Operation ID: retryIncidentProvisioning
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Response 200
Current setup state. Retryable indicates whether failed steps can be retried manually.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
statusstring Always returned | Aggregate state of persisted incident integration steps. Possible values: "pending""failed""completed" |
retryableboolean Always returned | True when a failed step can be made eligible for immediate retry. |
Errors and recovery (7)
You can repeat this request. If the API returns 429, wait for Retry-After. Set a maximum number of attempts. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Archive incident
#/api/v1/incidents/{id}/archiveRemoves the incident from default lists without changing its workflow status. The incident and its related records remain available as read-only data.
A repeated request returns 204 without changes to archive details, revision, changelog, or audit records. The API key owner needs an active responder seat.
- Required scope
- incidents:write
- Also required
- Active responder seat
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/archive' \
--header 'Authorization: Bearer <token>'Success: 204
No response body. Do not try to parse this response as JSON.
Parameters, headers, and fields
Operation ID: archiveIncident
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Returns 204 with no body.
Errors and recovery (7)
You can repeat this request. If the API returns 429, wait for Retry-After. Set a maximum number of attempts. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Restore incident
#/api/v1/incidents/{id}/restoreReturns an archived incident to default lists without changing its workflow status. If the incident has a team_id, that team must be active.
A repeated request returns the incident without changes to its revision, changelog, or audit records. The API key owner needs an active responder seat.
- Required scope
- incidents:write
- Also required
- Active responder seat
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/restore' \
--header 'Authorization: Bearer <token>'Success: 200
Returns the complete active incident. If its saved team is not active, the API returns 409 invalid_relationship_state.
Success response JSON
{
"incident": {
"id": 1,
"revision": 7,
"company_id": 7,
"human_id": "INC-2025-001",
"title": "Payments API requests timing out",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "active",
"status_changed_at": "2025-01-30T12:05:00Z",
"last_event_at": "2025-01-30T12:10:00Z",
"last_event_summary": "Investigating root cause",
"issue_type": "incident",
"severity_mode": "manual",
"impact_summary": "Payment processing delayed for EU customers",
"customer_impact_status": "confirmed",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": null,
"duration_seconds": 900,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 5,
"investigation_summary": null,
"status_update_summary": null,
"postmortem_summary": null,
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {},
"archived_at": null,
"archived_by": null,
"incident_manager": "[email protected]",
"incident_responders": [
"[email protected]"
],
"has_assignees": true
}
}Parameters, headers, and fields
Operation ID: restoreIncident
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Response 200
Returns the complete active incident. If its saved team is not active, the API returns 409 invalid_relationship_state.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
incidentobject Always returned | The complete public record for an incident. |
incident.idinteger Always returned | The positive numeric ID of the incident. Minimum: 1. |
incident.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
incident.company_idinteger Always returned | The ID of the workspace that owns the incident. Minimum: 1. |
incident.human_idstring Always returned | The permanent incident reference shown to users. |
incident.titlestring Always returned | The editable display title of the incident. |
incident.servicestring Always returned | The service slug associated with the incident. |
incident.regionsstring[] Always returned | The affected regions. |
incident.severitystring Always returned | The configured severity key. |
incident.slack_channel_idstring Always returned | The linked Slack channel ID. An empty string means that no channel is linked. |
incident.meet_urlstring Always returned | The incident meeting URL. An empty string means that no meeting is linked. |
incident.doc_urlstring Always returned | The incident document or source URL. An empty string means that no URL is stored. |
incident.statusstring Always returned | The configured workflow-status key. |
incident.status_changed_atstring (RFC 3339) | null Always returned | The time of the latest workflow-status change. A null value means that this time is unavailable. |
incident.last_event_atstring (RFC 3339) | null Always returned | The start time of the latest timeline event. A null value means that no event exists. |
incident.last_event_summarystring Always returned | A summary of the latest timeline event. |
incident.issue_typestring Always returned | The work type. Possible values: "ticket""incident""postmortem" |
incident.severity_modestring Always returned | The severity selection mode. Possible values: "auto""manual" |
incident.impact_summarystring Always returned | The current customer or operational impact summary. |
incident.customer_impact_statusstring Always returned | The customer-impact assessment. Possible values: "unknown""none""confirmed" |
incident.impact_started_atstring (RFC 3339) | null Always returned | The impact start time. A null value means that the time is unknown. |
incident.first_reported_atstring (RFC 3339) | null Always returned | The time of the first incident report. A null value means that the time is unknown. |
incident.first_responded_atstring (RFC 3339) | null Always returned | The time of the first response. A null value means that the time is unknown. |
incident.recovered_atstring (RFC 3339) | null Always returned | The service recovery time. A null value means that recovery is not recorded. |
incident.duration_secondsinteger Always returned | The calculated incident duration in whole seconds. Minimum: 0. |
incident.duration_anchorstring Always returned | The timestamp field from which the API calculates duration. |
incident.team_idinteger | null Always returned | The owning-team ID. A null value means that the incident has no owning team. |
incident.event_countinteger Always returned | The number of timeline events for the incident. Minimum: 0. |
incident.investigation_summaryobject | null Always returned | A summary of investigation runs. A null value means that no investigation data exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.run_countinteger Always returned | The total number of investigation runs. Minimum: 0. |
incident.investigation_summary.latest_runobject | null Always returned | The most recent investigation run. A null value means that no run exists. Must match exactly one of 2 schema variants. |
incident.investigation_summary.latest_run.statusstring Always returned | The current investigation-run status. |
incident.investigation_summary.latest_run.started_atstring (RFC 3339) Always returned | The investigation-run start time. |
incident.investigation_summary.latest_run.completed_atstring (RFC 3339) Sometimes returned | The investigation-run completion time. |
incident.status_update_summaryobject | null Always returned | The latest recorded status update and the next update time that it set. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load status-update data. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_recorded_atstring (RFC 3339) | null Always returned | The time of the latest status update. A null value means that no status update has been recorded. |
incident.status_update_summary.next_update_atstring (RFC 3339) | null Always returned | The next update time set by the latest status update. A null value means that no time was set. |
incident.status_update_summary.latest_excerptstring | null Always returned | One line from the latest status update: its current action, or its current impact when the action is blank, trimmed. Text longer than 120 characters keeps its first 117 characters and ends with an ellipsis (…). A null value means that no status update has been recorded. Only incident collection responses load this field; single-incident and mutation responses return status_update_summary as null. Maximum length: 120 characters. |
incident.status_update_summary.latest_deliveryobject | null Sometimes returned | How the latest status update was posted to Slack. A null value means that the update was recorded without sharing, that no status update has been recorded, or that the workspace does not have status update delivery turned on. Must match exactly one of 2 schema variants. |
incident.status_update_summary.latest_delivery.sentinteger Always returned | Delivered. Minimum: 0. |
incident.status_update_summary.latest_delivery.pendinginteger Always returned | Queued or being posted. Minimum: 0. |
incident.status_update_summary.latest_delivery.failedinteger Always returned | Failed or stopped without reaching Slack; a person can retry these. Minimum: 0. |
incident.status_update_summary.latest_delivery.unconfirmedinteger Always returned | Slack did not confirm these posts and may have accepted them. Check the channel before retrying. Minimum: 0. |
incident.status_update_summary.latest_delivery.skippedinteger Always returned | Never attempted. Minimum: 0. |
incident.postmortem_summaryobject | null Always returned | The postmortem work recorded for the incident and whether the incident still needs it. Incident collection responses always include this object. Single-incident and mutation responses return null because they do not load postmortem data. Must match exactly one of 2 schema variants. |
incident.postmortem_summary.has_workboolean Always returned | Indicates whether a postmortem draft with content, a postmortem version, or a revision request exists. |
incident.postmortem_summary.has_working_draftboolean Always returned | Indicates whether the working postmortem draft has content or prepared evidence. |
incident.postmortem_summary.latest_version_idinteger | null Always returned | The ID of the latest postmortem version. A null value means that no version exists. |
incident.postmortem_summary.latest_version_kindstring | null Always returned | The kind of the latest postmortem version. submitted is a human submission. draft, llm, and legacy need human review before submission. A null value means that no version exists. Possible values: "submitted""draft""llm""legacy"null |
incident.postmortem_summary.work_statestring Always returned | Whether the incident still needs postmortem work. none means that no postmortem is due: the incident is not resolved or closed, or it is archived without a submitted postmortem. missing means that a resolved or closed incident has no postmortem version. in_review means that the latest version needs human submission. complete means that the latest version is a human submission. missing and in_review need work; the postmortem queue (scope=postmortem) shows those incidents even when the plan's history window hides other finished incidents. Only incident collection responses load this field; single-incident and mutation responses return postmortem_summary as null. Possible values: "none""missing""in_review""complete" |
incident.created_atstring (RFC 3339) Always returned | The incident creation time. |
incident.created_bystring Always returned | The identifier of the user who created the incident. |
incident.custom_fieldsobject Always returned | The incident values keyed by custom-field slug. |
incident.archived_atstring (RFC 3339) | null Always returned | The incident archive time. A null value means that the incident is active. |
incident.archived_byinteger | null Always returned | The user ID that archived the incident. A null value means that the incident is active. |
incident.incident_managerstring Always returned | The user identifier of the incident manager. An empty string means that no manager is assigned. |
incident.incident_respondersstring[] Always returned | The user identifiers of assigned responders. |
incident.has_assigneesboolean Always returned | Indicates whether the incident has a manager or at least one responder. |
timeline_eventobject Sometimes returned | The complete public record for a timeline event. |
timeline_event.idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.revisioninteger Always returned | The resource version for concurrency control. Minimum: 1. |
timeline_event.incident_idinteger Always returned | The positive numeric ID of the incident. |
timeline_event.started_atstring (RFC 3339) Always returned | The event start time. |
timeline_event.atstring (RFC 3339) Always returned | A deprecated response alias for started_at. Both fields contain the same value. |
timeline_event.ended_atstring (RFC 3339) | null Always returned | The event end time. A null value means that the event has no end time. |
timeline_event.is_ongoingboolean Always returned | Indicates whether the event is still in progress. |
timeline_event.group_idinteger | null Always returned | The timeline-group ID. A null value means that the event has no group. |
timeline_event.is_keyboolean Always returned | Indicates whether responders marked this as a key incident event. |
timeline_event.sourcestring Always returned | The system or actor that created the event. |
timeline_event.source_refstring Always returned | The source-specific reference for the event. |
timeline_event.typestring Always returned | The event type used for grouping and display. |
timeline_event.iconstring Always returned | The event icon. The maximum length is 8 Unicode characters. Maximum length: 8 characters. |
timeline_event.titlestring Always returned | The optional display title of the event. |
timeline_event.bodystring Always returned | The event description. |
timeline_event.collaboration_generationinteger Always returned | The version of collaborative content associated with the event. |
timeline_event.tagsstring[] Always returned | The normalized event tags. |
timeline_event.ai_contextstring Always returned | The saved AI context for a generated event. An empty string means that no context is stored. |
timeline_event.created_bystring Always returned | The identifier of the user or system that created the event. |
timeline_event.comment_countinteger Always returned | The number of comments on the event. |
timeline_event.attachmentsobject[] Always returned | The files attached to the event. |
timeline_event.attachments[].idinteger Always returned | The positive numeric ID of the attachment. |
timeline_event.attachments[].timeline_event_idinteger Always returned | The positive numeric ID of the timeline event. |
timeline_event.attachments[].filenamestring Always returned | The original file name. |
timeline_event.attachments[].urlstring Always returned | A temporary download URL. An empty string means that no URL is currently available. |
timeline_event.attachments[].url_availableboolean Always returned | Indicates whether url contains an available download URL. |
timeline_event.attachments[].content_typestring Always returned | The media type of the attached file. |
timeline_event.attachments[].size_bytesinteger Always returned | The file size in bytes. |
timeline_event.attachments[].created_atstring (RFC 3339) Always returned | The attachment creation time. |
timeline_event.attachments[].created_bystring Always returned | The identifier of the user who attached the file. |
timeline_event.source_window_started_atstring (RFC 3339) | null Always returned | The start of the source-data window. A null value means that no window is recorded. |
timeline_event.source_window_ended_atstring (RFC 3339) | null Always returned | The end of the source-data window. A null value means that no window is recorded. |
timeline_event.evidence_linksobject[] Always returned | The evidence references associated with the event. |
timeline_event.evidence_links[].sourcestring Always returned | The system or provider that supplied the evidence. |
timeline_event.evidence_links[].urlstring Always returned | The absolute URL of the evidence. |
timeline_event.evidence_links[].labelstring Sometimes returned | A short display name for the evidence. |
timeline_event.evidence_links[].summarystring Sometimes returned | A short summary of the evidence. |
timeline_event.evidence_links[].artifact_idstring Sometimes returned | The identifier of a stored evidence artifact. |
timeline_event.evidence_links[].artifact_digeststring Sometimes returned | The digest used to make sure that the artifact content did not change. |
timeline_event.evidence_links[].result_bytesinteger Sometimes returned | The original evidence result size in bytes. |
timeline_event.evidence_links[].truncatedboolean Sometimes returned | Indicates whether the stored evidence omits part of the original result. |
timeline_event.operational_updateobject | null Sometimes returned | The validated operational status payload. Null or absent for ordinary and legacy timeline events. Must match exactly one of 2 schema variants. |
timeline_event.operational_update.current_impactstring Always returned | The current customer or system impact in human-authored text. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.current_actionstring Always returned | The response work currently in progress. Leading and trailing whitespace is removed before the Unicode length limit is enforced. Minimum length: 1 characters. · Maximum length: 2000 characters. |
timeline_event.operational_update.next_update_atstring (RFC 3339) | null Always returned | The planned next update time as RFC 3339 |
timeline_event.operational_update.audiencestring Always returned | The intended audience for the status update. Possible values: "responders""stakeholders""customers" |
timeline_event.operational_update.channelstring Always returned | Records the destination workflow. manual_external means the caller must deliver the copied message themselves. Possible values: "incident_record""manual_external" |
timeline_event.operational_update.destinationstring Always returned | The human-readable external destination for manual_external Maximum length: 200 characters. |
timeline_event.operational_update.communications_owner_user_idinteger | null Always returned | The active incident participant responsible for coordinating manual delivery |
timeline_event.operational_update.delivery_statestring Always returned | The server-derived delivery state. Tellagen does not claim that a manual external message was sent. Possible values: "recorded""pending_manual_delivery" |
Response headers
| Field | Description |
|---|---|
Tellagen-Resource-Versioninteger Always returned | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (7)
You can repeat this request. If the API returns 429, wait for Retry-After. Set a maximum number of attempts. Retries and updates
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Reapply the Slack channel-name template (deprecated)
#/api/v1/incidents/{id}/rename-slack-channelThis operation is deprecated. It reapplies the workspace channel-name template. It rejects every request body, including whitespace. The replacement is PATCH /api/v1/incidents/{id}/slack/channel-name with mode workspace_template. Every response includes the RFC 9745 Deprecation date and a link to the replacement operation. The Sunset header is absent because Tellagen has not set an end date.
- Required scope
- incidents:write
Deprecated operation
Announced 2026-08-31. Sunset review: 2027-03-01. Use PATCH /api/v1/incidents/{id}/slack/channel-name.
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/rename-slack-channel' \
--header 'Authorization: Bearer <token>'Success: 200
Returns the new Slack channel name.
Success response JSON
{
"channel_name": "inc-2025-001-payments"
}Parameters, headers, and fields
Operation ID: syncIncidentSlackChannelName
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Response 200
Returns the new Slack channel name.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
channel_namestring Always returned | The new Slack channel name. |
Response headers
| Field | Description |
|---|---|
Deprecationstring Always returned | The date of the deprecation announcement in RFC 9745 format. Pattern: ^@[0-9]+$. |
Linkstring Always returned | A link to the replacement operation with rel="successor-version". |
Errors and recovery (7)
If the result is unknown, read the resource before another attempt. The error details explain the next step. Retries and updates
Error responses (7)
- 400
- The compatibility action received a non-empty request body.
- 401
- Authentication failed.
- 403
- The API key lacks access or an active responder seat.
- 404
- The incident does not exist.
- 409
- Slack is not configured, the linked channel is missing, the incident is immutable, or the resolved name is already used.
- 429
- The workspace rate limit is exceeded.
- 500
- An internal server error prevented completion of the request.
Preview an incident Slack channel name
#/api/v1/incidents/{id}/slack/channel-name/previewCalculates and validates the channel name without renaming the Slack channel or creating an audit record. The workspace_template mode must omit name. The custom mode requires name.
- Required scope
- incidents:write
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/slack/channel-name/preview' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"mode": "custom",
"name": "Payments War Room"
}'Success: 200
Returns the current and proposed channel names. A 409 response uses slack_not_configured, incident_slack_channel_missing, slack_channel_not_found, or slack_channel_name_taken.
Success response JSON
{
"channel_id": "C08ABC123",
"previous_name": "inc-2025-001-payments",
"new_name": "payments-war-room",
"mode": "custom"
}Parameters, headers, and fields
Operation ID: previewIncidentSlackChannelName
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Request body
Optional fields can be omitted. To clear a value, use the format in its description. Nested fields apply only within their parent object.
| Field | Description |
|---|---|
modestring Required | Selects how the API creates the Slack channel name. Must match exactly one of 2 schema variants. Allowed values: "workspace_template""custom" |
namestring Conditional | The proposed channel name for custom mode. It must contain an ASCII letter or digit. The preview and update operations normalize it identically. Required when Required when mode is "custom". Minimum length: 1 characters. · Pattern: .*[A-Za-z0-9].*. |
Response 200
Returns the current and proposed channel names. A 409 response uses slack_not_configured, incident_slack_channel_missing, slack_channel_not_found, or slack_channel_name_taken.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
channel_idstring Always returned | The Slack channel ID. |
previous_namestring Always returned | The channel name before the request. |
new_namestring Always returned | The validated channel name. The maximum length is 80 characters. Minimum length: 1 characters. · Maximum length: 80 characters. |
modestring Always returned | The naming mode. Possible values: "workspace_template""custom" |
Errors and recovery (7)
You can repeat this request. If the API returns 429, wait for Retry-After. Set a maximum number of attempts. Retries and updates
Error responses (7)
- 400
- The naming request is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- Slack is not configured, the linked channel is missing, or the resolved name is already used.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.
Update an incident Slack channel name
#/api/v1/incidents/{id}/slack/channel-nameRenames the linked Slack channel with workspace_template or custom mode. The audit log records the old name, new name, mode, person, and time. Tellagen also publishes the audit entry as an incident event.
If the audit save fails, Tellagen attempts to restore the old channel name and returns an error.
- Required scope
- incidents:write
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request PATCH \
--url 'https://{company}.api.tellagen.com/api/v1/incidents/{id}/slack/channel-name' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"mode": "custom",
"name": "Payments War Room"
}'Success: 200
Returns the renamed channel. The preview operation validates the same request without changing the channel. A 409 response uses slack_not_configured, incident_slack_channel_missing, slack_channel_not_found, or slack_channel_name_taken.
Success response JSON
{
"channel_id": "C08ABC123",
"previous_name": "inc-2025-001-payments",
"new_name": "payments-war-room",
"mode": "custom"
}Parameters, headers, and fields
Operation ID: updateIncidentSlackChannelName
Path parameters
| Field | Description |
|---|---|
idinteger Required | A positive numeric incident ID returned by this API. The permanent incident reference is suitable for stored references and external links. Minimum: 1. |
Request body
Optional fields can be omitted. To clear a value, use the format in its description. Nested fields apply only within their parent object.
| Field | Description |
|---|---|
modestring Required | Selects how the API creates the Slack channel name. Must match exactly one of 2 schema variants. Allowed values: "workspace_template""custom" |
namestring Conditional | The proposed channel name for custom mode. It must contain an ASCII letter or digit. The preview and update operations normalize it identically. Required when Required when mode is "custom". Minimum length: 1 characters. · Pattern: .*[A-Za-z0-9].*. |
Response 200
Returns the renamed channel. The preview operation validates the same request without changing the channel. A 409 response uses slack_not_configured, incident_slack_channel_missing, slack_channel_not_found, or slack_channel_name_taken.
“Always returned” applies when the parent object exists. The value can be null. Child fields describe each array item.
| Field | Description |
|---|---|
channel_idstring Always returned | The Slack channel ID. |
previous_namestring Always returned | The channel name before the request. |
new_namestring Always returned | The validated channel name. The maximum length is 80 characters. Minimum length: 1 characters. · Maximum length: 80 characters. |
modestring Always returned | The naming mode. Possible values: "workspace_template""custom" |
Errors and recovery (7)
If the result is unknown, read the resource before another attempt. The error details explain the next step. Retries and updates
Error responses (7)
- 400
- The naming request is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- Slack is not configured, the linked channel is missing, or the resolved name is already used.
- 429
- The request exceeded an applicable sliding limit. Free API keys allow 20 requests per second and 600 requests per 60 seconds. Team API keys allow 100 requests per second and 3,000 requests per 60 seconds. Browser users allow 100 requests per second. Browser company allows 500 requests per second and 5,000 requests per 10 seconds. Browser company means the sum of user traffic for one company. Anonymous client IPs allow 20 requests per second and 200 requests per 10 seconds. The rate limiter does not count requests that it rejects.
- 500
- An internal server error prevented completion of the request.