boltZharp Docs
notifications_activeAPI Reference

Alerting

Alert connections (Slack, PagerDuty, webhooks and the rest), escalation policies and severities that decide who is paged and how, on-call schedules, and the team groups policies page.

Paths are relative to https://api.zharp.io/api/v1. Alert connections hold webhook URLs and tokens, so every request to them — reads included — needs an admin key. Escalation, severities, on-call and team groups are read with read and changed with admin; changing them also needs the key's owner to be the workspace owner or a manager. See Authentication.

Alert connections

A connection is somewhere alerts go: a Slack channel, an e-mail list, a webhook. It alerts for every monitor ("appliesTo": "all") or only the monitors linked to it, for the events in its events.

typeconfig it needs
EMAILemails: a list of addresses
SLACK, DISCORD, MATTERMOST, MSTEAMS, GOOGLE_CHAT, ZAPIERwebhookUrl — the incoming webhook. Slack can also be connected in the app with “Add to Slack”.
WEBHOOKurl; optional method, headers, a payload template, signingSecret — see Webhooks
PAGERDUTYintegrationKey (Events API v2)
TELEGRAMchatId — easiest connected in the app, which links the chat for you
PUSHOVERuserKey
PUSHBULLETaccessToken
SPLUNKhecUrl and token
config keyFor every type
eventsWhich events it sends: any of down, degraded, resolved, acknowledged, maintenance. Default down, degraded and resolved.
appliesToall for every monitor; otherwise only the monitors linked with PUT …/monitors.
retriesDelivery attempts, 1–5. Default 3.
GET/notification-channels/workspace/:workspaceId
Scope: admin
The workspace's connections, newest first, each with how many monitors are linked to it.
Path parameters
workspaceId
integerrequired
Your workspace's id — the key's own (workspaceId on any monitor).
Request
curl "https://api.zharp.io/api/v1/notification-channels/workspace/3" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "Connections retrieved", "data": [ {
    "id": 41,
    "workspaceId": 3,
    "type": "SLACK",
    "name": "#ops",
    "config": {
      "webhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX",
      "events": ["down", "resolved"],
      "appliesTo": "all",
      "connectedBy": { "id": 12, "name": "Ada" },
      "connectedAt": "2026-10-01T09:00:00.000Z"
    },
    "enabled": true,
    "language": "en",
    "createdAt": "2026-10-01T09:00:00.000Z",
    "updatedAt": "2026-10-20T14:12:00.000Z", "_count": { "monitors": 3 }
  } ] }
Errors
  • 403Another workspace's id.
GET/notification-channels/:id
Scope: admin
One connection: its settings, the monitors linked to it, and how its deliveries went over the last day.

health is healthy, failing (the last delivery failed) or unknown (nothing delivered yet). deliveries holds up to 20 from the last day.

Path parameters
id
integerrequired
The connection's id.
Request
curl "https://api.zharp.io/api/v1/notification-channels/41" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{
  "message": "Connections retrieved",
  "data": {
    "id": 41,
    "type": "SLACK",
    "name": "#ops",
    "config": { … },
    "enabled": true,
    "monitorIds": [57, 58],
    "stats": { "delivered24h": 5, "failed24h": 1, "lastDeliveryAt": "…", "lastResponseCode": 200, "lastStatus": "delivered", "health": "healthy" },
    "deliveries": [
      { "id": 901, "event": "down", "status": "delivered", "error": null, "responseCode": 200, "durationMs": 312, "attempts": 1, "createdAt": "…", "monitor": { "id": 57, "name": "API health" } }
    ]
  }
}
Errors
  • 404No such connection in this workspace.
