Skip to documentation
Notify Docs

Agent API reference

Route inventory for scoped HTTP clients, with the canonical generated schemas. The CLI and MCP tools use this API; human consent is described in Access and consent.

HTTP route inventory

Agent API routes
RoutePurpose
GET /api/agent/auth/statusDescribe the calling token. Any scope.
POST /api/agent/auth/revokeRevoke the calling token. Any scope.
GET /api/agent/tokensList the account's API tokens (never secrets). tokens:manage.
DELETE /api/agent/tokens/:idRevoke another token of the same account. tokens:manage.
GET /api/agent/devicesList registered devices. devices:read.
DELETE /api/agent/devices/:idRemove a device; it registers again when Notify next opens on it. devices:write.
GET /api/agent/servicesList webhook services (without webhook URLs). services:read.
POST /api/agent/servicesCreate a webhook service; the webhook URL is returned once. services:write.
GET /api/agent/services/:idGet a webhook service. services:read.
PATCH /api/agent/services/:idUpdate a webhook service's title, avatar, or tap URL. services:write.
DELETE /api/agent/services/:idDelete a webhook service. services:write.
POST /api/agent/services/:id/shareShare a webhook service with your family, or unshare it. services:write.
POST /api/agent/services/:id/rotateRotate the webhook token; the new URL is returned once. services:write.
GET /api/agent/webhooksList saved reply webhooks with masked header values. services:read.
POST /api/agent/webhooksCreate a reply webhook; the signing secret is returned once. services:write.
GET /api/agent/webhooks/:idRead a reply webhook and its last 50 deliveries. services:read.
PATCH /api/agent/webhooks/:idUpdate a reply webhook; omit headers to preserve their saved values. services:write.
DELETE /api/agent/webhooks/:idDelete a reply webhook. services:write.
POST /api/agent/webhooks/:id/testQueue a signed sample interaction.answered event (202); inspect logs for completion. services:write.
POST /api/agent/webhooks/:id/rotate-secretRotate the signing secret; its replacement is returned once. services:write.
GET /api/agent/eventsRecent webhook deliveries. events:read.
GET /api/agent/activity-feedMerged account activity history, newest first (20 per page). events:read.
POST /api/agent/notificationsSend a one-shot push. notifications:send.
POST /api/agent/notifications/:id/withdrawWithdraw an agent notification from the account's devices. notifications:send.
GET /api/agent/interactionsList the account's pending prompts from every source. interactions:read.
POST /api/agent/interactionsAsk a question (approval, yes/no, or reply). interactions:create, notifications:send.
GET /api/agent/interactions/:idGet a prompt created by this token. interactions:read.
GET /api/agent/interactions/:id/waitLong-poll a prompt created by this token until it is answered. interactions:read.
POST /api/agent/interactions/:id/cancelCancel a pending prompt created by this token. interactions:create.
GET /api/agent/activitiesList Live Activities started by this token. activities:read.
POST /api/agent/activitiesStart a Live Activity. activities:write.
GET /api/agent/activities/:identifierGet a Live Activity by ID or key. activities:read.
PATCH /api/agent/activities/:identifierUpdate a Live Activity. activities:write.
POST /api/agent/activities/:identifier/endEnd a Live Activity. activities:write.
GET /api/agent/appsList web apps. apps:read.
POST /api/agent/appsRegister a web app (an existing URL is updated). apps:write.
GET /api/agent/apps/:idGet a web app. apps:read.
PATCH /api/agent/apps/:idUpdate a web app's name, URL, icon, or project. apps:write.
DELETE /api/agent/apps/:idRemove a web app. apps:write.
POST /api/agent/apps/:id/revokeRevoke sign-in consent; the owner approves again on the next sign-in request. apps:write.
POST /api/agent/apps/:id/shareMove an app into a team, or (teamId null) back to your own apps. apps:write.
GET /api/agent/teamsList the teams you belong to. teams:read.
POST /api/agent/teamsCreate a family with kind: family; you become its owner. Omitting kind or using kind: team returns 403 because Teams is TBD. teams:write.
GET /api/agent/teams/:idA team and its members. teams:read.
PATCH /api/agent/teams/:idUpdate a team (name: admin; auto-join and retention: owner). teams:write.
DELETE /api/agent/teams/:idDelete a team (owner); its apps return to the members who added them. teams:write.
POST /api/agent/teams/:id/leaveLeave a team (the owner must transfer ownership first). teams:write.
PATCH /api/agent/teams/:id/members/:userIdChange a member's role; owner transfers ownership (owner only). teams:write.
DELETE /api/agent/teams/:id/members/:userIdRemove a member (admin or owner); the owner cannot be removed. teams:write.
GET /api/agent/teams/:id/invitesList invites (admin or owner). teams:read.
POST /api/agent/teams/:id/invitesCreate a 7-day join link (admin or owner). teams:write.
DELETE /api/agent/teams/:id/invites/:inviteIdRevoke an invite. teams:write.
GET /api/agent/teams/:id/appsThe team's shared apps. teams:read, apps:read.
GET /api/agent/teams/:id/groupsThe team's device groups. teams:read.
POST /api/agent/teams/:id/groupsCreate a device group (admin or owner). teams:write.
GET /api/agent/teams/:id/groups/:groupIdA device group. teams:read.
PATCH /api/agent/teams/:id/groups/:groupIdUpdate a device group (admin or owner). teams:write.
DELETE /api/agent/teams/:id/groups/:groupIdDelete a device group (admin or owner). teams:write.
GET /api/agent/teams/:id/devicesDevices belonging to team members (admin or owner). teams:read.
POST /api/agent/teams/:id/domainRequest a DNS TXT challenge for an email domain (owner). teams:write.
DELETE /api/agent/teams/:id/domainClear the pending or verified domain (owner). teams:write.
POST /api/agent/teams/:id/domain/verifyVerify the pending domain's DNS TXT record (owner). teams:write.
GET /api/agent/teams/:id/auditAudit log (admin or owner); members receive 403. teams:read.
GET /api/agent/teams/:id/oncallThe team's on-call groups with current and upcoming shifts. oncall:read.
POST /api/agent/teams/:id/oncallCreate an on-call group (admin or owner). oncall:write.
GET /api/agent/teams/:id/pagesThe team's pages, newest first. oncall:read.
GET /api/agent/oncall/meYour upcoming shifts and the open pages that notified you. oncall:read.
GET /api/agent/oncall/:groupIdAn on-call group. oncall:read.
PATCH /api/agent/oncall/:groupIdEdit a group's name, rotation, or escalation (admin or owner). oncall:write.
DELETE /api/agent/oncall/:groupIdDelete an on-call group (admin or owner). oncall:write.
POST /api/agent/oncall/:groupId/overridesPut someone on call for a window (admins: anyone; members: themselves). oncall:write.
DELETE /api/agent/oncall/:groupId/overrides/:overrideIdRemove an override. oncall:write.
POST /api/agent/oncall/:groupId/pagesPage the group: whoever is on call first, then escalation. oncall:write.
GET /api/agent/pages/:idA page. oncall:read.
GET /api/agent/connectorsList tunnel connectors. connectors:read.
POST /api/agent/connectorsRegister a tunnel connector; the callback HMAC secret is returned once. connectors:write.
GET /api/agent/connectors/:idA tunnel connector. connectors:read.
PATCH /api/agent/connectors/:idUpdate a connector's name, routes, or on-call group. connectors:write.
DELETE /api/agent/connectors/:idRemove a tunnel connector. connectors:write.
POST /api/agent/connectors/:id/heartbeatMark a connector online and refresh its last-seen time. connectors:write.
POST /api/agent/connectors/:id/accessGateway-only pass exchange or access revalidation; requires the connector's credential and a phone-issued pass. connectors:write.
POST /api/agent/connectors/:id/callback-accessGateway-only authorization of a signed callback against its saved target and durable replay receipt. connectors:write.
POST /api/agent/connectors/:id/rotate-secretRotate a connector callback HMAC secret; the new secret is returned once. connectors:write.
POST /api/agent/pages/:id/resolveResolve a page; anyone still being paged is cleared. oncall:write.
GET /api/agent/inbox/projectsInbox projects with unread counts. inbox:read.
GET /api/agent/inbox/notificationsInbox notifications, newest first, with cursor pagination. inbox:read.
GET /api/agent/inbox/notifications/:idOne inbox notification with its full body. inbox:read.
POST /api/agent/inbox/notifications/read-allMark everything up to a list response's readThroughToken read. inbox:write.
POST /api/agent/inbox/notifications/:id/readMark one notification read. inbox:write.
POST /api/agent/inbox/notifications/:id/unreadMark one notification unread. inbox:write.
GET /api/agent/billingPlan, limits, and remaining usage. billing:read.
bash
notify inbox list --unread --limit 20
notify inbox read-all --project unfiled
notify interaction list
notify send withdraw anot_...
notify services rotate svc_...
notify apps update app_example_warehouse --name "Maintenance board"
notify billing
notify tokens list   # needs --scope tokens:manage at login

