When a partner’s endpoint expects a specific payload shape that the generic webhook can’t produce, use the custom destination. It’s a field mapper plus a JSON template — ship an integration in an afternoon instead of waiting on a connector.
1. Target URL and auth
Destinations → Custom → Connect. Paste the URL and configure auth (Bearer, API key header, or basic auth).
2. JSON template
Write a JSON template with Handlebars-style placeholders. Example for a fictional partner expecting a nested payload:
{
"event": {
"type": "{{event_name}}",
"ts": "{{timestamp_unix}}",
"source": "shopify"
},
"user": {
"id": "{{customer.id}}",
"email_sha256": "{{customer.email_hash}}"
},
"order": {
"total_cents": {{properties.value_cents}},
"currency": "{{properties.currency}}"
}
}
Available variables: any field from the canonical event plus helpers like timestamp_unix, timestamp_iso, now_iso, and properties.<key> accessors.
3. Field mapping
If the partner expects field names different from your event’s, use the field mapper to rename before the template renders.
4. Preview
The dashboard includes a Preview button that shows the exact request (URL, headers, body) the custom destination would make for a sample event. Use this before saving — it catches most bugs.
5. Save and send a test
Enable test mode and trigger an event. Confirm it lands in the partner system.
Consent
Set the consent category that fits — the destination is yours.
When to use custom vs. webhook
- Webhook: partner accepts eventabee’s canonical payload shape.
- Custom: partner expects a specific shape, or you want to send a subset of fields.
Troubleshooting
- Partner returns 400. Use the Preview button to inspect the exact body. Often it’s a type issue (string vs. number) — JSON templating preserves quotes only where you put them.
- Template errors. Syntax errors in the template surface in the destination’s error log with the exact line number.