Webhooks
List webhook event types
Every event type a URL can be subscribed to. The list is fixed; it is not per account.
contact.created, contact.updated, contact.unsubscribed, form.submitted, segment.entered, segment.exited, sequence.completed, email.clicked, email.opened, webinar.registered, webinar.attended, webinar.missed, purchase.completed, purchase.refunded, subscription.renewed, subscription.payment_failed, subscription.cancel_pending, subscription.reactivated, subscription.canceled, subscription.trial_endingOpaque. Pass back as cursor for the next page. Null when there is no continuation — which for most endpoints means the last page, and always means a collection that is not paginated. The account-wide event feed is the exception: it returns a resumable cursor even on its final page (see that endpoint).
The event catalog. Not paginated.
The request failed validation, or a referenced record was rejected.
The tenant slug, or the record the path names, does not exist.
curl -X GET "https://api.radarsend.com/t/acme/api/webhooks/event-types" \ -H "X-API-Key: $RADARSEND_API_KEY"
const res = await fetch('https://api.radarsend.com/t/acme/api/webhooks/event-types', {
method: 'GET',
headers: { 'X-API-Key': process.env.RADARSEND_API_KEY },
});
const data = await res.json();{
"data": [
{
"type": "contact.created",
"name": "Acme onboarding",
"description": "string"
}
],
"next_cursor": "eyJpZCI6IjljMjE4OTVkIn0",
"has_more": true
}Get a sample delivery for an event type
One example of the body a subscription to this event type receives, with invented values. Use it to map fields before a real event has arrived (Zapier calls this the "perform list").
One type from the catalog.
Opaque. Pass back as cursor for the next page. Null when there is no continuation — which for most endpoints means the last page, and always means a collection that is not paginated. The account-wide event feed is the exception: it returns a resumable cursor even on its final page (see that endpoint).
A one-item list holding the sample delivery.
The request failed validation, or a referenced record was rejected.
The tenant slug, or the record the path names, does not exist.
curl -X GET "https://api.radarsend.com/t/acme/api/webhooks/event-types/{type}/sample" \
-H "X-API-Key: $RADARSEND_API_KEY"const res = await fetch('https://api.radarsend.com/t/acme/api/webhooks/event-types/{type}/sample', {
method: 'GET',
headers: { 'X-API-Key': process.env.RADARSEND_API_KEY },
});
const data = await res.json();{
"data": [
{}
],
"next_cursor": "eyJpZCI6IjljMjE4OTVkIn0",
"has_more": true
}List webhook subscriptions
Every subscription in the account, newest first, including ones switched off in the last 30 days.
Only this event type.
False once the subscription has been switched off; see disabled_reason.
target_gone: your endpoint answered 410. delivery_failing: deliveries failed for a day. credential_revoked: the API key that created it no longer works (revoked, expired, or its connection disconnected) and its service account has no working key left.
target_gone, delivery_failing, credential_revoked, nullcontact.created, contact.updated, contact.unsubscribed, form.submitted, segment.entered, segment.exited, sequence.completed, email.clicked, email.opened, webinar.registered, webinar.attended, webinar.missed, purchase.completed, purchase.refunded, subscription.renewed, subscription.payment_failed, subscription.cancel_pending, subscription.reactivated, subscription.canceled, subscription.trial_endingWhat the subscription is narrowed to. Empty when it receives every event of its type.
True when the form, list or sequence the filter names has been deleted. The subscription can never fire again; remove it.
Whether deliveries are signed. The secret itself is never returned.
Keep this: it is what you pass to unsubscribe.
Scheme and host of the subscribed URL. The path is never returned: it is usually a secret.
Opaque. Pass back as cursor for the next page. Null when there is no continuation — which for most endpoints means the last page, and always means a collection that is not paginated. The account-wide event feed is the exception: it returns a resumable cursor even on its final page (see that endpoint).
Subscriptions. Not paginated (an account has at most 100).
The request failed validation, or a referenced record was rejected.
The tenant slug, or the record the path names, does not exist.
curl -X GET "https://api.radarsend.com/t/acme/api/webhooks/subscriptions" \ -H "X-API-Key: $RADARSEND_API_KEY"
const res = await fetch('https://api.radarsend.com/t/acme/api/webhooks/subscriptions', {
method: 'GET',
headers: { 'X-API-Key': process.env.RADARSEND_API_KEY },
});
const data = await res.json();{
"data": [
{
"id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80",
"event_type": "contact.created",
"target_url_display": "string",
"filter": {},
"filter_target_missing": true,
"has_hmac_secret": true
}
],
"next_cursor": "eyJpZCI6IjljMjE4OTVkIn0",
"has_more": true
}Subscribe a URL to an event type
Every event of this type in the account is POSTed to target_url from now on. Subscribing the same URL to the same event type again returns the existing subscription (200) and switches it back on if it had been switched off.
contact.created, contact.updated, contact.unsubscribed, form.submitted, segment.entered, segment.exited, sequence.completed, email.clicked, email.opened, webinar.registered, webinar.attended, webinar.missed, purchase.completed, purchase.refunded, subscription.renewed, subscription.payment_failed, subscription.cancel_pending, subscription.reactivated, subscription.canceled, subscription.trial_endingAn http(s) URL that answers a JSON POST with a 2xx.
Optional. Narrows the subscription to one thing: form_id for form.submitted, segment_key (a list or segment key) for segment.entered and segment.exited, sequence_id for sequence.completed. Other event types take no filter.
Optional. When set, each delivery is signed with it. Write-only.
False once the subscription has been switched off; see disabled_reason.
target_gone: your endpoint answered 410. delivery_failing: deliveries failed for a day. credential_revoked: the API key that created it no longer works (revoked, expired, or its connection disconnected) and its service account has no working key left.
target_gone, delivery_failing, credential_revoked, nullcontact.created, contact.updated, contact.unsubscribed, form.submitted, segment.entered, segment.exited, sequence.completed, email.clicked, email.opened, webinar.registered, webinar.attended, webinar.missed, purchase.completed, purchase.refunded, subscription.renewed, subscription.payment_failed, subscription.cancel_pending, subscription.reactivated, subscription.canceled, subscription.trial_endingWhat the subscription is narrowed to. Empty when it receives every event of its type.
True when the form, list or sequence the filter names has been deleted. The subscription can never fire again; remove it.
Whether deliveries are signed. The secret itself is never returned.
Keep this: it is what you pass to unsubscribe.
Scheme and host of the subscribed URL. The path is never returned: it is usually a secret.
Default Response
Default Response
The request failed validation, or a referenced record was rejected.
The tenant slug, or the record the path names, does not exist.
curl -X POST "https://api.radarsend.com/t/acme/api/webhooks/subscriptions" \
-H "X-API-Key: $RADARSEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_type": "contact.created",
"target_url": "https://example.com",
"filter": {
"form_id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80",
"segment_key": "welcome-series",
"sequence_id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80"
},
"hmac_secret": "string"
}'const res = await fetch('https://api.radarsend.com/t/acme/api/webhooks/subscriptions', {
method: 'POST',
headers: {
'X-API-Key': process.env.RADARSEND_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"event_type": "contact.created",
"target_url": "https://example.com",
"filter": {
"form_id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80",
"segment_key": "welcome-series",
"sequence_id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80"
},
"hmac_secret": "string"
}),
});
const data = await res.json();{
"id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80",
"event_type": "contact.created",
"target_url_display": "string",
"filter": {
"form_id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80",
"segment_id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80",
"segment_key": "welcome-series",
"sequence_id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80"
},
"filter_target_missing": true,
"has_hmac_secret": true
}Get a webhook subscription
False once the subscription has been switched off; see disabled_reason.
target_gone: your endpoint answered 410. delivery_failing: deliveries failed for a day. credential_revoked: the API key that created it no longer works (revoked, expired, or its connection disconnected) and its service account has no working key left.
target_gone, delivery_failing, credential_revoked, nullcontact.created, contact.updated, contact.unsubscribed, form.submitted, segment.entered, segment.exited, sequence.completed, email.clicked, email.opened, webinar.registered, webinar.attended, webinar.missed, purchase.completed, purchase.refunded, subscription.renewed, subscription.payment_failed, subscription.cancel_pending, subscription.reactivated, subscription.canceled, subscription.trial_endingWhat the subscription is narrowed to. Empty when it receives every event of its type.
True when the form, list or sequence the filter names has been deleted. The subscription can never fire again; remove it.
Whether deliveries are signed. The secret itself is never returned.
Keep this: it is what you pass to unsubscribe.
Scheme and host of the subscribed URL. The path is never returned: it is usually a secret.
Default Response
The request failed validation, or a referenced record was rejected.
The tenant slug, or the record the path names, does not exist.
curl -X GET "https://api.radarsend.com/t/acme/api/webhooks/subscriptions/9c21895d-57f0-4a15-a1df-4dc6835d4f80" \ -H "X-API-Key: $RADARSEND_API_KEY"
const res = await fetch('https://api.radarsend.com/t/acme/api/webhooks/subscriptions/9c21895d-57f0-4a15-a1df-4dc6835d4f80', {
method: 'GET',
headers: { 'X-API-Key': process.env.RADARSEND_API_KEY },
});
const data = await res.json();{
"id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80",
"event_type": "contact.created",
"target_url_display": "string",
"filter": {
"form_id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80",
"segment_id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80",
"segment_key": "welcome-series",
"sequence_id": "9c21895d-57f0-4a15-a1df-4dc6835d4f80"
},
"filter_target_missing": true,
"has_hmac_secret": true
}Unsubscribe
Removes the subscription. Deliveries already queued for it are dropped, not sent.
Default Response
The request failed validation, or a referenced record was rejected.
The tenant slug, or the record the path names, does not exist.
curl -X DELETE "https://api.radarsend.com/t/acme/api/webhooks/subscriptions/9c21895d-57f0-4a15-a1df-4dc6835d4f80" \ -H "X-API-Key: $RADARSEND_API_KEY"
const res = await fetch('https://api.radarsend.com/t/acme/api/webhooks/subscriptions/9c21895d-57f0-4a15-a1df-4dc6835d4f80', {
method: 'DELETE',
headers: { 'X-API-Key': process.env.RADARSEND_API_KEY },
});
const data = await res.json();