POST/notification-channels
Scope: adminPermission: resources:manage
Create a connection. It starts sending at once; a webhook gets a signing secret unless it has a payload template or one of its own.
Body (JSON)
type
stringrequired
One of the types above.
config
objectrequired
What that type needs, and the keys above.
name
string
Up to 100 characters. Left out, it's named from the platform — the Slack channel, say.
enabled
boolean
Default true.
Request
curl -X POST "https://api.zharp.io/api/v1/notification-channels" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "SLACK",
    "name": "#ops",
    "config": {
      "webhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX",
      "events": [
        "down",
        "resolved"
      ],
      "appliesTo": "all"
    }
  }'
Response
{ "message": "Connection created", "data": {
    "id": 41,
    "workspaceId": 3,
    "type": "SLACK",
    "name": "#ops",
    "config": {
      "webhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX",
      "events": ["down", "resolved"],
      "appliesTo": "all",
      "connectedBy": { "id": 12, "name": "Ada" },
      "connectedAt": "2026-10-01T09:00:00.000Z"
    },
    "enabled": true,
    "language": "en",
    "createdAt": "2026-10-01T09:00:00.000Z",
    "updatedAt": "2026-10-20T14:12:00.000Z"
  } }
Errors
  • 400An unknown type, or the config lacks what the type needs.
PUT/notification-channels/:id
Scope: adminPermission: resources:manage
Change a connection's name, config or enabled. A config you send replaces the old one — send the whole of it; what the server set (the signing secret, who connected it) is kept.
Path parameters
id
integerrequired
The connection's id.
Request
curl -X PUT "https://api.zharp.io/api/v1/notification-channels/41" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": false
  }'
Response
{ "message": "Connection updated", "data": { "id": 41, "enabled": false, … } }
Errors
  • 400The config lacks what the type needs.
  • 404No such connection in this workspace.
PUT/notification-channels/:id/monitors
Scope: adminPermission: resources:manage
Set exactly which monitors the connection alerts for, when its appliesTo isn't all. Monitors not in the list are unlinked.
Path parameters
id
integerrequired
The connection's id.
Body (JSON)
monitorIds
integer[]required
Monitors in this workspace; others are ignored.
Request
curl -X PUT "https://api.zharp.io/api/v1/notification-channels/41/monitors" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "monitorIds": [
      57,
      58
    ]
  }'
Response
{ "message": "Connection updated", "data": { "monitorIds": [57, 58] } }
Errors
  • 404No such connection in this workspace.
POST/notification-channels/:id/test
Scope: adminPermission: resources:manage
Send a test alert through the connection, now. A 200 means it was queued; the connection's deliveries show whether it arrived.
Path parameters
id
integerrequired
The connection's id.
Request
curl -X POST "https://api.zharp.io/api/v1/notification-channels/41/test" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "Test alert sent" }
Errors
  • 404No such connection in this workspace.
DELETE/notification-channels/:id
Scope: adminPermission: resources:manage
Delete a connection. Escalation steps that posted to it no longer do.
Path parameters
id
integerrequired
The connection's id.
Request
curl -X DELETE "https://api.zharp.io/api/v1/notification-channels/41" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "Connection deleted" }
Errors
  • 404No such connection in this workspace.

Escalation policies

A policy is who gets paged, in what order, when a monitor that uses it goes down — set a monitor's escalationPolicyId. Steps run in order; waitMinutes counts from when the incident opened, not from the step before. It stops as soon as someone acknowledges or resolves the incident. See Escalation & On-call.

Step typeWhat it doesUses
ESCALATEPages its targets. Several alert steps may share an order and run together.One of userId, onCallScheduleId (whoever is on call — the whole team if nobody is), groupId, channelId, or config.team: true; severityId
INSTRUCTIONSPosts instructions on the incident's timeline; a Markdown checklist can remind people while items stay open.config.instructions, followUpEnabled, followUpHours
TIME_RULEMatches when now is on one of the days, between two times.config.days, from, to, timezone, action
METADATA_RULEMatches a monitor field's value.config.field, values, action
ACTIONEnds the run by resolving the incident (or removing it).config.action: resolve or remove

