What’s new in v2
| Feature | Legacy webhooks | Webhooks v2 |
|---|---|---|
| Subscriptions | 3 hardcoded URLs per campaign | Unlimited subscriptions per account |
| Event types | Fixed predefined list | Dynamic pattern-based selection |
| Campaign filtering | No — all events always fired | Subscribe to specific campaigns |
| Delivery tracking | Limited | Full history with status and response details |
| Retry control | Basic | Configurable retries (0–10) per subscription |
| Timeout | Fixed 15 s | Configurable per subscription (1–120 s) |
| Custom headers | Not supported | Arbitrary key/value headers |
| Signature | None | HMAC-SHA256 on every request |
| Secret rotation | No | Rotate any time without downtime |
Setting up a subscription
Navigate to Settings → Integrations → Webhooks and click Add new webhook.Subscription fields
The HTTPS endpoint that will receive webhook payloads. Must be a valid URL.
One or more event type strings to subscribe to. See Event Types for the full list.
Limit this subscription to events from specific campaigns. Use
[1] (the default) to receive events from all campaigns.Optional human-readable label for this subscription.
Enable or pause delivery without deleting the subscription. Defaults to
true.HTTP request timeout in seconds. Defaults to
30, maximum 120.How many times to retry a failed delivery before marking it as
failed. Defaults to 3, range 0–10.Custom HTTP headers to include on every request. Useful for API keys or authorization tokens your endpoint requires.
How delivery works
- An event occurs in your account (e.g., a referral is created).
- FirstPromoter checks your active subscriptions for matching event types and campaign filters.
- A delivery record is created for each matching subscription and dispatched asynchronously.
- Your endpoint receives a
POSTrequest with a JSON payload and signature headers. - Respond with any
2xxstatus code to acknowledge the delivery. - If the response is not
2xx, the delivery is retried according to yourmax_retriessetting.
timeout. If it does not respond in time, the attempt counts as a failure and will be retried.