Skip to main content

ntfy

Slug: ntfy
Provider: ntfy.sh or self-hosted ntfy server
Inbound ACK: Yes — via ntfy action button


How it works

PSAPLink publishes a notification to an ntfy topic. The ntfy app on the user's device displays the alert. If the message includes an ACK action button (configured automatically), tapping it sends a callback to POST /api/v1/inbound/ntfy which resolves the acknowledgement.


Configuration schema

FieldTypeRequiredDescription
topicstringYesntfy topic name. Must be unique — anyone knowing the topic can subscribe.
server_urlstringNontfy server URL (default: https://ntfy.sh). Use your self-hosted URL here.
tokenstringNoAccess token for private topics (Bearer auth). Required if your topic has access control enabled.
prioritystringNoMessage priority: urgent, high, default, low, min (default: maps from incident priority).

Create a channel

POST /api/v1/transport-channels
Authorization: Bearer <token>
Content-Type: application/json

{
"transport_type_slug": "ntfy",
"name": "Operations ntfy",
"config": {
"topic": "psaplink-alerts-ops",
"server_url": "https://ntfy.sh",
"priority": "high"
}
}

Self-hosted ntfy

If you run a private ntfy server, set server_url to your instance URL and use token for authentication:

{
"topic": "your-private-topic",
"server_url": "https://ntfy.yourorg.gov",
"token": "tk_your_access_token"
}

Inbound ACK

The PSAPLink notification message includes an action button. When the user taps "ACK" in the ntfy app, ntfy calls back POST /api/v1/inbound/ntfy with the delivery_id, which PSAPLink uses to resolve the notification.

No additional configuration is needed on the ntfy side — the action URL is embedded in the outbound message.


Test the channel

POST /api/v1/transport-channels/{id}/test
Authorization: Bearer <token>

Limitations

  • Topic security: ntfy topics on ntfy.sh are public by default — anyone who knows the topic name can subscribe. Use a long, random topic name or a self-hosted instance with access control for sensitive deployments.
  • ACK callbacks require the ntfy app to be running on the device at the time the action is tapped.