A rule's action on a match: none stops the escalation, severity:ID pages at that severity from then on, anything else carries on. Rules, instructions and actions each need an order of their own.

GET/escalation/policies
Scope: readPermission: escalation:view
The workspace's policies, newest first, each with its steps and how many monitors use it.
Query parameters
keyword
string
Text in the name, ignoring case.
Request
curl "https://api.zharp.io/api/v1/escalation/policies" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "Escalation policies retrieved", "data": [ { "id": 5, "name": "Primary", "monitorCount": 4, "steps": [ … ], … } ] }
GET/escalation/policies/:id
Scope: readPermission: escalation:view
One policy and its steps.
Path parameters
id
integerrequired
The policy's id.
Request
curl "https://api.zharp.io/api/v1/escalation/policies/5" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "Escalation policy retrieved", "data": {
    "id": 5,
    "workspaceId": 3,
    "name": "Primary",
    "description": "Page on-call, then the backend team",
    "severityId": 2,
    "repeatCount": 1,
    "steps": [
      {
        "id": 31,
        "order": 0,
        "type": "ESCALATE",
        "waitMinutes": 0,
        "onCallScheduleId": 3,
        "userId": null,
        "channelId": null,
        "groupId": null,
        "severityId": null,
        "config": null,
        "onCallSchedule": { "id": 3, "name": "Primary on-call" },
        "user": null,
        "channel": null,
        "group": null
      },
      {
        "id": 32,
        "order": 1,
        "type": "ESCALATE",
        "waitMinutes": 15,
        "groupId": 2,
        "group": { "id": 2, "name": "Backend" },
        …
      }
    ],
    "createdAt": "…",
    "updatedAt": "…"
  } }
Errors
  • 404No such policy in this workspace.
POST/escalation/policies
Scope: adminPermission: escalation:manage
Create a policy with its steps.
Body (JSON)
name
stringrequired
1–100 characters.
description
string
Optional.
severityId
integer | null
How people are paged unless a step says otherwise — a severity in this workspace.
repeatCount
integer
Times to run it again if nobody acknowledges: 0–10, or -1 until someone does. Default 0.
steps
object[]required
At least one: order (from 0), type (default ESCALATE), waitMinutes, and what the type uses (above). Every person, schedule, group, connection and severity must be in this workspace.
Request
curl -X POST "https://api.zharp.io/api/v1/escalation/policies" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Primary",
    "severityId": 2,
    "repeatCount": 1,
    "steps": [
      {
        "order": 0,
        "waitMinutes": 0,
        "onCallScheduleId": 3
      },
      {
        "order": 1,
        "waitMinutes": 15,
        "groupId": 2
      },
      {
        "order": 2,
        "waitMinutes": 30,
        "config": {
          "team": true
        }
      }
    ]
  }'
Response
{ "message": "Escalation policy created", "data": { "id": 5, … } }
Errors
  • 400A field fails validation, an alert step with nobody to alert, a rule sharing a position, or a target from outside the workspace.
PUT/escalation/policies/:id
Scope: adminPermission: escalation:manage
Replace a policy — the same body as creating one; its steps are replaced (and get new ids). severityId and repeatCount left out keep their values.
Path parameters
id
integerrequired
The policy's id.
Request
curl -X PUT "https://api.zharp.io/api/v1/escalation/policies/5" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Primary",
    "steps": [
      {
        "order": 0,
        "waitMinutes": 0,
        "onCallScheduleId": 3
      }
    ]
  }'
Response
{ "message": "Escalation policy updated", "data": { "id": 5, … } }
Errors
  • 400As for creating one.
  • 404No such policy in this workspace.
DELETE/escalation/policies/:id
Scope: adminPermission: escalation:manage
Delete a policy. Monitors that used it go back to paging whoever is on call.
Path parameters
id
integerrequired
The policy's id.
Request
curl -X DELETE "https://api.zharp.io/api/v1/escalation/policies/5" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "Escalation policy deleted", "data": null }
Errors
  • 404No such policy in this workspace.

