Skip to main content
Each event sent to an endpoint becomes a delivery, and a delivery has one or more attempts. This page covers what Brudcast does with them, in the dashboard under Developers > Webhooks and on the platform API (https://core-service.prod.brudcast.com/api/v1/user) with an API key carrying webhooks:read or webhooks:write.

What counts as delivered

Because a 4xx or 5xx response ends the delivery, a handler that crashes after it reads the request doesn’t get a second chance. Store the event, return 200, then process it. Point the endpoint at its final URL rather than at one that redirects.

Attempts and backoff

Max Retries is the total number of attempts, including the first. The default is 5. The dashboard offers 0 to 5, and PATCH /webhook-endpoints/{id} accepts up to 20. After attempt n fails, the next attempt waits 5 × 2^(n − 1) seconds, up to a maximum of 24 hours. Brudcast checks for due deliveries every five seconds, so an attempt can start up to about five seconds after it’s due. The first attempt happens within a few seconds of the event. With the default of 5, Brudcast stops trying about 75 seconds after the first attempt. If your endpoint can be down for longer than that, during a deploy for example, raise Max Retries.
With Max Retries set to 0, Brudcast makes no attempts. Every delivery, including test events, is marked failed without being sent. Use at least 1.

Delivery statuses

When the last attempt fails, errorMessage begins with Max retries exceeded. Last error:, followed by the reason for that failure.

Resend a delivery

On the endpoint’s Delivery Logs tab, select the retry icon on a Failed row, or open any delivery that isn’t delivered and select Resend. With the API, call POST /webhook-deliveries/{id}/retry (scope webhooks:write). A resend puts the delivery back to pending and sends it straight away.
  • Delivered deliveries can’t be resent. The API returns 400 with Cannot retry a delivery that has already been delivered.
  • The attempt count isn’t reset. A delivery that has used all of its endpoint’s attempts is marked failed again, without being sent. Raise the endpoint’s Max Retries above the delivery’s attemptCount first.
  • The body is the same. A resend carries the original delivery_id and timestamp.

Read the delivery log

The endpoint’s Overview tab shows the last five deliveries under Recent Deliveries. Delivery Logs has the full history, filtered by Status and Event. Its HTTP column shows Timeout for any failed delivery that got no response. Select a row for its Request Body (the event’s data) and the Response Body your server returned. With the API, GET /webhook-deliveries (scope webhooks:read) lists deliveries newest first. Filter with webhookEndpointId, status (repeat the parameter for several values) and type, add includeAttempts=true for each delivery’s attempts, and page with limit and cursor until meta.hasMore is false.
GET /webhook-deliveries/{id} returns one delivery with all of its attempts. A delivery record carries id (sent to your server as delivery_id), type, payload, status, attemptCount, httpStatusCode, errorMessage, responseBody, nextRetryAt, deliveredAt and createdAt.

Create an endpoint

Register a URL, set the timeout and Max Retries, send a test.

Verify signatures

Why a rejected delivery still counts as delivered.

Events and payloads

What arrives in the body of every attempt.

Webhooks overview

How a delivery works, and the endpoint API.