Built on the WhatsApp Business Platform
Everything a notification needs, and nothing it does not.
Four capabilities that map one to one onto what a business does with WhatsApp: connect a number, send, receive, and see what happened.
Connect your own number
Your WhatsApp Business account and phone number stay yours. We link them to your workspace and keep the link healthy.
Embedded Signup
The onboarding flow is Meta's own, inside our panel. No token sharing by e-mail, no manual configuration; the number is connected in minutes.
Numbers already in use
A number that is active in the WhatsApp or WhatsApp Business app can be connected without giving it up, and its recent history is synchronised.
Status you can see
Number status, display-name approval, template approval and the quality rating of each number are shown in the panel, with a warning before Meta acts on a drop.
Send notifications
Transactional messages from approved templates: order updates, delivery notices, appointment reminders, booking changes and one-time codes.
One API call
POST /v1/messages with the number to send from, the recipient, the template and its variables. The answer is a 202 and an id; delivery is reported to your webhook.Idempotent by design
Every write accepts an
Idempotency-Key. A retried request is answered with the original result, so a network hiccup never sends a customer the same code twice.One-time codes have a lane
Verification codes travel on their own priority queue, are never held back by a plan quota, and are dropped rather than sent when they are too old to be valid.
Templates in the panel
Create and submit message templates, see their approval state and category, and keep sending code unchanged when a template changes.
Sandbox first
A test environment with its own keys where nothing reaches WhatsApp and everything else behaves exactly like production, including webhooks.
Meta's charges, shown
Meta bills messages to your own account. The panel shows an estimate of those charges next to your usage, so the total cost is never a surprise.
Receive every inbound message
The part everybody gets wrong. A reply from your customer is stored before it is acknowledged, then delivered to your system until it arrives.
Signed webhooks
Every delivery carries a timestamp and an HMAC signature over the body. Verifying it is four lines in any language; rotating the secret is a click.
Retries, dead-letter queue, replay
Failed deliveries retry with backoff. After the last attempt the event is kept in a dead-letter queue you can inspect, and replayed one at a time or by filter.
In order, at least once
Events from one customer are delivered in the order they happened, and at least once: each carries an id that does not change across retries, so your handler can be idempotent.
Event log
Every delivery is recorded with the response your endpoint gave, so a dispute about what was delivered is settled from the record rather than from memory.
Circuit breaker
An endpoint that keeps failing is paused rather than hammered, you are told, and deliveries resume from where they stopped when it is back.
Nothing is dropped for being new
A message type Meta introduces that we do not recognise yet is still delivered, with the raw payload, rather than silently discarded.
See what happened
A log, not a dashboard of charts. The value is in the rows.
Message log
Every outbound message with its status over time, the failure reason in plain words and Meta's code beside it, and the delivery attempts of the events it produced.
Usage against your plan
Messages accepted this month against the plan's allowance, with a warning at 80% and a webhook at 100%.
Built for the audit
Every staff access to a workspace is recorded in that workspace's own audit log, visible to the customer, and can be switched off by the customer.
How it is built
- Each customer's data is isolated at the database level, not only in code.
- Access tokens live in a secrets vault; the database holds only references.
- One-time codes are never written to the database or to a log, and are held only for the seconds needed to send them.
- Phone numbers, template variables and tokens are redacted from the service's application logs at the source.
- Hosted in a single region in the UK or the European Union, named in your data processing agreement.
- The public API never calls Meta while you wait: it validates, queues and answers.