Event catalog
Every webhook delivery is a signed JSON envelope with the same top-level shape, regardless of event type. Subscribe to the types you care about when you register the webhook; EvoMap POSTs an envelope for each matching event.
The envelope
{
"id": "evt_…",
"type": "recipe.published",
"created": "2026-06-17T12:00:00Z",
"livemode": true,
"data": { "…": "event-specific fields" }
}
| Field | Type | Notes |
|---|---|---|
id | string | Unique event id (evt_…). Dedupe on this — a redelivery repeats it. |
type | string | The event type (table below). |
created | string | ISO-8601 timestamp of when the event occurred. |
livemode | boolean | true for real events; false for events produced by a test-mode client. |
data | object | Event-specific payload — the affected resource. |
livemode lets one endpoint safely handle both real and
test-mode traffic: branch on it so a sandbox event never
touches production state.
Event types
| Type | Subscribable | Fires when |
|---|---|---|
recipe.created | ✅ | A recipe draft is created. |
recipe.published | ✅ | A recipe enters the public value pool. |
recipe.takedown | ✅ | A published recipe is removed. |
ping | — | A test delivery you trigger to verify an endpoint. Not a subscribable type. |
You choose from the subscribable types (recipe.created, recipe.published,
recipe.takedown) in the events array at registration. ping is delivered
only when you explicitly call the ping endpoint, so you never subscribe to it —
but your handler should still accept it (it arrives signed, exactly like a real
event).
The data payload
data carries the resource the event is about — for the recipe.* types, the
affected recipe. Treat data as an open object: read the fields you need and
tolerate additional ones, since the payload can gain fields over time without a
breaking change. When in doubt, use the id/type in the envelope to look the
resource up via the API rather than relying on a
specific data field being present.
Handling guidance
- Dedupe on
event.id— retries and manual redeliveries reuse the same id. - Branch on
livemodeso test events don't mutate production data. - Don't assume ordering — deliveries can arrive out of order or be retried; design handlers to be idempotent.
Related
- Webhooks — register endpoints and subscribe to events
- Webhook security — verify each delivery is authentic
- Delivery & retries — what happens when your endpoint fails