Event webhook
Roamex posts each event to every webhook endpoint you registered in the panel for that event type. Verify X-Roamex-Signature: it is sha256= followed by the hex HMAC-SHA256 of the raw request body, keyed with the endpoint’s signing secret. Deliveries can repeat, so use id to ignore one you already handled.
Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”esim.provisioned: new eSIMs were provisioned.order.created: an order paid from your balance was created.esim.topped_up: an eSIM got more data or days.customer_topup.succeeded: a traveller paid for a top-up and received it.wallet.low_balance: your balance fell below your low-balance threshold.wallet.topped_up: your balance was topped up.esim.low_data: an eSIM is running low on data.esim.activated: an eSIM connected for the first time.esim.expiring_soon: an eSIM is close to its end date.
The event type.
The delivery id, the same as id in the body.
The event id, the same as event_id in the body. Absent when event_id is null.
sha256= followed by the hex HMAC-SHA256 of the raw body, keyed with the endpoint’s signing secret.
Request Bodyrequired
Section titled “Request Bodyrequired”object
The delivery id. A retry of this delivery carries the same id.
The event id, the same as id in /events/recent. One event sent to two endpoints has one event_id.
esim.provisioned: new eSIMs were provisioned.order.created: an order paid from your balance was created.esim.topped_up: an eSIM got more data or days.customer_topup.succeeded: a traveller paid for a top-up and received it.wallet.low_balance: your balance fell below your low-balance threshold.wallet.topped_up: your balance was topped up.esim.low_data: an eSIM is running low on data.esim.activated: an eSIM connected for the first time.esim.expiring_soon: an eSIM is close to its end date.
When the event happened. The same on every attempt.
When this attempt was sent.
The event’s fields. They depend on the event type.
object
Example
{ "id": "00000000-0000-4000-8000-0000000000f1", "event_id": "00000000-0000-4000-8000-0000000000e1", "type": "esim.topped_up", "created_at": "2026-10-22T09:12:00.000Z", "sent_at": "2026-10-22T09:13:05.000Z", "data": { "esim_id": "00000000-0000-4000-8000-0000000000c1", "iccid": "8900000000000000000", "package_name": "Japan · 1 GB · 7 days", "volume_bytes": 1073741824, "duration": 7, "duration_unit": "DAY", "cost_minor": 450, "currency": "EUR", "new_balance_minor": 23650 }}Responses
Section titled “Responses”Any 2xx answer marks the delivery done. Anything else, no answer within 10 seconds or a redirect counts as a failed attempt. A delivery gets up to 6 attempts, retried after 1, 5, 15, 60 and 360 minutes.

