Skip to main content
Webhooks tell your server when something changes in your organization. Instead of polling GET /runs/{run_id} until a run finishes, you register an endpoint once and Axilio sends it a signed POST when the run completes.

Event reference

Every event type, when it fires, and what its payload contains.

Runs

The run lifecycle the run.* events report.

Register a destination

  1. Open Settings > Webhooks in the dashboard.
  2. Click Register Destination and enter a public https:// URL.
  3. Choose the event types to receive, or subscribe to all of them.
  4. Copy the signing secret. It starts with whsec_ and is shown once.
Event types are grouped by area: runs, sessions, billing, files and phones. Subscribe narrowly. An endpoint that only handles run.failed should not receive session.started.

The request

Every delivery is a POST with a JSON body in the same shape:
  • id: unique per event. The same value is in the webhook-id header. Use it to discard a duplicate.
  • type: the event type you subscribed to.
  • occurred_at: when the change happened, in UTC.
  • test: true only on a test you sent yourself.
  • data: the resource the event is about. It uses the same field names as the API, and carries ids, statuses, reasons and timestamps only.
Payloads never contain your content: no run variables or outputs, no file bytes, no recordings and no download links. Fetch those through the API with your own key when you need them.

Verify the signature

Axilio signs every request with the Standard Webhooks scheme. Each request carries three headers: webhook-id, webhook-timestamp and webhook-signature. Verify them with any Standard Webhooks library before you trust the body.
Verify against the raw request body. Parsing and re-serializing the JSON first changes the bytes and the signature no longer matches.

Delivery guarantees

  • At least once. Respond with any 2xx as soon as you have the event, and do slow work afterwards. On any other response, or none, Axilio retries after 30 seconds, 2 minutes, 5 minutes, 15 minutes and 1 hour.
  • Duplicates are possible. A retry or a network failure can deliver the same event twice. Keep the id of events you have handled and skip repeats.
  • Order is not guaranteed. run.completed can arrive before run.started. Compare occurred_at, or fetch the resource, rather than relying on arrival order.
  • Failed deliveries stay replayable. The dashboard’s delivery log shows every attempt and its response. Replay a failed event once your endpoint is fixed.

Send a test

On a destination’s page, click Test and pick an event type. Axilio delivers that type’s example payload to that destination only, with "test": true. Every event type in the reference can be tested this way before the real event ever fires.

Next steps

Event reference

What each event means and carries.

Sessions and timeouts

Why a session ends, which session.ended reports.