Troubleshooting

Error messages from holds, checkout, staffing, refunds, and setup, with causes and fixes.

Holds and checkout

MessageCause and fix
Departure is not on saleThe tour is not active, the departure status does not allow sales, or the cutoff has passed (60 minutes by default)
Not enough seatsThe request is above seats left, which count held seats and unsold channel allocation
Ticket not offered on this tourThe ticket id is wrong or the ticket is inactive
Add-on unavailableThe add-on's per-departure inventory is used up
Promo code is not validWrong code, paused, outside its dates, or not for this tour
Promo code is fully usedmaxUses reached, counting reserved and committed uses
Guest proof must contain 32–256 charactersThe hold token is too short or too long
Hold expired; choose seats againMore than 10 minutes passed before checkout started
Provide one participant per ticketThe participant count must equal the ticket count
name does not meet the age range for ticketA participant's age is outside the ticket's range
Lead booker name and email requiredFill in both
Payment provider is not configuredNo installed provider with code pp_stripe. Run setup or create one
Payment not completedStripe has not marked the payment succeeded
Payment amount does not match the booking; operator reconciliation requiredStripe's amount or currency differs. Check the payment in Stripe
Seats were no longer available; payment refundedThe hold had expired and the seats were sold. The payment was refunded
Booking not foundWrong code, wrong email, or a hold token that does not match

Staffing and departures

MessageCause and fix
Valid name certification requiredThe guide's certification is missing or expires before the departure ends
Guide has an overlapping accepted assignmentThe guide is already on another departure at that time
Guide is unavailableA time-off block in GuideAvailability.unavailable covers it
Guide or departure unavailableThe guide is inactive or an id is wrong
Resource does not satisfy this tourThe resource kind differs from the tour's requiresResourceKind, or it is in maintenance
Resource pool overlaps another departureThe pool quantity is used by an overlapping departure
Resource seats below active reservationsThe new vehicle has fewer seats than booked and held
Capacity must cover reservations and stay within tour maximumA resize went below booked and held seats or above the tour maximum
Capacity exceeds resource seatsA resize went above the assigned vehicle's seats
Departure is closedThe departure is completed or cancelled
Only an ended closed/in-progress departure can completecloseDeparture needs a closed or in_progress departure that has ended
Departure already ranA completed or in-progress departure cannot be cancelled
Reason must be weather, operator or min_not_metUse one of the three reasons

Refunds

MessageCause and fix
Booking cannot be refundedThe booking is not in a refundable status
Reason requiredEnter a reason
Refund exceeds captured amountThe amount is more than was paid and not yet refunded
No captured payment to refundThe booking has no payment
Independent manager approval is requiredThe amount is over the threshold and no approval id was given
Correction requires approval by a different managerThe approver is the requester
Manager approval does not match this correction requestBooking, amount, or reason differs from the request, or it is not the requester calling
Manager approval is already consumed / has expiredRequest a new approval
Only confirmed bookings can be cancelledA guest can cancel only a confirmed booking
Departure has startedA guest cannot cancel after the start

If a refund stays unknown, the provider did not answer. Check Stripe, then call again with the same idempotency key.

Setup and access

MessageCause and fix
Not authorizedThe role lacks the flag for this operation
Idempotency key required (maximum 200 characters)Pass an idempotencyKey
Idempotency key was already used with a different requestUse a new key for different input
SESSION_SECRET of at least 32 characters is requiredSet a longer secret
Unsupported setup recordThe setup helper accepts only its listed entities
Unknown permissionA seed role names a flag that does not exist
Waiver link not valid / Waiver unavailableThe token is wrong, or the template is not published

If the dashboard shows no lists, check that the admin meta query succeeds. If a page shows empty data for a signed-in user, the role probably lacks the flag the screen reads.

On this page