Severities

A severity is how people are paged: any of EMAIL, PUSH, SMS, CALL and CRITICAL (a push that sounds through silent mode). Policies and steps choose one; without one, each person's own notification settings apply.

GET/escalation/severities
Scope: readPermission: escalation:view
The workspace's severities, newest first, each with the policies that use it.
Query parameters
keyword
string
Text in the name, ignoring case.
Request
curl "https://api.zharp.io/api/v1/escalation/severities" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{
  "message": "Severities retrieved",
  "data": [
    { "id": 2, "workspaceId": 3, "name": "Critical", "description": "Wake people up", "channels": ["CALL", "CRITICAL"], "createdAt": "…", "updatedAt": "…",
      "escalationPolicies": [{ "id": 5, "name": "Primary", "severityId": 2, "repeatCount": 1, … }] }
  ]
}
POST/escalation/severities
Scope: adminPermission: escalation:manage
Create a severity.

GET, PUT and DELETE on /escalation/severities/:id read, change (any of the same fields) and delete one; policies that used a deleted severity fall back to people's own settings.

Body (JSON)
name
stringrequired
1–100 characters.
description
string
Optional.
channels
string[]required
At least one of EMAIL, PUSH, SMS, CALL, CRITICAL.
Request
curl -X POST "https://api.zharp.io/api/v1/escalation/severities" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Critical",
    "channels": [
      "PUSH",
      "CRITICAL",
      "EMAIL"
    ]
  }'
Response
{ "message": "Severity created", "data": { "id": 2, "name": "Critical", "channels": ["PUSH", "CRITICAL", "EMAIL"], … } }
Errors
  • 400A field fails validation, an unknown channel, or an unknown field.

On-call schedules

A schedule says who is on call when: rotations take turns, active windows limit the hours, and overrides put someone on call for a while. The primary schedule is paged for monitors with no escalation policy.

GET/on-call/schedules
Scope: readPermission: on-call:view
Every schedule, primary first, each with who is on call right now (onCallNow) and the overrides in force.
Request
curl "https://api.zharp.io/api/v1/on-call/schedules" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "On-call schedules retrieved.", "data": [ { "id": 3, "name": "Primary on-call", "isPrimary": true, "onCallNow": { "id": 12, "name": "Ada", "email": "ada@acme.io", "photoUrl": null }, "rotations": [ … ], "activeWindows": [ … ], "overrides": [] } ] }
GET/on-call/schedules/:id/who
Scope: readPermission: on-call:view
Who is on call on this schedule right now.

data is null when nobody is — outside its active windows, say.

Path parameters
id
integerrequired
The schedule's id.
Request
curl "https://api.zharp.io/api/v1/on-call/schedules/3/who" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "…", "data": { "id": 12, "name": "Ada", "email": "ada@acme.io", "photoUrl": null } }
Errors
  • 404No such schedule in this workspace.
GET/on-call/schedules/:id/export.ics
Scope: readPermission: on-call:view
The schedule's upcoming shifts as an iCalendar file, one event per shift — to subscribe to in a calendar.
Path parameters
id
integerrequired
The schedule's id.
Query parameters
days
integer
How far ahead, 1–365. Default 90.
Request
curl "https://api.zharp.io/api/v1/on-call/schedules/3/export.ics?days=30" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
BEGIN:VCALENDAR
X-WR-CALNAME:On-call: Primary on-call
BEGIN:VEVENT
SUMMARY:On call: Ada
DTSTART:20261026T090000Z
DTEND:20261102T090000Z
…
Errors
  • 404No such schedule in this workspace.
