Webhooks
Webhooks feature allows you to get a real-time stream of events sent to your HTTPS endpoint. Webhooks alert you about events that have just occurred - for instance, a user displayed an In-App campaign, or subscribed to push notifications.
Combined with our Export API, they are often used to:
- Orchestrate multi-channel communications
- Keep your user profile data in sync with Batch related events
Webhooks is a paid option and will be setup with the help of your Solutions Engineer. Please contact us if you are interested.
Overview
HTTPS requests sent to the endpoint by Batch:
- will use the POST method/verb.
- will contain a JSON data payload (
Content-Type: application/json
). - will be identified with User agent (
User-Agent: Batch.com/1.0
). - will be authenticated (see below).
- will be sent at least once (depending on retries).
Requirements
- Endpoint must use HTTPS (valid SSL certificate issued by a recognized authority).
- Response time should be under 100 milliseconds (ms) and endpoint must be localized in the EU area.
- Response body won't be handled by Batch. We are only expecting an HTTP 200 or 201 status code.
- Endpoint should be able to deduplicate events based on their ID if uniqueness is required.
Authentication
Secret key
In order to authenticate with your endpoint, Batch will provide your Webhook Secret as the value of the X-Authorization
header.
X-Authorization: BATCH_WEBHOOK_SECRET
OAuth2
Alternatively, if your endpoint supports an OAuth2 authentication, the header will pass the OAuth2 Access Token under the standard Authorization
header:
Authorization: Bearer OAUTH2_ACCESS_TOKEN
You'll have to provide Batch with the full URL of your authorization endpoint, and a set of grant_type
, client_id
and client_secret
credentials.
Retries
If your endpoint fails to return a 200 or 201 status code Batch will retry periodically using an exponential backoff.
Your endpoint might be disabled if we receive too many errors over a long period: if that happens a manual intervention is required to enable the endpoint.
Batching
Batch supports delivering more than one event in a single HTTP request. This is useful to increase the delivery throughput and reduce the load on your endpoints.
Batching can be configured with the following properties:
- max size which is the maximum number of events that should be in a batch. A batch is guaranteed to never have more than this number of events however it can have less events.
- max wait time which is the maximum amount of time to wait before the batch is sent regardless of its size.
For example if batching is enabled with a max size of 10 and a max wait time of 5s the following will happen:
- the batch is sent as soon as 10 events are generated
- the batch is sent after 5s even if less than 10 events are generated
Batching is disabled by default. If you decide to enable it you can choose values in the following ranges:
- max size must be between 10 and 1000.
- max wait time must be between 1s and 30s.
If you don't choose values Batch will use default values:
- max size of 100.
- max wait time of 5s.
Data payload
The body of the request will contain a valid JSON payload describing a message and a single event (or a batch of events).
Here is how a complete JSON payload for a single event looks like:
{
// version of this message
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
// fields provided on every event
"event_type": "push_campaign_sent",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
// related identifiers
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002"
},
// additional properties (optional)
"properties": {}
}
A batch of events is composed of a number of single events in an array. The format of each event is the same as the example above.
Here is how a complete JSON payload for a batch of events looks like:
{
// version of the batch
"version": 1,
"events":
[
{
// version of this message
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
// fields provided on every event
"event_type": "push_campaign_sent",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
// related identifiers
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002"
},
// additional properties (optional)
"properties": {}
},
{
...
}
]
}
Test events
When configuring your Webhook endpoint Batch can send test events which can help you test and validate your code.
The payload will have the same format as a normal event, other than its event_type
which will always be prefixed with test_
.
All data in a test event will be randomly generated so take care not to save it.
Event types
push_campaign_sent
Event generated for every Push notification sent in a campaign.
{
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
"event_type": "push_campaign_sent",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002",
"campaign_token": "566acd78ebdafceadc8b6fac0eec72ba"
}
}
push_campaign_open
Event generated for every Push notification opened in a campaign.
{
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
"event_type": "push_campaign_open",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002",
"campaign_token": "566acd78ebdafceadc8b6fac0eec72ba"
}
}
push_campaign_undelivered
Event generated for every Push notification not delivered in a campaign.
{
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
"event_type": "push_campaign_undelivered",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002",
"campaign_token": "566acd78ebdafceadc8b6fac0eec72ba"
},
"properties": {
"reason": "error",
"error_code": "apns_invalid_token"
}
}
Reasons:
uninstalled
: installation's push token has been unregisterederror
: an error has been returned by the push API (see error code)capping_limit
: installation has reached a capping ruleexpired
: notification reached TTL before delivery
push_transactional_sent
Event generated for every Push notification sent in a Transactional API request.
{
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
"event_type": "push_transactional_sent",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002",
"group_id": "new_friend_request",
"transactional_token": "3f98fd8c-4f44-4b8c-8f53-bf25de639b5a"
}
}
push_transactional_open
Event generated for every Push notification opened in a Transactional API request.
{
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
"event_type": "push_transactional_open",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002",
"group_id": "new_friend_request",
"transactional_token": "3f98fd8c-4f44-4b8c-8f53-bf25de639b5a"
}
}
push_transactional_undelivered
Event generated for every Push notification not delivered in a Transactional API request.
{
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
"event_type": "push_transactional_undelivered",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002",
"group_id": "new_friend_request",
"transactional_token": "3f98fd8c-4f44-4b8c-8f53-bf25de639b5a"
},
"properties": {
"reason": "error",
"error_code": "apns_invalid_token"
}
}
Reasons:
not_found
: no installation could be found for the supplied IDunreachable
: no push token could be found for the supplied IDuninstalled
: installation's push token has been unregisterederror
: an error has been returned by the push API (see error code)capping_limit
: installation has reached a capping ruleexpired
: notification reached TTL before delivery
in_app_campaign_displayed
Event generated for every In-app message displayed in a campaign.
{
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
"event_type": "in_app_campaign_displayed",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002",
"campaign_token": "566acd78ebdafceadc8b6fac0eec72ba"
}
}
in_app_campaign_clicked
Event generated for every In-app message clicked in a campaign.
{
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
"event_type": "in_app_campaign_clicked",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002",
"campaign_token": "566acd78ebdafceadc8b6fac0eec72ba"
},
"properties": {
"cta_action": "batch_deeplink"
}
}
in_app_campaign_closed
Event generated for every In-app message closed in a campaign.
{
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
"event_type": "in_app_campaign_closed",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002",
"campaign_token": "566acd78ebdafceadc8b6fac0eec72ba"
}
}
push_reachability_change
Event generated whenever an installation's reachability status change (eg: opt-in, opt-out, uninstall the app etc.).
{
"version": 1,
"api_key": "5306192C3549E92B2633D782D8A37X",
"event_type": "push_reachability_change",
"event_id": "230ca290-b71d-11ea-8b8a-0242c0a8042a",
"occurred_at": "2020-06-25T19:50:30",
"ids": {
"install_id": "D0153F35-6568-4DC7-9BBB-D1A498411637",
"custom_id": "7d544a8b7512115fd0d2bee3ab3e",
"advertising_id": "3b671754-07df-11eb-adc1-0242ac120002"
},
"properties": {
"is_reachable": true,
"is_optin": true,
"has_custom_id": true
}
}
Properties:
is_reachable
: installation has a push tokenis_optin
: installation enabled Push notifications for the apphas_custom_id
: installation is linked to a user profile