Webhook retries and failed deliveries

TripWorks retries a failed webhook up to 6 times over about 8 hours. See which responses retry, which stop at once, and how to catch up after an outage.

Written By Melanie Gannone (Super Administrator)

Updated at October 24th, 2026

If your server is down or slow when a webhook arrives, TripWorks doesn't give up on the first try. It retries on a schedule, up to six attempts in total over about eight and a half hours. If every attempt fails, the delivery is marked failed and TripWorks stops trying for that event.

This page covers what triggers a retry, the schedule, what happens after the last attempt, and how to catch up if you missed events.

What happens after each attempt

Webhook delivery outcomes in TripWorks: a 2xx answer is delivered, a 5xx, 429 or no answer retries up to 6 attempts in total, and any other 4xx stops with no retry
The status your endpoint returns decides whether TripWorks delivers, retries, or stops.

Which responses are retried

  • Any 2xx: marked delivered, with no more attempts.
  • 500 or any other 5xx: retried on the schedule below.
  • 429 (too many requests): retried on the schedule below.
  • No answer within 15 seconds, or a connection failure: retried on the schedule below.
  • A host name that can't be found: retried on the schedule below.
  • Any other 4xx, such as 400, 401, 403, or 404: stops. The delivery is marked failed with no retry.
  • An address TripWorks refuses to send to: stops. It's cancelled with no retry.

A 4xx tells TripWorks the request itself is the problem, so sending it again wouldn't help. Fix the endpoint, then trigger a new event.

The retry schedule

Each wait starts when the previous attempt fails. TripWorks adds a small random offset to each wait so many failed deliveries don't all retry at the same moment.

  • Attempt 1: about 5 seconds after the event.
  • Attempt 2: about 1 minute after attempt 1 fails.
  • Attempt 3: about 5 minutes after attempt 2 fails.
  • Attempt 4: about 30 minutes after attempt 3 fails.
  • Attempt 5: about 2 hours after attempt 4 fails.
  • Attempt 6: about 6 hours after attempt 5 fails.

If attempt 6 fails, the delivery is marked failed. Retries never change the event: the same Idempotency-Key is sent each time, and X-TripWorks-Delivery-Attempt counts up from 1.

A delivery that gets stuck in progress for about 15 minutes is treated as lost and picked up again automatically.

After the last attempt

A failed delivery is not sent again automatically, and the endpoint keeps receiving new events as normal. The app doesn't show a delivery log, and a failed delivery is also recorded in the audit log for the affected record. TripWorks keeps delivery records for 90 days.

Catch up after an outage

When your server was down for hours, some events may have exhausted all six attempts. To catch up:

  1. Note when your outage started and ended.
  2. Use the REST API to list the trips, payments, or customers changed in that window.
  3. Compare the results with what you stored and fill the gaps.
  4. Make sure your receiver saves each Idempotency-Key so a late retry doesn't create a duplicate.

Make your receiver retry-friendly

  • Return a 2xx as soon as you've saved the payload. Do slow work afterward.
  • Return a 5xx only for real, temporary problems. A 5xx tells TripWorks to retry.
  • Don't return a 4xx for a duplicate. Answer 200 so the retry stops.
  • Save the Idempotency-Key with every event you process.

Examples

  • Survive a 20-minute deploy: restart your server. Attempts at 1, 5, and 30 minutes mean most events land once it's back.
  • Spot a retry in your logs: search for X-TripWorks-Delivery-Attempt values above 1.
  • Stop a retry storm: return 200 for events you already processed, instead of an error.
  • Find out why an event never arrived: check whether your endpoint returned a 4xx, because that stops delivery immediately.

Frequently asked questions

Does TripWorks retry a failed delivery?

Yes, up to six attempts in total. Timeouts, connection failures, 5xx, and 429 responses are retried. Other 4xx responses are not.

How long does TripWorks keep retrying?

About eight and a half hours from the first attempt, across the six attempts.

Why wasn't my 404 retried?

A 404 or other 4xx means the request itself was rejected, so TripWorks stops. Fix the URL or endpoint, then trigger a new event.

Can I resend a failed webhook?

Not from the app. Failed deliveries aren't resent on their own either. Use the REST API to fetch what you missed, or contact support.

Will my endpoint be switched off if it keeps failing?

No. The endpoint stays on and receives future events. Only the failed event is dropped after its last attempt.

Will I get the same event more than once?

Possibly. If your server processed an event but the reply was lost, the retry sends it again. Deduplicate with the Idempotency-Key.

What does TripWorks do if my host name doesn't resolve?

It treats that as a temporary failure and retries on the schedule.

Built for attractions, tours & activities

Wire TripWorks into everything else

See how attractions, tours, and activities push bookings, payments, and waivers into their own systems in real time on TripWorks. Book a demo and make the switch.

Can't find what you're looking for?

Our team is here to help. Reach out and we'll get back to you as soon as possible.

Contact us →