Direct interaction fields

Direct HTTP and MCP questions use the interaction schema rather than the webhook’s nested response object. Create requires interactions:create and notifications:send; reading and waiting require interactions:read. A successful create only establishes the pending request.

Agent interaction request fields
FieldTypeDescription
titlestring, requiredSender title, 1–80 characters after trimming.
promptstring, requiredQuestion, 1–2,000 characters after trimming. live_activity presentation caps this at 240.
kindenum, requiredapproval, yes_no, or reply. Note that webhook type text maps to agent kind reply.
expiresInSecondsinteger30–86,400 seconds, default 900. live_activity presentation cannot exceed 28,800.
presentationenumnotification (default) or live_activity. The latter uses ActivityKit on capable iOS and an ordinary actionable alert on native Android.
styleenumOnly with live_activity: approval, shell, verdict, or signal.
primaryLabel / secondaryLabelstringOnly with live_activity: 1–24 characters each, single-line labels. Canonical returned actions do not change.
imageUrl / urlstringOptional sender image and tap destination, using notification validation. Not accepted with live_activity.
deviceIds / groupstring[] / stringOptional selected devices or authorized workplace group. Supply one targeting form, not both.
callbackobjectClassic URL/token or connector-target answered callback; see per-question callbacks.
webhookIdstringOptional saved account reply endpoint (whk_…) in addition to applicable defaults.
bash
curl -X POST https://notify.belweave.ai/api/agent/interactions   -H "Authorization: Bearer $NOTIFY_TOKEN"   -H 'Content-Type: application/json'   -d '{"title":"Warehouse desk","prompt":"Hold package PKG-42 until tomorrow?","kind":"approval","expiresInSeconds":900}'
For live_activity, use approval or yes_no, never reply. The generated OpenAPI schemas describe create, wait, get, list, and cancel HTTP requests. Only a valid human answer can settle the question as approved or denied.

Generated OpenAPI schemas

Use the OpenAPI 3.1 document for exact HTTP schemas and automation. It includes x-notify-scopes and request validators generated from the server’s schemas. The route inventory above is kept in step with that implementation.

OpenAPI document
https://notify.belweave.ai/api/agent/openapi.json