API reference

Notifications and protocols

Your notifications, and an organization's notification protocols.
GET/v1/me/notifications/devices

The apps registered for push on your phones: one entry per app per phone (deviceId is the phone's install id), with appId, platform, and the name, model, osVersion and appVersion the app sent. No push tokens.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Errors

  • 403Notifications belong to people.
curl 'https://api.cactive.com.au/v1/me/notifications/devices' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  devices: {
    deviceId: string
    appId: string
    platform: "ios" | "android"
    name?: string
    model?: string
    osVersion?: string
    appVersion?: string
    createdAt?: number
    updatedAt?: number
  }[]
}
PUT/v1/me/notifications/devices/:deviceId

Registers or refreshes a mobile app's Expo push token on this phone (token, platform, appId, optional name, model, osVersion, appVersion). A mobile app's token ties the registration to its sign-in, so signing the app out removes it, and appId must be that app. People only, not assistants.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • deviceId

    Device id: an agent's (dev_…); under /v1/me/notifications a phone's install id; under /v1/me/sign-in-approvals a phone that approves sign-ins (apd_…); under /v1/me/vault the id a device made for its vault (22 base64url characters).

Request body

  • tokenstringrequired
  • platform"ios" | "android"required
  • appId"home" | "caity" | "tasks" | "brain" | "mail" | "drive" | "photos" | "git" | "cloud" | "maps" | "tenant" | "admin" | "account" | "authenticator" | "mirage" | "health" | "weather" | "marketing" | "food" | "vehicles"

    Default "caity".

  • nameany JSONrequired
  • modelany JSONrequired
  • osVersionany JSONrequired
  • appVersionany JSONrequired

Errors

  • 400Invalid device ID
  • 400appId does not match the signed-in app
  • 403Notifications belong to people.
  • 403Register devices from the mobile app.
curl -X PUT 'https://api.cactive.com.au/v1/me/notifications/devices/{deviceId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "token": "example",
    "platform": "ios",
    "name": {},
    "model": {},
    "osVersion": {},
    "appVersion": {}
  }'
Send it from this page with your session or a key.

Response 200

{
  ok: true
}
DELETE/v1/me/notifications/devices/:deviceId

Removes an app's push registration on this phone (appId, default caity). Signing the app out removes it too. People only, not assistants.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • deviceId

    Device id: an agent's (dev_…); under /v1/me/notifications a phone's install id; under /v1/me/sign-in-approvals a phone that approves sign-ins (apd_…); under /v1/me/vault the id a device made for its vault (22 base64url characters).

Query parameters

  • appId"home" | "caity" | "tasks" | "brain" | "mail" | "drive" | "photos" | "git" | "cloud" | "maps" | "tenant" | "admin" | "account" | "authenticator" | "mirage" | "health" | "weather" | "marketing" | "food" | "vehicles"

    Default "caity".

Errors

  • 403Notifications belong to people.
  • 403Register devices from the mobile app.
curl -X DELETE 'https://api.cactive.com.au/v1/me/notifications/devices/{deviceId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 204 with no body

GET/v1/me/notifications/live-activities

Your iPhone Live Activity registrations: per phone and app (maps or home), the push-to-start entry (kind: start) and each running flight activity (kind: activity, with orgId, hex, watchId or local), the APNs environment and, on the push-to-start entry, the flight activities the app last reported running (running). No tokens.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Errors

  • 403Notifications belong to people.
curl 'https://api.cactive.com.au/v1/me/notifications/live-activities' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  liveActivities: {
    kind: "start" | "activity"
    installId: string
    appId: string
    activityId: string
    environment: "production" | "development"
    orgId?: string
    hex?: string
    watchId?: string
    vehicleId?: string
    session?: string
    local?: boolean
    running?: string[]
    createdAt?: number
    updatedAt?: number
  }[]
}
PUT/v1/me/notifications/live-activities/start/:installId

Registers the Maps or Home app's push-to-start token on this iPhone (token in hex, appId, environment production or development, bundleId, and running: the hexes of the flight activities running in the app, sent again whenever they change), so a flight watch can start a Live Activity at takeoff. From the signed-in iPhone app only; tied to its sign-in.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • installId

    The phone's install id (the same for every app on it).

