Skip to main content
Webhooks push events to your own endpoint instead of making you poll. Each delivery is a signed POST with a JSON body.

Managing endpoints

Manage endpoints in the dashboard, or from your own code with an API key: Both doors take the same calls: An org can have at most 20 endpoints.

Endpoint fields

Shell
The response to the create call is the only time the signing secret is shown in full. Store it then; every later read shows it masked. An endpoint also reports how deliveries are going: last_delivery_at, last_status, last_error and failing_since.

Events

A delivery

Each delivery is a POST to your URL with a JSON body:
Body
With these headers:

Verifying the signature

v1 is the hex HMAC-SHA256, keyed with the endpoint’s signing secret, of the string <t>.<body>: the t value, a full stop, and the raw request body exactly as received.
  1. Split the header on , and read t and v1.
  2. Compute the HMAC over t + "." + rawBody.
  3. Compare it with v1 in constant time.
  4. Reject the delivery if t is more than 5 minutes old.
Node

Retries

Answer with any 2xx to accept a delivery. Any other status, or no answer within 10 seconds, is retried up to 14 times with exponential backoff, spread over about a day. Redirects are not followed: a 3xx counts as a failure. Because a retry carries the same Attensira-Delivery, a receiver that stores the ids it has handled can treat a repeat as already done.