For the complete documentation index, see llms.txt. This page is also available as Markdown.

Escalations

Create, read, update and archive escalation policies.

Fetch list of escalations

get

An escalation policy is a simple set of rules to alert the right person at the right time using the right channel such as phone, slack or email. If that person misses out then the incident gets escalated to the next person.

Authorizations
x-api-keystringRequired

Your organisation's API key. Create one in the Spike dashboard under Settings > API. Sent on every request as the x-api-key header.

x-team-idstringRequired

The target team's _id — a 24-character hex ObjectId such as 5f2b1c4d9e8a7b6c5d4e3f21. This is NOT the short uid slug (e.g. eng) shown in dashboard URLs; passing the uid will not resolve a team. Read the _id from GET /teams/get-all-teams or GET /teams/get-my-teams.

REQUIRED for: GET /on-calls (API-key callers get 400 without it), POST /on-calls, and every team-scoped read that declares it — the /incidents/* and /services/* listings, /escalations, /automation/rules and the integration endpoints.

OPTIONAL for: the incident action endpoints (acknowledge, resolve, escalate, unacknowledge), which derive the organisation from the API key itself; PUT /on-calls/{oncallId} and the on-call layer endpoints, which fall back to the organisation's default team; and org-wide reads such as GET /orgs/info and GET /users, which ignore it.

When supplied it must name a team inside the API key's organisation. A team from another organisation is rejected with 403.

Header parameters
x-api-keystringRequired

Your API key. Find it in your Spike dashboard under Settings > API.

x-team-idstringRequired

The team's _id — a 24-character hex ObjectId, NOT the short uid slug. Read it from GET /teams/get-all-teams.

Example: 5f2b1c4d9e8a7b6c5d4e3f21
Responses
200

Successful response

application/json
totalEscalationsnumberOptional
get/escalations
GET /escalations HTTP/1.1
Host: api.spike.sh
x-api-key: text
x-team-id: text
Accept: */*
{
  "totalEscalations": 1,
  "escalations": [
    {
      "_id": "63c9a1b2d4e5f60718293a4b",
      "name": "Engineering primary",
      "teams": [
        "5f2b1c4d9e8a7b6c5d4e3f21"
      ],
      "org": "5f72e289b17d1656e0115098"
    }
  ],
  "pagination": {
    "perPage": 20,
    "currentPage": 1,
    "skip": 0,
    "total": 1,
    "totalPages": 1,
    "pages": [
      1
    ],
    "showingFrom": 0,
    "showingTill": 1
  }
}

Get escalation policy details

get

Get details of an escalation policy. Includes escalation policy name, description, and escalation rules.

Authorizations
x-api-keystringRequired

Your organisation's API key. Create one in the Spike dashboard under Settings > API. Sent on every request as the x-api-key header.

x-team-idstringRequired

The target team's _id — a 24-character hex ObjectId such as 5f2b1c4d9e8a7b6c5d4e3f21. This is NOT the short uid slug (e.g. eng) shown in dashboard URLs; passing the uid will not resolve a team. Read the _id from GET /teams/get-all-teams or GET /teams/get-my-teams.

REQUIRED for: GET /on-calls (API-key callers get 400 without it), POST /on-calls, and every team-scoped read that declares it — the /incidents/* and /services/* listings, /escalations, /automation/rules and the integration endpoints.

OPTIONAL for: the incident action endpoints (acknowledge, resolve, escalate, unacknowledge), which derive the organisation from the API key itself; PUT /on-calls/{oncallId} and the on-call layer endpoints, which fall back to the organisation's default team; and org-wide reads such as GET /orgs/info and GET /users, which ignore it.

When supplied it must name a team inside the API key's organisation. A team from another organisation is rejected with 403.

Path parameters
escalationIdstringRequired

escalationId parameter

Header parameters
x-api-keystringRequired

Your API key. Find it in your Spike dashboard under Settings > API.

x-team-idstringRequired

The team's _id — a 24-character hex ObjectId, NOT the short uid slug. Read it from GET /teams/get-all-teams.

Example: 5f2b1c4d9e8a7b6c5d4e3f21
Responses
200

Successful response

application/json
isPinnedbooleanOptional
alertRulesobject[]Optional
get/escalations/{escalationId}
GET /escalations/{escalationId} HTTP/1.1
Host: api.spike.sh
x-api-key: text
x-team-id: text
Accept: */*
{
  "escalation": {
    "_id": "63c9a1b2d4e5f60718293a4b",
    "name": "Engineering primary",
    "teams": [
      "5f2b1c4d9e8a7b6c5d4e3f21"
    ],
    "org": "5f72e289b17d1656e0115098"
  },
  "integrations": [
    {
      "_id": "62a1b2c3d4e5f60718293a4b",
      "name": "AWS CloudWatch",
      "slug": "aws",
      "token": "a1b2c3d4e5f6a7b8c9d0",
      "webhookUrl": "https://hooks.spike.sh/a1b2c3d4e5f6a7b8c9d0/push-events",
      "service": "61d2c3b4a5968778695a4b3c",
      "escalation": "63c9a1b2d4e5f60718293a4b",
      "teams": [
        "5f2b1c4d9e8a7b6c5d4e3f21"
      ],
      "createdAt": "2026-03-13T09:41:00.000Z"
    }
  ],
  "isPinned": false,
  "alertRules": []
}

