Channels, providers, templates, and routing
Channel versus provider
| Channel | Delivery mechanism | What you configure |
|---|---|---|
email | SMTP | Account SMTP server, authentication, TLS, and sender identity |
whatsapp | WAHA | Account WAHA endpoint, API key, and session |
discord | Discord webhook | Account webhook connection |
in_app | Built-in persistent inbox | Stable account and recipient IDs |
web_push | Browser push service | Platform VAPID settings plus each recipient's browser subscription |
A provider is a connection used by a channel. It is not a user, application, or permission scope.
Provider account boundary
For an account-bound delivery, Notify selects an active provider matching the tenant, application, environment, account, and channel. It does not fall back to an application-level provider. If none exists, that delivery reports provider_not_configured.
Application-level providers are for account-less delivery where that application mode permits it. Do not rely on them as implicit defaults for customer accounts.
Saved provider secrets are encrypted. Configuration reads expose only non-secret values and secret-presence indicators, not the stored secrets.
Templates and versions
A template is identified by template_key. Published versions contain the message for a particular channel and locale. Create a new version when content changes; published versions are immutable.
For example, invoice.paid can have separate email / en-US and in_app / en-US versions. Sending to both channels requires both versions.
Request variables fill the template's named placeholders. Validate business data before sending. The API also supports raw content when the credential explicitly has notifications:send_raw.
Routing rules
Routing maps your event_key to a list of channels when the request omits channels.
Account-specific routes take precedence over application-wide routes. Within each level, an exact event wins over *. This means an account wildcard can take precedence over an application-wide exact match.
Configure and test templates, routes, and providers in Console. A route chooses channels; it does not create provider configuration or grant API permissions.