A traveller paid but the booking still shows as pending
Diagnose provider payments that did not confirm the booking in Tripistic.
- payments
- stripe
- paypal
- webhooks
- troubleshooting
Bookings confirm only after a verified provider signal. Stripe uses its signed webhook; PayPal uses a verified capture response or signed webhook. A browser redirect by itself never confirms a booking.
Check in this order
1. Was the webhook delivered?
Open the Stripe or PayPal developer dashboard → your Tripistic webhook endpoint → Events.
| What you see | Meaning |
|---|---|
| No event for that payment | The event type is not subscribed |
| Event with a failed delivery | Endpoint unreachable or rejected the request |
Event delivered 200 | Webhook worked — see step 4 |
2. Is the signing secret correct?
A 400 on delivery almost always means the signing secret does not match. This is most common after switching between test and live mode, or after redeploying to a new environment.
Fix: copy the signing secret from the provider and paste it into Settings → Payments. Stripe test/live and PayPal sandbox/production credentials are different environments.
3. Are the right events subscribed?
Stripe needs at minimum payment_intent.succeeded, payment_intent.payment_failed, and charge.refunded. PayPal needs a registered webhook with signature verification enabled, plus Partner Referrals merchant status showing payments receivable.
4. Had the booking already expired?
If the traveller took longer than your pending-payment window, the sweep may have already cancelled the booking and released the seats. The payment succeeded but there is no live booking to confirm.
Fix now: refund the payment or apply it to a new booking you create manually. Fix permanently: lengthen the expiry window in Settings → Payments.
Resolving the immediate case
Once the cause is fixed, resend the event from the provider dashboard or run the provider reconciliation path. The booking confirms and the confirmation email is queued.
If the booking was already released, create it manually and mark it paid, referencing the provider payment/order ID in the booking notes so reconciliation stays clean.
Preventing it
- Test the full payment flow after any environment change.
- Check the webhook log before peak season rather than during it.
- Set an expiry window that matches how your travellers actually pay.
Related
Did this answer your question?
If not, tell us what was missing — help articles are rewritten based on what people still have to ask afterwards. Send feedback.