API reference
Notifications and protocols
/ v1/ me/ notifications/ devicesThe 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.
Errors
403Notifications belong to people.
curl 'https://api.cactive.com.au/v1/me/notifications/devices' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
devices: {
deviceId: string
appId: string
platform: "ios" | "android"
name?: string
model?: string
osVersion?: string
appVersion?: string
createdAt?: number
updatedAt?: number
}[]
}/ v1/ me/ notifications/ devices/ :deviceIdRegisters 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.
Path parameters
deviceIdDevice id: an agent's (
dev_…); under/v1/me/notificationsa phone's install id; under/v1/me/sign-in-approvalsa phone that approves sign-ins (apd_…); under/v1/me/vaultthe id a device made for its vault (22 base64url characters).
Request body
tokenstringrequiredplatform"ios" | "android"requiredappId"home" | "caity" | "tasks" | "brain" | "mail" | "drive" | "photos" | "git" | "cloud" | "maps" | "tenant" | "admin" | "account" | "authenticator" | "mirage" | "health" | "weather" | "marketing" | "food" | "vehicles"Default
"caity".nameany JSONrequiredmodelany JSONrequiredosVersionany JSONrequiredappVersionany JSONrequired
Errors
400Invalid device ID400appId does not match the signed-in app403Notifications 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": {}
}'Response 200
{
ok: true
}/ v1/ me/ notifications/ devices/ :deviceIdRemoves 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.
Path parameters
deviceIdDevice id: an agent's (
dev_…); under/v1/me/notificationsa phone's install id; under/v1/me/sign-in-approvalsa phone that approves sign-ins (apd_…); under/v1/me/vaultthe 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"Response 204 with no body
/ v1/ me/ notifications/ live-activitiesYour 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.
Errors
403Notifications belong to people.
curl 'https://api.cactive.com.au/v1/me/notifications/live-activities' \
-H "Authorization: Bearer $CACTIVE_TOKEN"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
}[]
}/ v1/ me/ notifications/ live-activities/ start/ :installIdRegisters 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.
Path parameters
installIdThe phone's install id (the same for every app on it).
Request body
tokenstringrequiredappId"maps" | "home" | "vehicles"requiredenvironment"production" | "development"requiredbundleIdstringrequiredrunningstring[]Up to 20 items. Each matches
^~?[0-9a-fA-F]{6}$.carsboolean
Errors
400appId does not match the signed-in app400Invalid install ID403Notifications 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>"
}'Response 200
{
ok: true
}/ v1/ me/ notifications/ live-activities/ start/ :installIdRemoves 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.
Path parameters
installIdThe 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 app400Invalid install ID403Notifications 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"Response 204 with no body
/ v1/ me/ notifications/ live-activities/ :activityIdRegisters 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.
- Scope
- maps:read
Path parameters
activityIdActivityKit's id for a running Live Activity on the phone.
Errors
400appId does not match the signed-in app400Invalid install ID400Invalid activity ID403Notifications 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"Response 200
{
ok: true
current: boolean
}
| {
ok: true
}/ v1/ me/ notifications/ live-activities/ :activityIdThe 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.
Path parameters
activityIdActivityKit's id for a running Live Activity on the phone.
Query parameters
installIdstringrequiredappId"maps" | "home" | "vehicles"required
Errors
400appId does not match the signed-in app400Invalid install ID403Notifications 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"Response 204 with no body
/ v1/ me/ notifications/ settingsWhat 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.
Errors
403Notifications belong to people.
curl 'https://api.cactive.com.au/v1/me/notifications/settings' \
-H "Authorization: Bearer $CACTIVE_TOKEN"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
}/ v1/ me/ notifications/ settings/ prefsQuiet 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.
Request body
quietHoursobjector nullquietHours.startstringrequiredMatches
^([01]\d|2[0-3]):[0-5]\d$.quietHours.endstringrequiredMatches
^([01]\d|2[0-3]):[0-5]\d$.quietHours.allowUrgentbooleanrequiredquietHours.daysinteger[]Up to 7 items. Each 0–6.
timeZonestring1–64 characters.
vipSendersstring[]Up to 100 items. Each up to 254 characters, trimmed.
meetingLeadMinutesinteger0–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"
]
}'Response 200
{
quietHours: null | {
start: string
end: string
days?: number[]
allowUrgent: boolean
}
timeZone: string
vipSenders: string[]
meetingLeadMinutes: number
calendarReminders: boolean
}/ v1/ me/ notifications/ settings/ eventsSome 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.
Request body
eventsobjectrequiredKeys 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": {}
}'Response 200
{
events: {
[key: string]: ("email" | "sms" | "push" | "voice" | "inapp")[]
}
}/ v1/ me/ notificationsYour 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.
Query parameters
cursorstringUp to 2,000 characters.
limitinteger1–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"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
}/ v1/ me/ notifications/ readMarks notifications read (noticeIds, up to 100).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Request body
noticeIdsstring[]required1–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"
]
}'Response 200
{
ok: true
}/ v1/ me/ notifications/ :noticeId/ ackAcknowledges 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.
Path parameters
noticeIdNotification 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"Response 200
{
acked: boolean
}/ v1/ orgs/ :orgId/ notify/ protocols/ templatesReady-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.
Path parameters
orgIdOrganization id (
org_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols/templates' \
-H "Authorization: Bearer $CACTIVE_TOKEN"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
}[]
}[]
}/ v1/ orgs/ :orgId/ notify/ protocolsThe 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.
- Scope
- org:read
Path parameters
orgIdOrganization id (
org_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols' \
-H "Authorization: Bearer $CACTIVE_TOKEN"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
}[]
}[]
}/ v1/ orgs/ :orgId/ notify/ protocolsCreates 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.
- Scope
- org:write
Path parameters
orgIdOrganization id (
org_…).
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols' \
-H "Authorization: Bearer $CACTIVE_TOKEN"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
}
}/ v1/ orgs/ :orgId/ notify/ protocols/ :protocolIdOne protocol with its attachments.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- org:read
Path parameters
orgIdOrganization id (
org_…).protocolIdNotification protocol id (
npr_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols/{protocolId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"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
}[]
}
}/ v1/ orgs/ :orgId/ notify/ protocols/ :protocolIdReplaces a protocol's name, description, on/off and rules. Owners and admins.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- org:write
Path parameters
orgIdOrganization id (
org_…).protocolIdNotification protocol id (
npr_…).
Request body
namestringrequired1–80 characters. Trimmed.
descriptionstringUp to 300 characters.
enabledbooleanrulesobject[]required1–20 items.
rules[].events[]requiredAt least 1 item.
rules[].matchobjectValues: string[] (up to 20 items, each up to 200 characters).
rules[].stepsobject[]required1–6 items.
rules[].steps[].afterMinutesintegerrequired0–10080.
rules[].steps[].channels("inapp" | "push" | "email" | "sms" | "voice")[]requiredAt least 1 item.
rules[].beforeEventbooleanrules[].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"
]
}
]
}
]
}'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
}[]
}
}/ v1/ orgs/ :orgId/ notify/ protocols/ :protocolIdDeletes a protocol and its attachments. Owners and admins.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- org:write
Path parameters
orgIdOrganization id (
org_…).protocolIdNotification protocol id (
npr_…).
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/notify/protocols/{protocolId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ notify/ protocols/ :protocolId/ attachmentsAttaches 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.
- Scope
- org:write
Path parameters
orgIdOrganization id (
org_…).protocolIdNotification protocol id (
npr_…).
Request body
type"org" | "project" | "space" | "calendar" | "mailbox" | "agent" | "vehicle"requiredidstringrequired1–128 characters.
labelstringUp 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>"
}'Response 201
{
ok: true
}/ v1/ orgs/ :orgId/ notify/ protocols/ :protocolId/ attachments/ :resourceType/ :targetIdDetaches the protocol from that resource. Owners and admins.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- org:write
Path parameters
orgIdOrganization id (
org_…).protocolIdNotification protocol id (
npr_…).resourceTypeWhat the protocol is attached to:
org,project,space,calendar,mailboxoragent; for a group's access,projectorrepository.targetIdId of what it's attached to (the org's own id for
org, elseprj_…,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"Response 204 with no body