Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
640 changes: 640 additions & 0 deletions apps/docs/content/docs/en/integrations/incidentio.mdx

Large diffs are not rendered by default.

686 changes: 674 additions & 12 deletions apps/sim/blocks/blocks/incidentio.ts

Large diffs are not rendered by default.

80 changes: 78 additions & 2 deletions apps/sim/lib/integrations/integrations.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"updatedAt": "2026-08-09",
"updatedAt": "2026-08-11",
"integrations": [
{
"type": "onepassword",
Expand Down Expand Up @@ -9835,9 +9835,85 @@
{
"name": "Delete Escalation Path",
"description": "Delete an escalation path in incident.io"
},
{
"name": "Get Who Is On Call",
"description": "Get who is currently on call in incident.io, as one row per ongoing shift across every schedule (or a single schedule). Also returns the shifts that take over at the next changeover."
},
{
"name": "List Schedule Overrides",
"description": "List the one-off overrides layered on top of a schedule in incident.io, such as someone covering a colleague’s shift"
},
{
"name": "List Alerts",
"description": "List alerts in incident.io, optionally filtered by status, source, or created date"
},
{
"name": "Show Alert",
"description": "Get a single alert by ID from incident.io"
},
{
"name": "Resolve Alert",
"description": "Resolve a currently firing alert in incident.io. Resolving an already-resolved alert is a no-op and returns it unchanged."
},
{
"name": "Create Alert Event",
"description": "Fire an alert into incident.io through an HTTP alert source. Send the same deduplication key with status \"resolved\" to close the alert you opened."
},
{
"name": "List Incident Alerts",
"description": "List the connections between incidents and alerts in incident.io — which alerts triggered an incident, or which incident an alert was attached to"
},
{
"name": "Cancel Escalation",
"description": "Cancel an escalation in incident.io. Notifications stop, and the escalation will not advance to further levels or repeat."
},
{
"name": "List Catalog Types",
"description": "List all catalog types in incident.io, including those synced from external resources. Use this to find the catalog type ID needed to list entries."
},
{
"name": "List Catalog Entries",
"description": "List the entries of a catalog type in incident.io — for example every service, team, or customer recorded in the catalog"
},
{
"name": "List Teams",
"description": "List all teams in the incident.io organisation, along with their members"
},
{
"name": "Show Team",
"description": "Get a single team by ID from incident.io, along with its members"
},
{
"name": "Create Follow-up",
"description": "Create a new follow-up on an incident in incident.io"
},
{
"name": "Update Follow-up",
"description": "Update an existing follow-up in incident.io, for example to mark it completed or reassign it"
},
{
"name": "Create Action",
"description": "Create a new action on an incident in incident.io"
},
{
"name": "Update Action",
"description": "Update an existing action in incident.io, for example to mark it completed or reassign it"
},
{
"name": "List Incident Participants",
"description": "List the participants of an incident in incident.io, split into those actively helping and those just observing"
},
{
"name": "Grant Incident Membership",
"description": "Make a user a member of a private incident in incident.io"
},
{
"name": "Revoke Incident Membership",
"description": "Revoke a user's membership of a private incident in incident.io"
}
],
"operationCount": 46,
"operationCount": 65,
"triggers": [
{
"id": "incidentio_incident_created",
Expand Down
2 changes: 1 addition & 1 deletion apps/sim/tools/generated/tool-ids.ts

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion apps/sim/tools/generated/tool-metadata.ts

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion apps/sim/tools/generated/tool-outputs.ts

Large diffs are not rendered by default.

82 changes: 82 additions & 0 deletions apps/sim/tools/incidentio/actions_create.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import {
INCIDENTIO_ACTION_RECORD_OUTPUT_PROPERTIES,
type IncidentioActionsCreateParams,
type IncidentioActionsCreateResponse,
} from '@/tools/incidentio/types'
import type { ToolConfig } from '@/tools/types'

export const actionsCreateTool: ToolConfig<
IncidentioActionsCreateParams,
IncidentioActionsCreateResponse
> = {
id: 'incidentio_actions_create',
name: 'Create Action',
description: 'Create a new action on an incident in incident.io',
version: '1.0.0',

params: {
apiKey: {
type: 'string',
required: true,
visibility: 'user-only',
description: 'incident.io API Key',
},
incident_id: {
type: 'string',
required: true,
visibility: 'user-or-llm',
description:
'The ID of the incident the action belongs to (e.g., "01FDAG4SAP5TYPT98WGR2N7W91")',
},
description: {
type: 'string',
required: true,
visibility: 'user-or-llm',
description: 'Description of the action. Supports Markdown.',
},
assignee_id: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'ID of the user to assign this action to',
},
},

request: {
url: 'https://api.incident.io/v2/actions',
method: 'POST',
headers: (params) => ({
'Content-Type': 'application/json',
Authorization: `Bearer ${params.apiKey}`,
}),
body: (params) => {
const body: Record<string, unknown> = {
incident_id: params.incident_id.trim(),
description: params.description,
}

if (params.assignee_id) body.assignee_id = params.assignee_id.trim()

return body
},
},

transformResponse: async (response: Response) => {
const data = await response.json()

return {
success: true,
output: {
action: data.action,
},
}
},

outputs: {
action: {
type: 'object',
description: 'The created action',
properties: INCIDENTIO_ACTION_RECORD_OUTPUT_PROPERTIES,
},
},
}
90 changes: 90 additions & 0 deletions apps/sim/tools/incidentio/actions_update.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import {
INCIDENTIO_ACTION_RECORD_OUTPUT_PROPERTIES,
type IncidentioActionsUpdateParams,
type IncidentioActionsUpdateResponse,
} from '@/tools/incidentio/types'
import type { ToolConfig } from '@/tools/types'

export const actionsUpdateTool: ToolConfig<
IncidentioActionsUpdateParams,
IncidentioActionsUpdateResponse
> = {
id: 'incidentio_actions_update',
name: 'Update Action',
description:
'Update an existing action in incident.io, for example to mark it completed or reassign it',
version: '1.0.0',

params: {
apiKey: {
type: 'string',
required: true,
visibility: 'user-only',
description: 'incident.io API Key',
},
id: {
type: 'string',
required: true,
visibility: 'user-or-llm',
description: 'The ID of the action to update (e.g., "01FCNDV6P870EA6S7TK1DSYDG0")',
},
description: {
type: 'string',
required: true,
visibility: 'user-or-llm',
description:
'Description of the action. This endpoint replaces the description, so always send it.',
},
status: {
type: 'string',
required: true,
visibility: 'user-or-llm',
description:
'Status of the action: "outstanding", "completed", or "not_doing". Deleting is not supported here.',
},
assignee_id: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'ID of the user to assign this action to',
},
},

request: {
url: (params) => `https://api.incident.io/v2/actions/${encodeURIComponent(params.id.trim())}`,
method: 'PUT',
headers: (params) => ({
'Content-Type': 'application/json',
Authorization: `Bearer ${params.apiKey}`,
}),
body: (params) => {
const body: Record<string, unknown> = {
description: params.description,
status: params.status,
}

if (params.assignee_id) body.assignee_id = params.assignee_id.trim()

return body
},
},

transformResponse: async (response: Response) => {
const data = await response.json()

return {
success: true,
output: {
action: data.action,
},
}
},

outputs: {
action: {
type: 'object',
description: 'The updated action',
properties: INCIDENTIO_ACTION_RECORD_OUTPUT_PROPERTIES,
},
},
}
127 changes: 127 additions & 0 deletions apps/sim/tools/incidentio/alert_events_create.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
import type {
IncidentioAlertEventsCreateParams,
IncidentioAlertEventsCreateResponse,
} from '@/tools/incidentio/types'
import { parseIncidentioJsonParam } from '@/tools/incidentio/utils'
import type { ToolConfig } from '@/tools/types'

export const alertEventsCreateTool: ToolConfig<
IncidentioAlertEventsCreateParams,
IncidentioAlertEventsCreateResponse
> = {
id: 'incidentio_alert_events_create',
name: 'Create Alert Event',
description:
'Fire an alert into incident.io through an HTTP alert source. Send the same deduplication key with status "resolved" to close the alert you opened.',
version: '1.0.0',

params: {
alert_source_config_id: {
type: 'string',
required: true,
visibility: 'user-or-llm',
description:
'The ID of the HTTP alert source config to fire into (e.g., "01GW2G3V0S59R238FAHPDS1R66")',
},
alert_source_token: {
type: 'string',
required: true,
visibility: 'user-only',
description:
'The token generated when configuring the HTTP alert source. This is not the incident.io API key.',
},
title: {
type: 'string',
required: true,
visibility: 'user-or-llm',
description: 'Title of the alert (e.g., "Payments service error rate above 5%")',
},
status: {
type: 'string',
required: true,
visibility: 'user-or-llm',
description: 'Current status of the alert: "firing" or "resolved"',
},
description: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Detail to add below the title. Supports Markdown.',
},
deduplication_key: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description:
'Key that uniquely identifies this alert. Reuse it to update or resolve the same alert instead of creating a new one.',
},
source_url: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Link back to the alert in the upstream system',
},
metadata: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description:
'Additional metadata as a JSON object, parsed according to the alert source config (e.g., {"service": "payments"})',
},
},

request: {
url: (params) =>
`https://api.incident.io/v2/alert_events/http/${encodeURIComponent(
params.alert_source_config_id.trim()
)}`,
method: 'POST',
headers: (params) => ({
'Content-Type': 'application/json',
Authorization: `Bearer ${params.alert_source_token}`,
}),
body: (params) => {
const body: Record<string, unknown> = {
title: params.title,
status: params.status,
}

if (params.description) body.description = params.description
if (params.deduplication_key) body.deduplication_key = params.deduplication_key
if (params.source_url) body.source_url = params.source_url
if (params.metadata) {
body.metadata = parseIncidentioJsonParam(params.metadata, 'metadata', undefined)
}

return body
},
},

transformResponse: async (response: Response) => {
const data = await response.json()

return {
success: true,
output: {
deduplication_key: data.deduplication_key,
message: data.message,
status: data.status,
},
}
},

outputs: {
deduplication_key: {
type: 'string',
description: 'The deduplication key the event was processed with',
},
message: {
type: 'string',
description: 'Human readable message giving detail about the event',
},
status: {
type: 'string',
description: 'Status of the event',
},
},
}
Loading
Loading