Skip to main content

What counts as success

A delivery is considered successful when your endpoint returns any 2xx HTTP status code. Any other response (or a timeout) triggers a retry.

Retry schedule

Failed deliveries are retried with exponential backoff, capped at 240 seconds. The delay formula is:
delay = min(1000ms * 2^attempt, 240000ms)
AttemptDelayCumulative time
11 second1s
22 seconds3s
34 seconds7s
48 seconds15s
516 seconds31s
632 seconds~1 min
764 seconds~2 min
8128 seconds~4 min
9240 seconds~8 min
10240 seconds~12 min
After 10 failed attempts, the delivery is marked as failed and no further retries are made.
Retries are backed by Durable Object alarms, which means they survive infrastructure restarts and are guaranteed to execute.

Request timeout

Each delivery attempt has a 30-second timeout. If your server doesn’t respond within 30 seconds, the attempt is treated as a failure and the next retry is scheduled.
Return a 200 response immediately and process the event asynchronously. This prevents timeouts and ensures reliable delivery.

Delivery statuses

StatusMeaning
pendingDelivery is in progress or awaiting retry
successYour endpoint returned a 2xx response
failedAll 10 retry attempts were exhausted without a 2xx response

Viewing delivery logs

In the Bluvo Portal, navigate to Settings > Webhooks, select an endpoint, and click Deliveries to view the log. Each delivery record includes:
FieldDescription
Event typeThe webhook event (e.g., wallet.created)
Event IDThe unique eventId from the payload
Statuspending, success, or failed
AttemptsNumber of delivery attempts made
Response statusHTTP status code returned by your server
Response bodyFirst 1,000 characters of the response body
Error messageError details if the delivery failed (e.g., timeout, connection refused)
TimestampsWhen the delivery was created and last attempted

Tips

Immediately return 200 OK and enqueue the event for asynchronous processing. This prevents timeouts and keeps retry counts low.
Events may arrive out of order, especially when retries are involved. Use the timestamp field in the payload to determine event ordering if needed.
The same event may be delivered more than once. Track processed eventId values to avoid duplicate handling.
Regularly check the delivery logs in the Portal. If an endpoint consistently fails, verify the URL is reachable and returning 2xx responses.