POST/on-call/schedules
Scope: adminPermission: on-call:manage
Create a schedule. The workspace's first becomes its primary.
Body (JSON)
name
stringrequired
1–100 characters.
description
string
Optional.
timezone
string
An IANA zone; rotations hand over at their start time's local time. Default UTC.
rotations
object[]required
At least one: name, type (DAILY, WEEKLY, MONTHLY), startTime (when the first shift starts), rotationLength (1–365 of the type's unit), and members: [{ "userId": 12, "order": 0 }] — active members of this workspace, taking turns in order.
activeWindows
object[]
Hours someone is on call: { "days": ["MON","TUE"], "startsAt": "09:00", "endsAt": "17:00" }. None means always.
applyFrom
string (ISO 8601)
When the rotations take effect, if later than now.
Request
curl -X POST "https://api.zharp.io/api/v1/on-call/schedules" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Primary on-call",
    "timezone": "Europe/London",
    "rotations": [
      {
        "name": "Weekly",
        "type": "WEEKLY",
        "startTime": "2026-10-26T09:00:00Z",
        "rotationLength": 1,
        "members": [
          {
            "userId": 12,
            "order": 0
          },
          {
            "userId": 14,
            "order": 1
          }
        ]
      }
    ]
  }'
Response
{ "message": "On-call schedule created.", "data": {
    "id": 3,
    "workspaceId": 3,
    "name": "Primary on-call",
    "description": null,
    "timezone": "Europe/London",
    "isPrimary": true,
    "activeWindows": [{ "id": 1, "days": ["MON", "TUE", "WED", "THU", "FRI"], "startsAt": "09:00", "endsAt": "17:00" }],
    "rotations": [
      {
        "id": 4,
        "name": "Weekly",
        "type": "WEEKLY",
        "startTime": "2026-10-26T09:00:00.000Z",
        "rotationLength": 1,
        "effectiveFrom": null,
        "effectiveUntil": null,
        "members": [
          { "id": 9, "userId": 12, "order": 0, "user": { "id": 12, "name": "Ada", "email": "ada@acme.io", "photoUrl": null, "timezone": "Europe/London" } },
          { "id": 10, "userId": 14, "order": 1, "user": { "id": 14, "name": "Ben", … } }
        ]
      }
    ],
    "createdAt": "…",
    "updatedAt": "…"
  } }
Errors
  • 400A field fails validation, an unknown time zone, or someone who isn't an active member.
PUT/on-call/schedules/:id
Scope: adminPermission: on-call:manage
Save a schedule — the same body as creating one. Its active windows are replaced; its rotations are replaced now, or from applyFrom when that's later, so the current shift isn't cut short. Overrides stay.
Path parameters
id
integerrequired
The schedule's id.
Request
curl -X PUT "https://api.zharp.io/api/v1/on-call/schedules/3" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Primary on-call",
    "applyFrom": "2026-11-02T09:00:00Z",
    "rotations": [
      {
        "name": "Weekly",
        "type": "WEEKLY",
        "startTime": "2026-11-02T09:00:00Z",
        "rotationLength": 1,
        "members": [
          {
            "userId": 14,
            "order": 0
          },
          {
            "userId": 12,
            "order": 1
          }
        ]
      }
    ]
  }'
Response
{ "message": "On-call schedule updated successfully.", "data": { "id": 3, … } }
Errors
  • 400As for creating one.
  • 404No such schedule in this workspace.
POST/on-call/schedules/:id/overrides
Scope: adminPermission: on-call:manage
Put someone on call between two times, ahead of the rotation — cover for a holiday, say. The latest override wins where two overlap.
Path parameters
id
integerrequired
The schedule's id.
Body (JSON)
userId
integerrequired
An active member of this workspace.
startTime
string (ISO 8601)required
When it starts.
endTime
string (ISO 8601)required
When it ends — after startTime.
Request
curl -X POST "https://api.zharp.io/api/v1/on-call/schedules/3/overrides" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "userId": 14,
    "startTime": "2026-12-24T00:00:00Z",
    "endTime": "2026-12-27T00:00:00Z"
  }'
