Skip to main content
Base44 keeps trying until your receiver accepts an event or the retries run out. Design your receiver for the 3 things that follow from that: an event can arrive more than once, events can arrive out of order, and a slow answer counts as a failure.

What counts as delivered

Base44 treats a delivery as successful when your receiver answers with any 2xx status within 15 seconds. Everything else is retried:
  • Any other status, including 3xx, 4xx and 5xx.
  • A timeout or a network error.
Base44 never follows redirects. If your receiver answers with a 3xx, register the URL it redirects to instead.
Answer quickly and do the work afterwards. Accept the event, return a 2xx, then process it in the background. A receiver that takes longer than 15 seconds fails every delivery, even when it finishes the work.

Retry schedule

Base44 makes up to 8 attempts per event, over about 27.5 hours. Each delay counts from the previous attempt. After the 8th failed attempt, Base44 stops trying that event. Base44 keeps an event’s content for 7 days, so an event that’s been retried for longer than that can’t be sent again.

Handling duplicates

Delivery is at least once. If your receiver processes an event but its answer doesn’t reach Base44, for example because of a timeout, the event is sent again. Use the event’s id, also sent as the webhook-id header, to ignore an event you’ve already processed. It stays the same across every retry of that event. Store each id you’ve handled, and skip one you’ve seen before.

Order of events

Events can arrive out of order. A retry of an earlier event can arrive after a later one, so an app.published.v1 can reach you after an app.unpublished.v1 for the same app. To keep an accurate copy of each app, compare the timestamp in data with the last one you stored for that app, and ignore an older event.

Endpoint health and auto-pause

Each endpoint shows how its recent deliveries went. An event counts as a failed delivery only after all 8 attempts fail. A successful delivery resets both counts. To start an auto-paused endpoint again, fix your receiver and resume the endpoint. Resuming runs the activation test first, so your receiver has to echo the challenge again. See Setting up endpoints.