Skip to content
NewA free test that shows whether your emails will reach the inbox.

Know the moment something happens to your email

Tell Sukhovei Mail a URL. We call it when mail arrives, is delivered or bounces, and try again if you are down.

What it does

Three things you get, in plain words.

  • Calls your URL for you

    Pick the events you care about, or all of them. Limit a webhook to one inbox if you want. Eleven kinds of event are sent today, from a received email to a bounce.

  • Proves it came from us

    Every call is signed, using the open Standard Webhooks method. Your code checks the signature, so nobody else can fake an event.

  • Does not give up on the first miss

    If your server is down, Sukhovei Mail tries again for about 18 hours. A log shows every call, and you can send any event again.

Add a URL, then check each call

Create a webhook with one request. Sukhovei Mail sends a small JSON message to your URL for each event. Your code checks the signature and answers with a success code within 10 seconds.

curl https://api.mailbay.dev/v1/webhooks \
  -H "Authorization: Bearer $MAILBAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/hooks/mailbay", "event_types": ["message.received"]}'

# {"id": "whk_01jbz...", "url": "https://example.com/hooks/mailbay",
#  "event_types": ["message.received"], "inbox_id": null, "secret": "whsec_..."}
# Save the secret now. It is shown only once.

A received-email event holds the ids, the sender and the subject. Fetch the full message with the API when you need the body. Prefer not to open a public URL? Read the same events with GET /v1/events, or over a live WebSocket.

Limits, honestly

What it does not do, so you can decide before you start.

  • There are no open or click events. Sukhovei Mail does not track opens or clicks.
  • You cannot edit a webhook yet. To change the URL or the events, delete it and create a new one.
  • There is no webhooks page in the dashboard. Use the API, or the create_webhook tool in the MCP server. The command line has no webhook command.
  • Your URL must be public. Calls to private or internal addresses are blocked.
  • Your server has 10 seconds to answer, and redirects count as a failure. After 7 tries over about 18 hours, the call is marked failed. You can still replay it by hand.
  • A webhook takes up to 32 event types. Use * to get every event.

Questions

What events can I get?

Eleven today. For received mail: message.received. For mail you send: message.scheduled, message.queued, message.canceled, message.delivered, message.deferred, message.bounced, message.complained and message.failed. For your workspace: sending.paused and sending.resumed.

How do I know a call really came from Sukhovei Mail?

Each call carries three headers: webhook-id, webhook-timestamp and webhook-signature. The signature is an HMAC with SHA-256, made with the secret that starts with whsec_ and is shown once when you create the webhook. Any Standard Webhooks library can check it. Check it against the raw body, before parsing.

What if my server is down?

Sukhovei Mail tries again after 5 seconds, 5 minutes, 30 minutes, 2 hours, 5 hours and 10 hours. That is 7 attempts over about 18 hours. Every call is in the delivery log, and you can replay one at any time. The webhook-id stays the same on each retry, so you can ignore duplicates.

Do I have to use webhooks?

No. You can read the same events from GET /v1/events, a history you page through, or from a live WebSocket stream at GET /v1/events/ws.

Try it on the free plan.

The free plan has 3 inboxes, 3,000 emails a month and 3 custom domains. No card needed.