Lifecycle of a delivery
A receivable event happens
Postmark reports an open back to Vibefollow, an inbound reply comes through, or a user clicks the one-click unsubscribe link.
Vibefollow signs the payload
Body bytes are HMAC-SHA256’d with your project’s webhook secret; the timestamp goes in the header.
Setting up an endpoint
Expose an HTTPS endpoint
Accept
POST with JSON bodies. Make sure your framework can hand you the raw request body, not a parsed object.Register the URL
In Settings → Developers → Webhooks, add the URL and generate a signing secret. Store the secret as
VIBEFOLLOW_WEBHOOK_SECRET.Verify every delivery
Use the SDK — see Signature verification.
Retry policy
Failed deliveries (non-2xx, timeout, connection error) retry on a fixed back-off schedule. Total budget is 6 attempts: 1 initial dispatch plus 5 retries.| Attempt | Delay since previous |
|---|---|
| 1 | initial |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 30 minutes |
| 5 | 2 hours |
| 6 | 12 hours |
failed. You can manually re-queue it from the in-dashboard deliveries log.
Why the raw body
What events you can receive
email.opened
Recipient opened a tracked email.
email.clicked
Recipient clicked a link in a tracked email.
email.bounced
Postmark reported a bounce or spam complaint.
email.replied
Inbound reply parsed and tone-classified.
email.unsubscribed
One-click unsubscribe, reply-request, or manual.
Event types reference
Full payload spec for each event type.