Request body

  • tokenstringrequired
  • appId"maps" | "home" | "vehicles"required
  • environment"production" | "development"required
  • bundleIdstringrequired
  • runningstring[]

    Up to 20 items. Each matches ^~?[0-9a-fA-F]{6}$.

  • carsboolean

Errors

  • 400appId does not match the signed-in app
  • 400Invalid install ID
  • 403Notifications belong to people.
  • 403Register devices from the mobile app.
  • 403Register Live Activities from the iPhone app.
curl -X PUT 'https://api.cactive.com.au/v1/me/notifications/live-activities/start/{installId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "token": "example",
    "appId": "maps",
    "environment": "production",
    "bundleId": "<bundleId>"
  }'
Send it from this page with your session or a key.

Response 200

{
  ok: true
}
DELETE/v1/me/notifications/live-activities/start/:installId

Removes the app's push-to-start token on this phone (appId). Signing the app out removes it too.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • installId

    The phone's install id (the same for every app on it).

Query parameters

  • appId"maps" | "home" | "vehicles"required

Errors

  • 400appId does not match the signed-in app
  • 400Invalid install ID
  • 403Notifications belong to people.
  • 403Register devices from the mobile app.
  • 403Register Live Activities from the iPhone app.
curl -X DELETE 'https://api.cactive.com.au/v1/me/notifications/live-activities/start/{installId}?appId=maps' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 204 with no body

PUT/v1/me/notifications/live-activities/:activityId

Registers a running flight Live Activity's update token (token, appId, environment, bundleId, installId, orgId, hex, and watchId or local: true for one started with Track live). Needs maps:read in the org; from the signed-in iPhone app only.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • activityId

    ActivityKit's id for a running Live Activity on the phone.

Errors

  • 400appId does not match the signed-in app
  • 400Invalid install ID
  • 400Invalid activity ID
  • 403Notifications belong to people.
  • 403Register devices from the mobile app.
  • 403Register Live Activities from the iPhone app.
  • 403Vehicles needs a key made by a person.
  • 404Vehicles isn't available here.
curl -X PUT 'https://api.cactive.com.au/v1/me/notifications/live-activities/{activityId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  ok: true
  current: boolean
}
| {
  ok: true
}
DELETE/v1/me/notifications/live-activities/:activityId

The activity ended or was dismissed on the phone: no more updates (installId, appId).

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • activityId

    ActivityKit's id for a running Live Activity on the phone.

Query parameters

  • installIdstringrequired
  • appId"maps" | "home" | "vehicles"required

Errors

  • 400appId does not match the signed-in app
  • 400Invalid install ID
  • 403Notifications belong to people.
  • 403Register devices from the mobile app.
  • 403Register Live Activities from the iPhone app.
curl -X DELETE 'https://api.cactive.com.au/v1/me/notifications/live-activities/{activityId}?installId=%3CinstallId%3E&appId=maps' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 204 with no body

GET/v1/me/notifications/settings

What reaches the person where, event by event, with the app each belongs to (the phone groups them by app: Home → Notifications). The same settings as ID → Notifications. textsOff: the event never texts or calls (Maps' events while Admin's "SMS for Maps alerts" is off), so the apps don't offer either.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Errors

  • 403Notifications belong to people.
