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.

One notification. The answer names the channel that delivered it.
bash
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. 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. 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. 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.

How HonkIO applies CASL

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.

See channel prices

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.

Read the privacy policy

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

Create a free account

Test keys work right after sign-up, with no card and no charges.