Per delivery. Retries are free.

An event fanned out to five endpoints is five deliveries. The six attempts we make for each one are not counted again — you are billed for what you asked us to send, not for how hard we had to try.

Trial

Enough to wire it in and watch a retry happen.

$0/ month

2,000 deliveries / month

  • 5 endpoints
  • 2,000 deliveries / month
  • Full delivery log
  • No card required
Start the trial

Pro

Most bought

A platform with customers who want webhooks.

$49/ month

100,000 deliveries / month

  • 500 endpoints
  • 100,000 deliveries / month
  • Signing, retries and replay protection
  • Embeddable customer-facing log
  • Secret rotation with an overlap window
Choose Pro

Scale

A marketplace, or an API with real traffic.

$149/ month

1,000,000 deliveries / month

  • Unlimited endpoints
  • 1,000,000 deliveries / month
  • Signing, retries and replay protection
  • Embeddable customer-facing log
  • Priority support
Choose Scale

The questions worth answering

What counts as an active subscriber?
Someone who received or read a notification during the billing period. A user who has not been sent anything and has not opened the bell does not count, and a user who churned last year never counts again.
Is the number of notifications limited?
No. Send one person a thousand notifications or a thousand people one; the price is the same. Charging per notification would make you ration the thing the product exists to do.
How does the embed authenticate?
Your backend mints a short-lived token naming one user, signed with your app key. The embed presents it and can read that person’s inbox and nothing else — it cannot publish, and it cannot see another user. Your app key never reaches a browser.
What happens if my card fails?
Publishing stops. Your users keep seeing the notifications they already have, because taking their inbox away would punish them for something between us and you.
Is delivery really real-time?
Yes, over Server-Sent Events, and the inbox is stored in PostgreSQL rather than replayed from a channel — so a user who was offline still sees everything in order when they come back. Nothing is lost if the stream drops.
Does it work without JavaScript frameworks?
It is a custom element. It works in React, Vue, Svelte, Rails, Django or a plain HTML page, and it is 2.7 KB gzipped with no dependencies.