Response
{ "message": "On-call override created.", "data": { "id": 12, "scheduleId": 3, "userId": 14, "startTime": "…", "endTime": "…", "user": { … } } }
Errors
  • 400Missing dates, an end before the start, or someone who isn't an active member.
  • 404No such schedule in this workspace.
POST/on-call/schedules/:id/primary
Scope: adminPermission: on-call:manage
Make this the workspace's primary schedule.
Path parameters
id
integerrequired
The schedule's id.
Request
curl -X POST "https://api.zharp.io/api/v1/on-call/schedules/3/primary" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "On-call schedule has been set as primary successfully.", "data": null }
Errors
  • 404No such schedule in this workspace.
DELETE/on-call/schedules/:id
Scope: adminPermission: on-call:manage
Delete a schedule, with its rotations and overrides. Escalation steps that paged it no longer do.
Path parameters
id
integerrequired
The schedule's id.
Request
curl -X DELETE "https://api.zharp.io/api/v1/on-call/schedules/3" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "On-call schedule deleted successfully.", "data": null }
Errors
  • 404No such schedule in this workspace.

Team groups

Named groups of members — Backend, Payments — that an escalation step can page together.

GET/team-groups
Scope: readPermission: team:view
The workspace's groups, by name, with how many people are in each.

Who is in a group: GET /workspaces/:id/members?groupId=2.

Request
curl "https://api.zharp.io/api/v1/team-groups" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "…", "data": [{ "id": 2, "workspaceId": 3, "name": "Backend", "description": null, "memberCount": 4, "createdAt": "…", "updatedAt": "…" }] }
POST/team-groups
Scope: adminPermission: team:manage_members
Create a group, optionally with people in it.
Body (JSON)
name
stringrequired
1–60 characters, unique in the workspace.
description
string
Up to 300 characters.
memberIds
integer[]
User ids of members of this workspace.
Request
curl -X POST "https://api.zharp.io/api/v1/team-groups" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Backend",
    "memberIds": [
      12,
      14
    ]
  }'
Response
{ "message": "Group created", "data": { "id": 2, "name": "Backend", "memberCount": 2, … } }
Errors
  • 400No name, or someone who isn't in the workspace.
  • 409A group with that name exists.
PUT/team-groups/members/:userId
Scope: adminPermission: team:manage_members
Set exactly which groups someone is in. An empty list takes them out of every group.
Path parameters
userId
integerrequired
A member of this workspace.
Body (JSON)
groupIds
integer[]required
Groups in this workspace, up to 50.
Request
curl -X PUT "https://api.zharp.io/api/v1/team-groups/members/14" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "groupIds": [
      2,
      6
    ]
  }'
Response
{ "message": "…", "data": [{ "id": 2, "name": "Backend" }, { "id": 6, "name": "Payments" }] }
Errors
  • 400A group from outside the workspace.
  • 404They aren't in this workspace.
PUT/team-groups/:id
Scope: adminPermission: team:manage_members
Rename a group.
Path parameters
id
integerrequired
The group's id.
Body (JSON)
name
stringrequired
1–60 characters, unique in the workspace.
Request
curl -X PUT "https://api.zharp.io/api/v1/team-groups/2" \
  -H "Authorization: Bearer $ZHARP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Platform"
  }'
Response
{ "message": "…", "data": { "id": 2, "name": "Platform", … } }
Errors
  • 404No such group in this workspace.
  • 409A group with that name exists.
DELETE/team-groups/:id
Scope: adminPermission: team:manage_members
Delete a group. Its people stay in the workspace; escalation steps that paged it no longer do.
Path parameters
id
integerrequired
The group's id.
Request
curl -X DELETE "https://api.zharp.io/api/v1/team-groups/2" \
  -H "Authorization: Bearer $ZHARP_API_KEY"
Response
{ "message": "…", "data": null }
Errors
  • 404No such group in this workspace.
info
Want events pushed to you instead?

A WEBHOOK connection sends every monitor and incident event to your URL as it happens, signed — often simpler than polling. See Webhooks.