curl 'https://api.cactive.com.au/v1/me/notifications/settings' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  events: {
    textsOff?: true
    urgent?: true
    type: "deployment.ready" | "deployment.failed" | "issue.sla_breached" | "maps.incident" | "maps.flight" | "assistant.briefing" | "caity.task_done" | "caity.task_failed" | "caity.task_waiting" | "caity.code_waiting" | "caity.code_failed" | "caity.code_done" | "account.new_sign_in" | "sharing.offered" | "sharing.changed" | "sharing.activity" | "domain.verified" | "domain.failed" | "secret.rotation_due" | "issue.assigned" | "issue.mentioned" | "calendar.invite_unanswered" | "calendar.meeting_soon" | "page.mentioned" | "mail.vip" | "maps.watch" | "maps.findmy" | "maps.eta" | "maps.findmy_sound" | "office.mention" | "video.captions" | "food.receipt" | "food.use_soon" | "vehicles.car_alert" | "vehicles.automation" | "vehicles.unlocked" | "vehicles.rain" | "vehicles.charge" | "vehicles.plug_in" | "vehicles.battery_low" | "vehicles.sentry" | "vehicles.moved" | "vehicles.drive" | "vehicles.speeding" | "vehicles.harsh" | "vehicles.geofence" | "vehicles.climate_safety" | "vehicles.tyre" | "vehicles.software" | "vehicles.command" | "vehicles.access" | "vehicles.connection" | "vehicles.maintenance" | "agent.job_done" | "agent.job_failed" | "pipeline.failed" | "pipeline.approval" | "security.git_key" | "security.git_clone" | "security.repo_access" | "ops.alarm" | "marketing.approval" | "marketing.journey" | "vehicles.spend" | "mirage.report" | "feedback.bug"
    app: "admin" | "authenticator" | "cloud" | "git" | "mail" | "maps" | "drive" | "photos" | "tenant" | "health" | "weather" | "marketing" | "food" | "vehicles" | "home" | "mirage" | "account" | "caity" | "brain" | "tasks"
    label: string
    description: string
    channels: ("email" | "sms" | "push" | "voice" | "inapp")[]
  }[]
  hasPhone: boolean
  callsAvailable: boolean
  quietHours: null | {
    start: string
    end: string
    days?: number[]
    allowUrgent: boolean
  }
  timeZone: string
  vipSenders: string[]
  meetingLeadMinutes: number
  calendarReminders: boolean
}
PUT/v1/me/notifications/settings/prefs

Quiet hours, the time zone, important senders and calendar reminders (the events' channels stay as they are); people only, from their own apps. Cleaned as ID cleans them (cleanPrefs).

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Request body

  • quietHoursobjector null
  • quietHours.startstringrequired

    Matches ^([01]\d|2[0-3]):[0-5]\d$.

  • quietHours.endstringrequired

    Matches ^([01]\d|2[0-3]):[0-5]\d$.

  • quietHours.allowUrgentbooleanrequired
  • quietHours.daysinteger[]

    Up to 7 items. Each 0–6.

  • timeZonestring

    1–64 characters.

  • vipSendersstring[]

    Up to 100 items. Each up to 254 characters, trimmed.

  • meetingLeadMinutesinteger

    0–120.

  • calendarRemindersboolean

Also checked: Unknown fields are rejected.

Errors

  • 403Notifications belong to people.
  • 403Register devices from the mobile app.
curl -X PUT 'https://api.cactive.com.au/v1/me/notifications/settings/prefs' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "quietHours": {
      "start": "example",
      "end": "example",
      "allowUrgent": true
    },
    "timeZone": "example",
    "vipSenders": [
      "example"
    ]
  }'
Send it from this page with your session or a key.

Response 200

{
  quietHours: null | {
    start: string
    end: string
    days?: number[]
    allowUrgent: boolean
  }
  timeZone: string
  vipSenders: string[]
  meetingLeadMinutes: number
  calendarReminders: boolean
}
PUT/v1/me/notifications/settings/events

Some events' channels (the rest stay as they are); people only, from their own apps.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Request body

  • eventsobjectrequired

    Keys up to 64 characters. Values: ("inapp" | "push" | "email" | "sms" | "voice")[] (up to 5 items).

Errors

  • 403Notifications belong to people.
  • 403Register devices from the mobile app.
curl -X PUT 'https://api.cactive.com.au/v1/me/notifications/settings/events' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "events": {}
  }'
Send it from this page with your session or a key.

Response 200

{
  events: {
    [key: string]: ("email" | "sms" | "push" | "voice" | "inapp")[]
  }
}
GET/v1/me/notifications