Fetch escalations using an on-call

get

Get a list of escalation policies that reference a specific on-call schedule. Useful for understanding which escalations will be affected if you modify or delete an on-call schedule.

Authorizations
x-api-keystringRequired

Your organisation's API key. Create one in the Spike dashboard under Settings > API. Sent on every request as the x-api-key header.

x-team-idstringRequired

The target team's _id — a 24-character hex ObjectId such as 5f2b1c4d9e8a7b6c5d4e3f21. This is NOT the short uid slug (e.g. eng) shown in dashboard URLs; passing the uid will not resolve a team. Read the _id from GET /teams/get-all-teams or GET /teams/get-my-teams.

REQUIRED for: GET /on-calls (API-key callers get 400 without it), POST /on-calls, and every team-scoped read that declares it — the /incidents/* and /services/* listings, /escalations, /automation/rules and the integration endpoints.

OPTIONAL for: the incident action endpoints (acknowledge, resolve, escalate, unacknowledge), which derive the organisation from the API key itself; PUT /on-calls/{oncallId} and the on-call layer endpoints, which fall back to the organisation's default team; and org-wide reads such as GET /orgs/info and GET /users, which ignore it.

When supplied it must name a team inside the API key's organisation. A team from another organisation is rejected with 403.

Path parameters
oncallIdstringRequired

oncallId parameter

Header parameters
x-api-keystringRequired

Your API key. Find it in your Spike dashboard under Settings > API.

x-team-idstringRequired

The team's _id — a 24-character hex ObjectId, NOT the short uid slug. Read it from GET /teams/get-all-teams.

Example: 5f2b1c4d9e8a7b6c5d4e3f21
Responses
200

A bare JSON array of the escalation policies that reference this on-call.

application/json
_idstringOptional
namestringOptional
teamsstring[]Optional
orgstringOptional
get/on-calls/{oncallId}/escalations
GET /on-calls/{oncallId}/escalations HTTP/1.1
Host: api.spike.sh
x-api-key: text
x-team-id: text
Accept: */*
[
  {
    "_id": "63c9a1b2d4e5f60718293a4b",
    "name": "Engineering primary",
    "teams": [
      "5f2b1c4d9e8a7b6c5d4e3f21"
    ],
    "org": "5f72e289b17d1656e0115098"
  }
]

Create an escalation policy

post

Create a new escalation policy for a team. An escalation policy defines who gets notified, how (via which channel), and the delay between steps.

Request Body:

  • name (required): A descriptive name for the escalation policy.

  • escalation (required): An array of steps. Each step is an array of notification rules that fire in parallel. Steps are executed sequentially — Step 2 fires only if Step 1 is not acknowledged within its interval.

  • delay (optional): Delay in minutes before the first step begins (default: 0).

Notification rule fields:

  • interval: Time in minutes to wait before escalating to the next step. Only required in the first step.

  • via: The notification channel — one of email, sms, phone, whatsapp, push-notification, slack, telegram, or ms-teams.

  • oncall: Reference to an on-call schedule { "id": "<on-call-id>" }. The currently on-call user will be notified.

  • user: Reference to a specific user { "id": "<user-id>" }. Use this to always notify a fixed person.

  • channel: (Slack/MS Teams only) The channel to post to { "id": "<channel-id>", "value": "<channel-name>", "isPrivate": "false" }.

  • mention: (Slack only) Mention config { "id": "false", "value": "No mention" }.

Tip: Use oncall to route alerts to whoever is currently on-call, or user to always alert a specific person.

Authorizations
x-api-keystringRequired

Your organisation's API key. Create one in the Spike dashboard under Settings > API. Sent on every request as the x-api-key header.

