Notify
One call to reach a user by push, SMS or email
Keep a profile for each of your users, then send once. HonkIO tries push, then SMS, then email, or the order you choose, and stops at the first channel that delivers. Consent is still checked on every channel.
curl -X POST https://api.honkio.ca/v1/notify \
-H "Authorization: Bearer mk_test_YOUR_KEY" \
-H "Idempotency-Key: login-code-1042-2026-11-03" \
-H "Content-Type: application/json" \
-d '{
"user_id": "user_1042",
"text": "Your Acme code is 123456",
"subject": "Your Acme code",
"from": { "sms": "+1416XXXXXXX", "email": "hello@yourapp.ca" }
}'
# Response 202: { "id": "ntf_...", "status": "delivered", "channel": "sms", "attempts": [...], ... }How it works
Three steps, the same with a test key and a live one.
- 1
Save a recipient profile
Store a phone number, an email address and a language for each user with PUT /v1/recipients/:user_id, under your own user ID. A user with no profile can still get a push on an active device.
- 2
Send one notification
Call POST /v1/notify with the user ID and your text, or a template. Name your SMS and email senders, and set channels to change the order or leave one out.
- 3
Read the outcome
The answer, GET /v1/notifications/:id and the notification webhooks give the channel that delivered it and every attempt, each with its reason.
Built for transactional notifications
Messages your product sends to one person when something has happened.
- Sign-in codes
- Try the app first, then a text, then an email. With an Idempotency-Key, a retry returns the first notification and never sends the code twice.
- Appointment reminders
- Reach the person where they can be reached: a push on the app if they have it, otherwise a text or an email, in their language.
- Receipts
- Send one template and each channel uses its own part, so the push, the text and the email each read as they should.
- Alerts
- Account and security alerts that move to the next channel when one cannot reach the person, with every attempt on record.
What Notify does
One notification, one person, the first channel that works.
- Your order, each channel once
- Push, then SMS, then email by default. Set channels to change the order or leave one out. Each channel is tried at most once, and Notify stops at the first that delivers.
- Recipient profiles
- A phone number, an email address and a language for each user, keyed by your own user ID: the same ID your push devices are registered under.
- Templates in English and French
- Send a template with variables and each channel sends its own part, in the profile's language unless you pass one.
- Every attempt on record
- Each notification lists its attempts in order, with the channel, the outcome and why it was skipped, refused or failed, in the API and the dashboard.
- Webhooks
- notification.delivered fires when a channel delivered it and notification.failed when none did. Both carry the attempts and no message text.
- No double sends
- Send an Idempotency-Key header and a retry returns the first notification, pending or not. It never sends or charges twice.
Consent is checked on every channel
A recipient profile holds contact details. It is never consent.
- A text or an email goes through the same checks as the SMS and email APIs: consent, opt-outs, suppressions, sending limits, pauses and balance. A channel that refuses moves the notification to the next one.
- Saving a phone number or an email address in a profile is not consent. You record consent as you do for any other send.
- Notifications are transactional by default. Mark an email commercial and it needs CASL consent on file and carries an unsubscribe footer.
- Delivered means a channel accepted it: a device accepted the push, the carrier accepted the text or the email service accepted the email. A bounce or a failed receipt after that never sends it again on another channel.
Pricing
Notify has no price of its own.
A notification is billed at the normal price of the channel that delivers it: a push, a text or an email. Attempts that fall through to another channel are not billed.
What was charged for a push no device accepted, a text the carrier refused or an email refused at once is refunded before the next channel is tried.
Where the data is stored
Recipient profiles are stored in Canada, in Montréal (ca-central-1), with the rest of your account's data. A profile is kept until you delete it, and deleting one also clears the text of that user's notifications.
Requests may be processed on US-hosted infrastructure, and a push goes through Apple's or Google's servers. Stored in Canada does not mean processed only in Canada.
Test mode
Start with a test key.
With a test key, every channel runs in its own test mode. Profiles are kept per mode, like consents: a test key reads and writes test profiles only, and a live profile does not exist for it.
Documentation
Guides and reference for Notify.
Questions
- What is HonkIO Notify?
- Notify is one API call that reaches one of your users by push, SMS or email. HonkIO tries the channels in your order, push, then SMS, then email by default, and stops at the first that delivers.
- When does Notify stop trying channels?
- When a channel accepts the notification: a device accepts the push, the carrier accepts the text or the email service accepts the email. A failure reported after that, such as a bounce, does not move it to another channel, so one notification is never sent twice.
- Does Notify skip consent checks?
- No. Each text or email goes through the same consent, opt-out, suppression and sending limit checks as the SMS and email APIs, and a refusal moves the notification to the next channel. A recipient profile is never consent.
- How much does Notify cost?
- Nothing on its own. A notification is billed at the normal price of the channel that delivers it, and attempts that fall through are not billed. Channel prices are on the pricing page, in CAD.
- Where is recipient data stored?
- In Canada, in Montréal (ca-central-1). Requests may be processed on US-hosted infrastructure, and a push goes through Apple's or Google's servers.
- Do I need a profile for every user?
- Only to reach them by SMS or email: the profile holds the phone number and the email address. A user with no profile can still get a push on an active device registered under the same user ID.
Related
- Push notifications
Push to iOS, Android and browsers from one API, with optional encrypted content and an SMS fallback in one call.
- SMS API
Send and receive SMS with Canadian local and toll-free numbers, with CASL consent and STOP replies enforced in the API.
- Email API
Send transactional email from your own domain and receive replies over the API, with CASL checks and data stored in Canada.
- Verify
One-time codes by text message, to confirm that a Canadian phone number belongs to your user.
Try it in test mode first
Test keys work right after sign-up, with no card and no charges.
HonkIO