Your notifications, newest first (cursor, limit): title, body, link, read, and whether one waits for an acknowledgement (escalating alerts). app: only that mobile app's notices (home: every app's). People only.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Query parameters

  • cursorstring

    Up to 2,000 characters.

  • limitinteger

    1–100. Coerced from a string.

  • app"home" | "caity" | "tasks" | "brain" | "mail" | "drive" | "photos" | "git" | "cloud" | "maps" | "tenant" | "admin" | "account" | "authenticator" | "mirage" | "health" | "weather" | "marketing" | "food" | "vehicles"

Errors

  • 403Notifications belong to people.
curl 'https://api.cactive.com.au/v1/me/notifications' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  notices: {
    noticeId: string
    orgId?: string
    event: string
    title: string
    body?: string
    url?: string
    read?: boolean
    requireAck?: boolean
    ackedAt?: number
    createdAt?: number
  }[]
  cursor: null | string
}
POST/v1/me/notifications/read

Marks notifications read (noticeIds, up to 100).

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Request body

  • noticeIdsstring[]required

    1–100 items. Each up to 64 characters.

Errors

  • 403Notifications belong to people.
curl -X POST 'https://api.cactive.com.au/v1/me/notifications/read' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "noticeIds": [
      "example"
    ]
  }'
Send it from this page with your session or a key.

Response 200

{
  ok: true
}
POST/v1/me/notifications/:noticeId/ack

Acknowledges a notification: its escalation (later texts or calls) stops. acked: false when it already was.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • noticeId

    Notification id (nte_…).

Errors

  • 403Notifications belong to people.
curl -X POST 'https://api.cactive.com.au/v1/me/notifications/{noticeId}/ack' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  acked: boolean
}
GET/v1/orgs/:orgId/notify/protocols/templates

Ready-made notification protocols (production on-call, meeting guard, invitation chaser, VIP mail, service desk SLA, agent jobs).

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

curl 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols/templates' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  templates: {
    id: string
    name: string
    description: string
    rules: {
      events: ("deployment.ready" | "deployment.failed" | "issue.sla_breached" | "maps.incident" | "maps.flight" | "assistant.briefing" | "caity.task_done" | "caity.task_failed" | "caity.task_waiting" | "caity.code_waiting" | "caity.code_failed" | "caity.code_done" | "account.new_sign_in" | "sharing.offered" | "sharing.changed" | "sharing.activity" | "domain.verified" | "domain.failed" | "secret.rotation_due" | "issue.assigned" | "issue.mentioned" | "calendar.invite_unanswered" | "calendar.meeting_soon" | "page.mentioned" | "mail.vip" | "maps.watch" | "maps.findmy" | "maps.eta" | "maps.findmy_sound" | "office.mention" | "video.captions" | "food.receipt" | "food.use_soon" | "vehicles.car_alert" | "vehicles.automation" | "vehicles.unlocked" | "vehicles.rain" | "vehicles.charge" | "vehicles.plug_in" | "vehicles.battery_low" | "vehicles.sentry" | "vehicles.moved" | "vehicles.drive" | "vehicles.speeding" | "vehicles.harsh" | "vehicles.geofence" | "vehicles.climate_safety" | "vehicles.tyre" | "vehicles.software" | "vehicles.command" | "vehicles.access" | "vehicles.connection" | "vehicles.maintenance" | "agent.job_done" | "agent.job_failed" | "pipeline.failed" | "pipeline.approval" | "security.git_key" | "security.git_clone" | "security.repo_access" | "ops.alarm" | "marketing.approval" | "marketing.journey" | "vehicles.spend" | "mirage.report" | "feedback.bug")[]
      match?: {
        [key: string]: string[]
      }
      steps: {
        afterMinutes: number
        channels: object
      }[]
      beforeEvent?: boolean
      roles?: ("owner" | "admin" | "developer" | "viewer")[]
      userIds?: string[]
      overrideQuietHours?: boolean
    }[]
  }[]
}
GET/v1/orgs/:orgId/notify/protocols

The organization's notification protocols with their rules and what each is attached to.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