x-team-idstringRequired

The target team's _id — a 24-character hex ObjectId such as 5f2b1c4d9e8a7b6c5d4e3f21. This is NOT the short uid slug (e.g. eng) shown in dashboard URLs; passing the uid will not resolve a team. Read the _id from GET /teams/get-all-teams or GET /teams/get-my-teams.

REQUIRED for: GET /on-calls (API-key callers get 400 without it), POST /on-calls, and every team-scoped read that declares it — the /incidents/* and /services/* listings, /escalations, /automation/rules and the integration endpoints.

OPTIONAL for: the incident action endpoints (acknowledge, resolve, escalate, unacknowledge), which derive the organisation from the API key itself; PUT /on-calls/{oncallId} and the on-call layer endpoints, which fall back to the organisation's default team; and org-wide reads such as GET /orgs/info and GET /users, which ignore it.

When supplied it must name a team inside the API key's organisation. A team from another organisation is rejected with 403.

Header parameters
x-api-keystringRequired

Your API key. Find it in your Spike dashboard under Settings > API.

x-team-idstringRequired

The team's _id — a 24-character hex ObjectId, NOT the short uid slug. Read it from GET /teams/get-all-teams.

Example: 5f2b1c4d9e8a7b6c5d4e3f21
Body
namestringOptional
delaystringOptional
Responses
200

Successful response

application/json
_idstringOptional
namestringOptional
teamsstring[]Optional
orgstringOptional
post/escalations/create
POST /escalations/create HTTP/1.1
Host: api.spike.sh
x-api-key: text
x-team-id: text
Content-Type: application/json
Accept: */*
Content-Length: 608

{
  "name": "Production Critical Alerts",
  "escalation": [
    [
      {
        "interval": "10",
        "via": "email",
        "oncall": {
          "id": "64b7e2a1c3d4e5f60718293a"
        }
      },
      {
        "interval": "10",
        "via": "sms",
        "oncall": {
          "id": "64b7e2a1c3d4e5f60718293a"
        }
      },
      {
        "interval": "10",
        "via": "phone",
        "oncall": {
          "id": "64b7e2a1c3d4e5f60718293a"
        }
      },
      {
        "interval": "10",
        "via": "push-notification",
        "user": {
          "id": "6a3c2d5e0f9b8c7d6e5f4a32"
        }
      }
    ],
    [
      {
        "interval": "",
        "via": "slack",
        "channel": {
          "id": "C07ABCDEF12",
          "value": "incidents",
          "isPrivate": "false"
        },
        "mention": {
          "id": "false",
          "value": "No mention"
        }
      },
      {
        "interval": "",
        "via": "push-notification",
        "oncall": {
          "id": "64b7e2a1c3d4e5f607182941"
        }
      }
    ]
  ],
  "delay": "0"
}
{
  "_id": "63c9a1b2d4e5f60718293a4b",
  "name": "Engineering primary",
  "teams": [
    "5f2b1c4d9e8a7b6c5d4e3f21"
  ],
  "org": "5f72e289b17d1656e0115098"
}

Update an escalation policy

put

Update an existing escalation policy by its ID. Pass the escalation policy _id in the URL and provide the full updated policy in the request body.

You must send the complete escalation structure — partial updates are not supported. The existing policy will be fully replaced with the provided data.

Request Body:

  • name (required): Updated name for the escalation policy.

  • escalation (required): The full array of escalation steps (same format as Create).

  • delay (optional): Delay in minutes before the first step (default: 0).

See the Create an escalation policy endpoint for detailed field descriptions and notification channel options.

Authorizations
x-api-keystringRequired

Your organisation's API key. Create one in the Spike dashboard under Settings > API. Sent on every request as the x-api-key header.

x-team-idstringRequired

The target team's _id — a 24-character hex ObjectId such as 5f2b1c4d9e8a7b6c5d4e3f21. This is NOT the short uid slug (e.g. eng) shown in dashboard URLs; passing the uid will not resolve a team. Read the _id from GET /teams/get-all-teams or GET /teams/get-my-teams.

