Skip to main content
Get a signed event into your own endpoint in three steps.
1

Connect a destination

Before storing anything, we send a signed ping to your URL. It must answer 2xx within ten seconds. Make the endpoint acknowledge a POST it does not recognise before you run this.
The secret is shown exactly once, in this response. It is never readable again, not through GET /v1/integrations and not in a replayed answer to the same Idempotency-Key. Store it now.
A workspace has one destination per provider. Posting a second one updates the first.A URL that does not answer is a 422 endpoint_unreachable, and no destination is created.
2

Add a routing rule

A rule picks one event, narrows it with a filter, and sets how often it may fire. The events and filter keys are on Events.name is the stable key of the rule inside the destination. Sending the same name again updates that rule and leaves its cursor alone.
3

Verify the signature

This follows the Standard Webhooks spec. An existing verify function in Make, n8n or Clay works.Answer 2xx as soon as you have stored the event. We wait ten seconds and then treat the attempt as failed.

The payload

One POST per delivery, never a batch.
id is the delivery id and does not change across retries. Use it as your idempotency key.
timestamp is when we sent this attempt, not when the fact happened. That moment is inside data.data is frozen as it was composed when the fact occurred. That is why the ledger can still tell you what you were told months ago.

Test it later

You get back what the receiver said: { ok, status, body, error }. Nothing is written to the ledger.
A receiver that refuses is ok: false inside a 200. The test ran, and its answer was no.There is no Idempotency-Key here, since pressing test twice has to send two events.