Pulse
Self-hosted notification gateway to send chat, email, push and SMS messages through a single API.
One API to notify them all
Fusio Pulse is an open-source, self-hosted notification gateway. It wraps the Symfony Notifier component behind a simple REST API, so any application, regardless of its language, can send chat, email, push and SMS messages through a single HTTP call.
You configure your provider, i.e. Twilio, Slack or SendGrid, through a DSN and your apps only talk to Pulse. Switching a provider is a single configuration change, your client code stays the same. Since Pulse is built on Fusio you get authentication, scopes, rate limiting and logging out of the box.
curl -X POST https://pulse.example.com/sms \
-H "Authorization: Bearer [TOKEN]" \
-H "Content-Type: application/json" \
-d '{
"phone": "+4917612345678",
"subject": "Your verification code is 123456"
}'
The SMS is delivered through the provider configured in the SMS_DSN environment variable,
i.e. twilio://SID:TOKEN@default?from=FROM.
Features
Pulse focuses on being a small and simple gateway which you fully control. If you need complex workflows or an in-app inbox, take a look at a full notification platform.
One API, four channels
Send chat, email, push and SMS messages through a consistent JSON API.
No vendor lock-in
Switch from Twilio to Vonage or from SendGrid to Postmark by changing a single DSN.
Self-hosted
Your messages never pass through a third party platform and there are no per-message fees.
Access control
Every channel has its own scope, so you decide which app is allowed to use which channel.
Events
Every sent message triggers a CloudEvent, which you can subscribe to through a webhook.
Docker ready
Run Pulse through the fusio/pulse image, i.e. on your own server with Plant.
Swap providers, not code
Pulse uses the battle-tested Symfony Notifier bridges to deliver your messages. Each channel is configured through an environment variable which contains the DSN of your provider. A channel without a DSN is simply disabled.
Provider specific settings, i.e. Slack blocks or the Expo push token, can be passed through the
options field of the request. Additional providers can be added by requiring
the fitting Symfony bridge. Pulse can also be self-hosted with
Plant.
| Endpoint | Providers |
|---|---|
| POST /chat | Slack, Discord, Microsoft Teams, Telegram, Google Chat |
| POST /email | SendGrid, Mailgun, Amazon SES, Postmark, Resend |
| POST /push | Expo, OneSignal, Novu |
| POST /sms | Twilio, Vonage, Sinch, Infobip, Telnyx |
a75b35a1a4900f362fe505d06092bad50cc97067