curl 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  protocols: {
    protocolId: string
    orgId: string
    name: string
    description?: string
    enabled: boolean
    rules: {
      events: ("deployment.ready" | "deployment.failed" | "issue.sla_breached" | "maps.incident" | "maps.flight" | "assistant.briefing" | "caity.task_done" | "caity.task_failed" | "caity.task_waiting" | "caity.code_waiting" | "caity.code_failed" | "caity.code_done" | "account.new_sign_in" | "sharing.offered" | "sharing.changed" | "sharing.activity" | "domain.verified" | "domain.failed" | "secret.rotation_due" | "issue.assigned" | "issue.mentioned" | "calendar.invite_unanswered" | "calendar.meeting_soon" | "page.mentioned" | "mail.vip" | "maps.watch" | "maps.findmy" | "maps.eta" | "maps.findmy_sound" | "office.mention" | "video.captions" | "food.receipt" | "food.use_soon" | "vehicles.car_alert" | "vehicles.automation" | "vehicles.unlocked" | "vehicles.rain" | "vehicles.charge" | "vehicles.plug_in" | "vehicles.battery_low" | "vehicles.sentry" | "vehicles.moved" | "vehicles.drive" | "vehicles.speeding" | "vehicles.harsh" | "vehicles.geofence" | "vehicles.climate_safety" | "vehicles.tyre" | "vehicles.software" | "vehicles.command" | "vehicles.access" | "vehicles.connection" | "vehicles.maintenance" | "agent.job_done" | "agent.job_failed" | "pipeline.failed" | "pipeline.approval" | "security.git_key" | "security.git_clone" | "security.repo_access" | "ops.alarm" | "marketing.approval" | "marketing.journey" | "vehicles.spend" | "mirage.report" | "feedback.bug")[]
      match?: {
        [key: string]: string[]
      }
      steps: {
        afterMinutes: number
        channels: object
      }[]
      beforeEvent?: boolean
      roles?: ("owner" | "admin" | "developer" | "viewer")[]
      userIds?: string[]
      overrideQuietHours?: boolean
    }[]
    createdBy: string
    updatedAt?: number
    attachments: {
      resourceType: "org" | "project" | "agent" | "calendar" | "mailbox" | "space" | "vehicle"
      resourceId: string
      resourceLabel?: string
    }[]
  }[]
}
POST/v1/orgs/:orgId/notify/protocols

Creates a protocol from { template } or { name, description?, enabled?, rules } (rules: events, optional match on event attributes, steps with minutes and channels, roles, overrideQuietHours, beforeEvent). Owners and admins.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 201

{
  protocol: {
    attachments: []
    protocolId: string
    orgId: string
    name: string
    description?: string
    enabled: boolean
    rules: {
      events: ("deployment.ready" | "deployment.failed" | "issue.sla_breached" | "maps.incident" | "maps.flight" | "assistant.briefing" | "caity.task_done" | "caity.task_failed" | "caity.task_waiting" | "caity.code_waiting" | "caity.code_failed" | "caity.code_done" | "account.new_sign_in" | "sharing.offered" | "sharing.changed" | "sharing.activity" | "domain.verified" | "domain.failed" | "secret.rotation_due" | "issue.assigned" | "issue.mentioned" | "calendar.invite_unanswered" | "calendar.meeting_soon" | "page.mentioned" | "mail.vip" | "maps.watch" | "maps.findmy" | "maps.eta" | "maps.findmy_sound" | "office.mention" | "video.captions" | "food.receipt" | "food.use_soon" | "vehicles.car_alert" | "vehicles.automation" | "vehicles.unlocked" | "vehicles.rain" | "vehicles.charge" | "vehicles.plug_in" | "vehicles.battery_low" | "vehicles.sentry" | "vehicles.moved" | "vehicles.drive" | "vehicles.speeding" | "vehicles.harsh" | "vehicles.geofence" | "vehicles.climate_safety" | "vehicles.tyre" | "vehicles.software" | "vehicles.command" | "vehicles.access" | "vehicles.connection" | "vehicles.maintenance" | "agent.job_done" | "agent.job_failed" | "pipeline.failed" | "pipeline.approval" | "security.git_key" | "security.git_clone" | "security.repo_access" | "ops.alarm" | "marketing.approval" | "marketing.journey" | "vehicles.spend" | "mirage.report" | "feedback.bug")[]
      match?: {
        [key: string]: string[]
      }
      steps: {
        afterMinutes: number
        channels: ("email" | "sms" | "push" | "voice" | "inapp")[]
      }[]
      beforeEvent?: boolean
      roles?: ("owner" | "admin" | "developer" | "viewer")[]
      userIds?: string[]
      overrideQuietHours?: boolean
    }[]
    createdBy: string
    updatedAt?: number
  }
}
GET/v1/orgs/:orgId/notify/protocols/:protocolId

