Know what happened to every email, as it happens

Add an endpoint, choose its events, and we POST each one to your server as signed JSON. Failed deliveries are retried for days.

What you can do

Everything in webhooks

  • 17 event types

    Sent, scheduled, delivered, delayed, bounced, complained, opened, clicked, failed, suppressed and cancelled emails, plus contact and domain changes.

  • Signed in the Standard Webhooks format

    Each request carries an HMAC-SHA256 signature, so you can check it came from us. Standard webhook verification libraries work too.

  • Retried on a schedule

    Answer with any 2xx within 15 seconds. Otherwise we retry after 5 seconds, 5 and 30 minutes, then 2, 5, 10 and 10 hours.

  • Turned off, and we tell you

    An endpoint that keeps failing for 5 days is turned off and we email you. Turn it back on from its page.

  • Replay and test

    Deliveries are kept for 30 days. Replay any of them, or send a test event, from the endpoint's page.

  • Rotate the secret

    Rotate an endpoint's signing secret from its page. The old one stops working at once.

Webhooks

Know the moment it happens

Sends, deliveries, bounces, opens and clicks arrive at your endpoint as signed POST requests. If your server is down, we retry on a schedule, and you can replay any delivery from the console.

Webhook docs
  • Events
    17 events to subscribe to
    Email11
    • sent
    • scheduled
    • delivered
    • delivery_delayed
    • bounced
    • complained
    • opened
    • clicked
    • failed
    • suppressed
    • canceled
    Contact3
    • created
    • updated
    • deleted
    Domain3
    • created
    • updated
    • deleted

    Opened and clicked events need open or click tracking, which is off until you turn it on for a domain.

  • Signing
    Signed and verifiable

    Each request is signed with HMAC-SHA256 over its id, timestamp and body, using your endpoint's whsec_ secret. The Svix library verifies it as is.

    • svix-id
    • svix-timestamp
    • svix-signature
    import { Webhook } from "svix"
    
    const wh = new Webhook(secret)
    const event = wh.verify(body, headers)
  • Retries & limits
    Delivered, even after a bad day
    Time to answer
    15 seconds
    Retries
    7, over about 28 hours
    Failing for 5 days
    Endpoint turns off
    Replay a delivery
    From the console
    Endpoints per plan
    Free
    1
    Pro
    10
    Scale
    unlimited
How it works

From first step to done

  1. 1Add an endpointA public HTTPS URL, in the console or with POST /webhooks.
  2. 2Choose its eventsPick the event types this endpoint should receive.
  3. 3Verify each requestCheck the signature on the raw body with your signing secret before trusting the event.
  4. 4Respond quicklyReturn a 2xx within 15 seconds and do slow work afterwards.
Good to know
Event types
17
Response timeout
15 seconds
Turned off after
5 days of failures
Deliveries kept
30 days
Endpoints
Free 1 · Pro 10 · Scale Unlimited
Developer API

Ship email today

Start free with 3,000 emails a month. Upgrade only when you need more.

Compare plans
  • 3,000 emails a month free
  • No credit card needed
  • Upgrade anytime
Get started in 3 steps
  1. 1Create your free accountGet an API key in seconds.
  2. 2Verify a sending domainAdd the DNS records we show you.
  3. 3Send with one requestcURL, Node.js, Python: plain HTTP.