Webhooks
ExaRoutes can deliver a webhook every time a dynamic QR is scanned. Use webhooks to forward scan events to your own systems (CRM, data warehouse, Slack notifier, etc.).
Configuring a webhook
From the dashboard at Settings → Integrations, add a webhook URL. Each webhook is workspace- scoped and can be configured to fire on specific events:
scan.created: every dynamic QR scanform.submitted: every scan-to-form submissionqr.created,qr.updated,qr.deleteddomain.verified
Delivery format
{
"id": "evt_abc123",
"type": "scan.created",
"createdAt": "2026-04-25T15:00:00Z",
"data": {
"qrId": "qr_abc123",
"shortId": "ABC123",
"country": "US",
"region": "CA",
"device": "mobile",
"os": "iOS",
"browser": "Safari",
"isUnique": true
}
}Signing
Each webhook delivery includes a X-ExaRoutes-Signature header containing an HMAC-SHA256
signature of the request body, signed with your webhook secret. Verify it server-side before
trusting the payload.
Retries
Failed deliveries (non-2xx response or timeout) are retried with exponential backoff up to 5 attempts: 30s, 5m, 30m, 2h, 6h. After the final attempt, the delivery is marked failed and visible in the dashboard’s webhook delivery log.