One protocol with its attachments.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • protocolId

    Notification protocol id (npr_…).

curl 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols/{protocolId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  protocol: {
    protocolId: string
    orgId: string
    name: string
    description?: string
    enabled: boolean
    rules: {
      events: ("deployment.ready" | "deployment.failed" | "issue.sla_breached" | "maps.incident" | "maps.flight" | "assistant.briefing" | "caity.task_done" | "caity.task_failed" | "caity.task_waiting" | "caity.code_waiting" | "caity.code_failed" | "caity.code_done" | "account.new_sign_in" | "sharing.offered" | "sharing.changed" | "sharing.activity" | "domain.verified" | "domain.failed" | "secret.rotation_due" | "issue.assigned" | "issue.mentioned" | "calendar.invite_unanswered" | "calendar.meeting_soon" | "page.mentioned" | "mail.vip" | "maps.watch" | "maps.findmy" | "maps.eta" | "maps.findmy_sound" | "office.mention" | "video.captions" | "food.receipt" | "food.use_soon" | "vehicles.car_alert" | "vehicles.automation" | "vehicles.unlocked" | "vehicles.rain" | "vehicles.charge" | "vehicles.plug_in" | "vehicles.battery_low" | "vehicles.sentry" | "vehicles.moved" | "vehicles.drive" | "vehicles.speeding" | "vehicles.harsh" | "vehicles.geofence" | "vehicles.climate_safety" | "vehicles.tyre" | "vehicles.software" | "vehicles.command" | "vehicles.access" | "vehicles.connection" | "vehicles.maintenance" | "agent.job_done" | "agent.job_failed" | "pipeline.failed" | "pipeline.approval" | "security.git_key" | "security.git_clone" | "security.repo_access" | "ops.alarm" | "marketing.approval" | "marketing.journey" | "vehicles.spend" | "mirage.report" | "feedback.bug")[]
      match?: {
        [key: string]: string[]
      }
      steps: {
        afterMinutes: number
        channels: ("email" | "sms" | "push" | "voice" | "inapp")[]
      }[]
      beforeEvent?: boolean
      roles?: ("owner" | "admin" | "developer" | "viewer")[]
      userIds?: string[]
      overrideQuietHours?: boolean
    }[]
    createdBy: string
    updatedAt?: number
    attachments: {
      resourceType: "org" | "project" | "agent" | "calendar" | "mailbox" | "space" | "vehicle"
      resourceId: string
      resourceLabel?: string
    }[]
  }
}
PUT/v1/orgs/:orgId/notify/protocols/:protocolId

Replaces a protocol's name, description, on/off and rules. Owners and admins.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • protocolId

    Notification protocol id (npr_…).

Request body

  • namestringrequired

    1–80 characters. Trimmed.

  • descriptionstring

    Up to 300 characters.

  • enabledboolean
  • rulesobject[]required

    1–20 items.

  • rules[].events[]required

    At least 1 item.

  • rules[].matchobject

    Values: string[] (up to 20 items, each up to 200 characters).

  • rules[].stepsobject[]required

    1–6 items.

  • rules[].steps[].afterMinutesintegerrequired

    0–10080.

  • rules[].steps[].channels("inapp" | "push" | "email" | "sms" | "voice")[]required

    At least 1 item.

  • rules[].beforeEventboolean
  • rules[].roles("owner" | "admin" | "developer" | "viewer")[]
  • rules[].userIdsstring[]

    Up to 50 items. Each up to 64 characters.

  • rules[].overrideQuietHoursboolean
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols/{protocolId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Example",
    "rules": [
      {
        "events": [],
        "steps": [
          {
            "afterMinutes": 1,
            "channels": [
              "inapp"
            ]
          }
        ]
      }
    ]
  }'
