Skip to main content
This page answers one question: what will hit my endpoint? Each delivery is an HTTP 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).
Brudcast currently sends deliveries for push.token_invalidated and test.event only. You can subscribe to the other event types, but no deliveries are sent for them. Don’t build a workflow that waits for one. Use the API calls under Events that aren’t delivered instead.

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.
The body Brudcast sends is compact JSON, with no spaces or line breaks. The examples on this page are formatted to make them easier to read. Always verify the signature against the bytes you received, not against JSON you’ve parsed and serialized again.

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.
A typical handler looks up the device by 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.
Because 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 in events, 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

The events 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’s data 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.

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.