POST from
Brudcast to your URL, with a JSON envelope whose data object depends on the event type. You choose
the types under Subscribe to events in Developers > Webhooks, or in the events array on
the platform API (https://core-service.prod.brudcast.com/api/v1/user, scope webhooks:write).
Headers
HTTP header names aren’t case-sensitive. Many frameworks give them to you in lowercase, for example
x-webhook-signature.
Envelope
Every event, whatever its type, arrives in the same four fields.string
required
The delivery’s ID, a UUID. It stays the same across automatic retries and manual resends. Use it
to skip deliveries you’ve already processed.
string
required
The event type, for example
push.token_invalidated.object
required
The event’s data. Its fields are listed per event below.
integer
required
Unix time, in seconds, when Brudcast recorded the delivery. This isn’t the time of the current
attempt: retries and manual resends carry the original value.
Delivered events
These two are the only event types Brudcast sends today.push.token_invalidated
Firebase Cloud Messaging reported a device token as no longer registered, as registered to a
different Firebase project, or as malformed. Brudcast expires the device so campaigns stop
addressing it, then sends this event. It fires once per device: a later report about a device that’s
already expired sends nothing.
string
required
The ID of the device record on the contact. It matches the
id of one entry in the contact’s
pushNotifications array.string
required
The contact the device belongs to.
string
required
The push application the token was registered with.
string
required
The device platform:
ios, android or web.string | null
required
The reason Firebase gave, as text. The wording comes from Firebase and can vary, so don’t match
on it.
string | null
required
When the token was rejected, as an ISO 8601 timestamp.
tokenId and stops sending to it from your own systems
too. For example, it deletes the token from your user’s profile so the app registers a fresh one on
its next launch.
test.event
You selected Test Webhook on the endpoint, or called POST /webhook-endpoints/{id}/test. It
goes to that endpoint only. It’s sent whether or not the endpoint subscribes to test.event, and
even while the endpoint is disabled.
string
required
Always
This is a test webhook delivery.string
required
When the test was requested, as an ISO 8601 timestamp. Unlike the envelope’s
timestamp, this
one is a string.test.event reaches any endpoint on demand, it’s the way to prove your URL, signature check
and delivery_id handling work before you rely on them.
Events that aren’t delivered
The dashboard lists these, and the API accepts them inevents, but Brudcast doesn’t send
deliveries for them, so they have no payload to document. The right-hand column gives the public API
call that answers the same question.
Subscribing with the API
Theevents array on POST /webhook-endpoints and PATCH /webhook-endpoints/{id} accepts any
event type on this page, including test.event. On PATCH, the array replaces the endpoint’s whole
subscription. To add one event, send the full list.
The dashboard groups events as Email Events, Contact Events, Campaign Events and Push
Events. It doesn’t list test.event, because test deliveries are sent whatever the subscription.
Where the payload appears in Brudcast
The delivery log stores each delivery’sdata object. It appears as Request Body in the
delivery details in the dashboard, and as payload on delivery records from
GET /webhook-deliveries. Neither shows the envelope around it.
Related
Verify signatures
Check
X-Webhook-Signature before you trust the body.Deliveries and retries
What counts as delivered, the backoff schedule and the delivery log.
Create an endpoint
Register a URL, pick events and save the secret.
Register device tokens
Where the tokens in
push.token_invalidated come from.