Skip to content
Inbox OSS
All docs

Documentation

Webhooks

Real-time event push with Ed25519 signatures, exponential retries, and 24-hour replay.

Register an endpoint

In the dashboard go to Settings → Webhooks. Add your endpoint URL, pick the event types you want, and save. We will verify reachability with a signed test event.

Event payload shape

{
  "event": "delivered",
  "message_id": "msg_8f3a5e21",
  "timestamp": 1715472293,
  "to": "ada@example.com",
  "from": "hello@yourapp.com",
  "category": ["onboarding"],
  "custom_args": {"user_id": "u_42"}
}

Signature verification

Every request includes X-Inbox-Signature (Ed25519, base64) and X-Inbox-Timestamp (Unix seconds). Reject if timestamp is more than 5 minutes old.

import nacl from 'tweetnacl';
function verify(body, sig, ts, publicKey) {
  const msg = Buffer.from(ts + '.' + body);
  return nacl.sign.detached.verify(msg, Buffer.from(sig, 'base64'), publicKey);
}

Retry semantics

Non-2xx responses retry with exponential backoff for 24 hours. Each retry includes X-Inbox-Attempt with the count. After 24h we mark the event as failed and surface it in the dashboard.

Event types

  • processed, deferred, delivered, bounced, dropped
  • opened, clicked
  • spam_report, unsubscribe, group_unsubscribe, group_resubscribe
  • Plus 18 others — see the API reference.

Stuck? We're here.

Free plan includes 3,000 emails/month forever. No credit card required.