API reference menu
Getting started
OverviewAuthentication and rate limitExamplesSending
Send a notificationPriority and repeatLinks, images and buttonsSourcesScheduled sendsWebhook templatesReceipts and replies
Receipts and callbacksRepliesTeams
Teams, roles and endpointsChannels and escalationWebhooks and emailAlert email and timelineTeam formsPlans, audit log and transferCompany sign‑in and SCIMThe web consoleAccount
Identity and moving phonesDevices, keys and historyThe Upgrade PassCompatibility
ntfy's publish APIProwl's APIAppendix
Endpoint indexErrors and status codesLimitsPriorities and fieldsGlossaryWebhook templates
POST /v1/hooks/{template} takes the body another tool already sends and renders it, so that tool needs no script. Templates: github, alertmanager, grafana, uptime-kuma.
| Template | Renders | Priority |
|---|---|---|
github |
push, pull_request (opened, reopened, merged, closed, ready), issues (opened, reopened, closed), workflow_run (completed), release (published), ping. Needs the X-GitHub-Event header GitHub sends |
A failed workflow is 1, a passing one -1 |
alertmanager, grafana |
A firing or resolved group, up to 5 alerts summarised |
severity: critical 2, warning or error 1, resolved 0 |
uptime-kuma |
Up, Down, Pending, Maintenance, and the Test button |
Down 1, Up 0 |
- Resolved replaces firing. An alert group, an Uptime Kuma monitor and a GitHub workflow on a
branch each carry a
replace_keythat is the same in every state, so the phone shows what is true now. - Noise is not a notification. An event a template does not render (a GitHub
star, a label change) answers200 {"ignored": true, "reason": …}, is not charged against the key's hour, and does not make the sender retry. - A body that is not that tool's shape is a
400, never a500. A body over 256 KB is413. ?source=and?priority=override the template's.- Auth. The usual headers. For a sender that cannot set one (GitHub's webhooks among them),
?key=nlk_…is accepted on this endpoint only. Nowlark's access log is off, so it does not write the URL down, but a URL travels further than a header: make a key for that one sender, and revoke it if the URL leaks.