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, andPATCH /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.
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, callPOST /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
400withCannot 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
attemptCountfirst. - The body is the same. A resend carries the original
delivery_idandtimestamp.
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’sdata) 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.
Related
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.