Guides · Standard Webhooks
Get a Mac notification for Resend and Clerk events, or any Standard Webhooks sender
Resend, Clerk and a growing list of services sign webhooks the Standard Webhooks way, with a whsec_… secret and id, timestamp and signature headers. The Standard Webhooks preset verifies them, takes the type from the payload's type, and gives each a switch and a count.
Needs: the free EventBar app on your Mac, an EventBar account, and an account at a service that signs with Standard Webhooks, such as Resend or Clerk. About five minutes. Standard Webhooks preset, signature verified.
Steps
- Create the webhook URL. In the EventBar dashboard, open the Webhooks tab, pick the group this belongs to (one group per site or app is the usual shape), choose the provider Standard Webhooks, name it, and press Create. Copy the URL; it stays visible and can be rotated any time.
- Paste it into Standard Webhooks. In Resend: Webhooks, then Add Webhook, paste the hook URL and tick the events (
email.delivered,email.bounced,email.complained); the webhook's page then shows its signing secret. In Clerk: Configure, then Webhooks, then Add Endpoint, paste the URL, subscribe touser.createdandsession.created, and copy the Signing Secret. Either way, paste thewhsec_…secret into the hook card in EventBar and press Save secret. The type comes from the payload'stypeon its own; there is no type field to set. - Trigger one. Most services offer a test delivery; otherwise do the real thing once. It shows up in the dashboard's Events tab within a second and in the menu bar, as an undefined type named after the event. That first one is your proof the wiring works.
- Make it read well. Press Define on the new type and give it a title and a body template. Fields come from the payload, nested ones with dots. The table below is a starting point.
This preset is on Plus and Pro. Free can do the same with a Generic JSON hook and a type field of type, without the signature check.
What you'll see
| Type | Title | Body template |
|---|---|---|
email.delivered | Delivered | {data.subject} to {data.to.0} |
email.bounced | Bounced | {data.subject} to {data.to.0} |
user.created | New user | {data.first_name} {data.last_name} · {data.email_addresses.0.email_address} |
session.created | Sign-in | user {data.user_id} |
Every type has its own switch in the menu bar, so a noisy one can be quiet on this Mac and still counted. Counts cover the last hour, 24 hours, 7 days, 30 days and all time.
Worth knowing
- The headers may be
svix-id,svix-timestampandsvix-signature(Resend, Clerk and anything else built on Svix) orwebhook-id,webhook-timestampandwebhook-signature(the spec's own names). EventBar accepts either and checks the secret the same way; a timestamp more than five minutes old is refused. - Duplicates are dropped by the delivery id header, so a retry never counts twice. If a sender's payload has no
type, the hook's Default type is used. - Lists need an index: Resend's
data.tois a list, so{data.to.0}; Clerk'sdata.email_addresseslikewise. For Resend's bounce reason, check one delivery in the dashboard's Events tab and add the field you see underdata.
The full contract, including how each preset reads a payload and what the answers mean, is in the API docs. Something about Standard Webhooks's payload changed? Tell us and we'll fix the guide.