Try the RankNibbler SEO API

Alerting Beta

Decide who hears about an outage. A monitor can alert people in your workspace, contacts who have no login, and named teams, and you can read back every alert that was sent.

Every endpoint in this group needs an X-API-Key header, and each call counts once against your daily quota. Reading needs access to uptime monitoring in the app; changing contacts and teams needs permission to manage uptime monitors. See Monitoring API: getting started for authentication, rate limits and errors.

Endpoints

MethodEndpointDoes
GET/api/v1/alertsAlert history, filtered by monitor, event, status or time
GET/api/v1/alerting/contactsList alert contacts
POST/api/v1/alerting/contactsCreate a contact
GET/api/v1/alerting/contacts/{id}One contact
PATCH/api/v1/alerting/contacts/{id}Change a contact and its addresses
DELETE/api/v1/alerting/contacts/{id}Delete a contact
DELETE/api/v1/alerting/contacts?ids=…Delete several contacts
GET/api/v1/alerting/teamsList teams
POST/api/v1/alerting/teamsCreate a team
GET/api/v1/alerting/teams/{id}One team
PATCH/api/v1/alerting/teams/{id}Change a team and its members
DELETE/api/v1/alerting/teams/{id}Delete a team
DELETE/api/v1/alerting/teams?ids=…Delete several teams

Who gets alerted

Severity

Each address has a severity:

Opting out

Every alert to a contact carries an opt-out link. Using it stops alerts to that one address, leaving the contact and its other addresses alone. The address then shows optedOut: true.

This can't be undone through the API, by design: the person asked not to be emailed, so they have to ask to be added again. Workspace members don't get an opt-out link; they manage alerts in the app.

Channels

Alerts are sent by email. kind is email on every method today. Other channels, such as SMS, are planned, and kind is there so nothing has to change when they arrive.

The contact object

contact
  1. {
  2. "id": "ct_5b8d1f0a9c2e4d6f7a83",
  3. "name": "Night shift",
  4. "methods": [
  5. { "id": "318", "kind": "email", "target": "[email protected]", "severity": "all", "optedOut": false },
  6. { "id": "319", "kind": "email", "target": "[email protected]", "severity": "high", "optedOut": false }
  7. ],
  8. "createdAt": "2026-09-17T09:02:11.000Z",
  9. "updatedAt": "2026-09-17T09:02:11.000Z"
  10. }
FieldTypeDescription
idstringThe contact id, starting ct_.
namestringWhat you call this contact. Up to 120 characters.
methodsobject[]How to reach them, up to 5.
methods[].idstringThe address id.
methods[].kindstringemail.
methods[].targetstringThe email address.
methods[].severitystringall or high.
methods[].optedOutbooleantrue when the person used the opt-out link. That address is no longer alerted.
createdAt, updatedAtstringWhen the contact was created and last changed.

The team object

team
  1. {
  2. "id": "tm_2c7e91a4b6d0f3e85a17",
  3. "name": "Support",
  4. "userIds": [42, 57],
  5. "users": [
  6. { "id": 42, "name": "Sam Taylor", "email": "[email protected]" },
  7. { "id": 57, "name": "Ada Okoro", "email": "[email protected]" }
  8. ],
  9. "contactIds": ["ct_5b8d1f0a9c2e4d6f7a83"],
  10. "contacts": [{ "id": "ct_5b8d1f0a9c2e4d6f7a83", "name": "Night shift" }],
  11. "createdAt": "2026-09-17T09:10:40.000Z",
  12. "updatedAt": "2026-09-17T09:10:40.000Z"
  13. }
FieldTypeDescription
idstringThe team id, starting tm_.
namestringThe team name. Up to 120 characters.
userIds, usersinteger[], object[]Workspace members in the team, as ids and as { id, name, email }.
contactIds, contactsstring[], object[]Contacts in the team, as ids and as { id, name }.
createdAt, updatedAtstringWhen the team was created and last changed.

Related