REQUIRED for: GET /on-calls (API-key callers get 400 without it), POST /on-calls, and every team-scoped read that declares it — the /incidents/* and /services/* listings, /escalations, /automation/rules and the integration endpoints.

OPTIONAL for: the incident action endpoints (acknowledge, resolve, escalate, unacknowledge), which derive the organisation from the API key itself; PUT /on-calls/{oncallId} and the on-call layer endpoints, which fall back to the organisation's default team; and org-wide reads such as GET /orgs/info and GET /users, which ignore it.

When supplied it must name a team inside the API key's organisation. A team from another organisation is rejected with 403.

Path parameters
escalationIdstringRequired

escalationId parameter

Header parameters
x-api-keystringRequired

Your API key. Find it in your Spike dashboard under Settings > API.

x-team-idstringRequired

The team's _id — a 24-character hex ObjectId, NOT the short uid slug. Read it from GET /teams/get-all-teams.

Example: 5f2b1c4d9e8a7b6c5d4e3f21
Body
namestringOptional
delaystringOptional
Responses
200

Successful response

application/json
_idstringOptional
namestringOptional
teamsstring[]Optional
orgstringOptional
put/escalations/{escalationId}/update
PUT /escalations/{escalationId}/update HTTP/1.1
Host: api.spike.sh
x-api-key: text
x-team-id: text
Content-Type: application/json
Accept: */*
Content-Length: 607

{
  "name": "Updated Production Alerts",
  "escalation": [
    [
      {
        "interval": "10",
        "via": "email",
        "oncall": {
          "id": "64b7e2a1c3d4e5f60718293a"
        }
      },
      {
        "interval": "10",
        "via": "sms",
        "oncall": {
          "id": "64b7e2a1c3d4e5f60718293a"
        }
      },
      {
        "interval": "10",
        "via": "phone",
        "oncall": {
          "id": "64b7e2a1c3d4e5f60718293a"
        }
      },
      {
        "interval": "10",
        "via": "push-notification",
        "user": {
          "id": "6a3c2d5e0f9b8c7d6e5f4a32"
        }
      }
    ],
    [
      {
        "interval": "",
        "via": "slack",
        "channel": {
          "id": "C07ABCDEF12",
          "value": "incidents",
          "isPrivate": "false"
        },
        "mention": {
          "id": "false",
          "value": "No mention"
        }
      },
      {
        "interval": "",
        "via": "push-notification",
        "oncall": {
          "id": "64b7e2a1c3d4e5f607182941"
        }
      }
    ]
  ],
  "delay": "0"
}
{
  "_id": "63c9a1b2d4e5f60718293a4b",
  "name": "Engineering primary (updated)",
  "teams": [
    "5f2b1c4d9e8a7b6c5d4e3f21"
  ],
  "org": "5f72e289b17d1656e0115098"
}

Archive an escalation policy

delete

Archive (soft-delete) an escalation policy by its ID. Archived escalation policies will no longer be active and won't appear in the default escalation list.

Important: Before archiving, make sure no active integrations are using this escalation policy. Archiving an in-use policy may result in incidents not being escalated properly.

Pass the escalation policy _id as a path parameter. No request body is required.

Authorizations
x-api-keystringRequired

Your organisation's API key. Create one in the Spike dashboard under Settings > API. Sent on every request as the x-api-key header.

x-team-idstringRequired

The target team's _id — a 24-character hex ObjectId such as 5f2b1c4d9e8a7b6c5d4e3f21. This is NOT the short uid slug (e.g. eng) shown in dashboard URLs; passing the uid will not resolve a team. Read the _id from GET /teams/get-all-teams or GET /teams/get-my-teams.

REQUIRED for: GET /on-calls (API-key callers get 400 without it), POST /on-calls, and every team-scoped read that declares it — the /incidents/* and /services/* listings, /escalations, /automation/rules and the integration endpoints.

OPTIONAL for: the incident action endpoints (acknowledge, resolve, escalate, unacknowledge), which derive the organisation from the API key itself; PUT /on-calls/{oncallId} and the on-call layer endpoints, which fall back to the organisation's default team; and org-wide reads such as GET /orgs/info and GET /users, which ignore it.

When supplied it must name a team inside the API key's organisation. A team from another organisation is rejected with 403.

Path parameters
escalationIdstringRequired

escalationId parameter

Header parameters
x-api-keystringRequired

Your API key. Find it in your Spike dashboard under Settings > API.

x-team-idstringRequired

The team's _id — a 24-character hex ObjectId, NOT the short uid slug. Read it from GET /teams/get-all-teams.

Example: 5f2b1c4d9e8a7b6c5d4e3f21
Responses
200

Successful response

application/json
archivebooleanOptional
delete/escalations/{escalationId}/archive
DELETE /escalations/{escalationId}/archive HTTP/1.1
Host: api.spike.sh
x-api-key: text
x-team-id: text
Accept: */*
{
  "archive": true
}

Last updated

Was this helpful?