Send it from this page with your session or a key.

Response 200

{
  protocol: {
    protocolId: string
    orgId: string
    name: string
    description?: string
    enabled: boolean
    rules: {
      events: ("deployment.ready" | "deployment.failed" | "issue.sla_breached" | "maps.incident" | "maps.flight" | "assistant.briefing" | "caity.task_done" | "caity.task_failed" | "caity.task_waiting" | "caity.code_waiting" | "caity.code_failed" | "caity.code_done" | "account.new_sign_in" | "sharing.offered" | "sharing.changed" | "sharing.activity" | "domain.verified" | "domain.failed" | "secret.rotation_due" | "issue.assigned" | "issue.mentioned" | "calendar.invite_unanswered" | "calendar.meeting_soon" | "page.mentioned" | "mail.vip" | "maps.watch" | "maps.findmy" | "maps.eta" | "maps.findmy_sound" | "office.mention" | "video.captions" | "food.receipt" | "food.use_soon" | "vehicles.car_alert" | "vehicles.automation" | "vehicles.unlocked" | "vehicles.rain" | "vehicles.charge" | "vehicles.plug_in" | "vehicles.battery_low" | "vehicles.sentry" | "vehicles.moved" | "vehicles.drive" | "vehicles.speeding" | "vehicles.harsh" | "vehicles.geofence" | "vehicles.climate_safety" | "vehicles.tyre" | "vehicles.software" | "vehicles.command" | "vehicles.access" | "vehicles.connection" | "vehicles.maintenance" | "agent.job_done" | "agent.job_failed" | "pipeline.failed" | "pipeline.approval" | "security.git_key" | "security.git_clone" | "security.repo_access" | "ops.alarm" | "marketing.approval" | "marketing.journey" | "vehicles.spend" | "mirage.report" | "feedback.bug")[]
      match?: {
        [key: string]: string[]
      }
      steps: {
        afterMinutes: number
        channels: ("email" | "sms" | "push" | "voice" | "inapp")[]
      }[]
      beforeEvent?: boolean
      roles?: ("owner" | "admin" | "developer" | "viewer")[]
      userIds?: string[]
      overrideQuietHours?: boolean
    }[]
    createdBy: string
    updatedAt?: number
    attachments: {
      resourceType: "org" | "project" | "agent" | "calendar" | "mailbox" | "space" | "vehicle"
      resourceId: string
      resourceLabel?: string
    }[]
  }
}
DELETE/v1/orgs/:orgId/notify/protocols/:protocolId

Deletes a protocol and its attachments. Owners and admins.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • protocolId

    Notification protocol id (npr_…).

curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols/{protocolId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 204 with no body

POST/v1/orgs/:orgId/notify/protocols/:protocolId/attachments

Attaches the protocol to { type, id, label? }: the whole organization (org) or a Serverless App Service, Issues space, calendar, mailbox or agent. Events about it then follow the protocol. Owners and admins.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • protocolId

    Notification protocol id (npr_…).

Request body

  • type"org" | "project" | "space" | "calendar" | "mailbox" | "agent" | "vehicle"required
  • idstringrequired

    1–128 characters.

  • labelstring

    Up to 120 characters.

curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols/{protocolId}/attachments' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "org",
    "id": "<id>"
  }'
Send it from this page with your session or a key.

Response 201

{
  ok: true
}
DELETE/v1/orgs/:orgId/notify/protocols/:protocolId/attachments/:resourceType/:targetId

Detaches the protocol from that resource. Owners and admins.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • protocolId

    Notification protocol id (npr_…).

  • resourceType

    What the protocol is attached to: org, project, space, calendar, mailbox or agent; for a group's access, project or repository.

  • targetId

    Id of what it's attached to (the org's own id for org, else prj_…, spc_…, cal_…, mbx_…, dev_…).

Errors

  • 400Unknown resource type.
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols/{protocolId}/attachments/{resourceType}/{targetId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 204 with no body