Skip to main content
Each event describes one change to one resource. Its type names the resource and what happened to it, like run.failed or phone.online. The body’s data is a snapshot of that resource. It uses the same field names and formats as the API, but carries only the fields listed for each event: never your own content (variables, names, tags), files or download links. See Webhooks for the request format, signatures and delivery guarantees. Events about a session, a run or a device you rent carry device_class, which says what kind of device the event concerns. It is phone today.
You can send every type below from the dashboard with Test on a destination’s page. A test carries the example payload shown here and "test": true.

Recognising duplicates

The body’s id (and the webhook-id header) is the same every time one change reaches you, so you can skip an id you have already handled. Axilio builds it from the event type and the resource:

Runs

data carries these fields of the run: id, workflow_id, device_class, phone_id, session_id, status, trigger, started_at, completed_at, canceled_at, success and created_at. A field with no value yet is left out, so a run still waiting for a phone has no device_class or phone_id. run.cancelled adds reason. Fetch the run for anything else, such as its variables, error message or recording.
The data for each run event, exactly as a Test delivery sends it:

Sessions

end_reason is one of:
  • released: you released the session, or Axilio released it for you (a connection that never finished setting up, or maintenance on the rack).
  • idle_timeout: no one used the session for longer than its idle timeout.
  • max_duration: the session reached the maximum session length.
  • run_finished: the run that the session served finished.
  • device_lost: the phone stopped answering during the session.
data for session.started and session.ended carries these fields of the session: session_id, status, source, device_class, phone_id, workflow_id, allocated_at, deallocated_at and is_dedicated_phone. A field with no value yet is left out. session.recording_ready carries session_id, device_class and phone_id; fetch the recording with GET /phones/sessions/{session_id}/recording.
The data for each session event, exactly as a Test delivery sends it:

Billing

Amounts use the same units as the billing API: balances in microdollars with a formatted balance_display, invoices in cents.
The data for each billing event, exactly as a Test delivery sends it:

Files

file.ready and file.capture_failed carry the file’s id, filename, mime_type, size_bytes and, for a capture, session_id. file.ready adds source; file.capture_failed adds reason. The delivery events carry the delivery: id, file_id, phone_id, filename, mime_type, size_bytes, status, bytes_transferred, error and created_at. No event contains the file itself or a download link; list the file through the API to get one. The data for each file event, exactly as a Test delivery sends it:

Phones

Axilio sends these events only for phones your organization rents. Shared phones never send them. The health events carry device_class (phone), phone_id, phone_name, nickname, status, reason and changed_at. reason on the maintenance and offline events is one of hardware, update, unresponsive or operator. The rental events carry the rental as GET /billing/phone-rental-subscriptions returns it.
The data for each phone event, exactly as a Test delivery sends it:

Platform

The data for each platform event, exactly as a Test delivery sends it:

Next steps

Webhooks

Register a destination and verify signatures.

Monitor runs

What each run status means.