The webhook destination forwards events as JSON POST requests to any HTTPS endpoint you control. Use it for internal systems, custom integrations, or platforms we don’t have a first-party connector for.
1. Target URL
Destinations → Webhook → Connect. Paste the full URL. HTTPS only — plain HTTP is rejected.
2. Headers
Add any auth or content headers your endpoint expects. Common ones:
Authorization: Bearer <token>X-API-Key: <key>Content-Type: application/json(default)
Headers are encrypted at rest.
3. Event filter
By default the webhook receives all events. Restrict it to specific event types via the event filter (e.g., purchase, checkout_completed only).
4. Payload shape
Each POST body is a single event with eventabee’s canonical shape:
{
"event_id": "evt_01HZ...",
"event_name": "purchase",
"timestamp": "2026-04-19T10:14:22Z",
"shop": "store.myshopify.com",
"visitor_id": "vis_01HZ...",
"customer": { "email_hash": "...", "phone_hash": "..." },
"properties": { ... },
"context": { "ip": "...", "user_agent": "...", "utm": { ... } }
}
For a templated payload shape (different field names, nesting), use the Custom destination instead — it has a field mapper and JSON template.
Retries
Non-2xx responses retry with exponential backoff (up to 12 attempts over ~24 hours). After that, events land in a dead-letter queue you can inspect and replay from Destinations → Webhook → DLQ.
Consent
Webhook → whichever category you map it to. Default is Marketing (most webhook use cases are marketing-adjacent); override as appropriate.
Troubleshooting
- No events arriving. Confirm TLS is valid on your endpoint. Self-signed certs are rejected.
- Endpoint is slow. Set a generous timeout on your side. eventabee’s default timeout is 10s; requests past that retry.