Payments
Walk-Out Checkout
Last updated 19 May 2026
Walk-Out Checkout
Charge a customer's saved card when their appointment ends — one tap, no checkout queue. Built for repeat clients who've consented to off-session billing. A seven-step eligibility check flags edge cases (tips, discounts, expired cards, recent disputes) before auto-charging.
Where to find it — Web/Mobile: Settings → Card payments → Walk-out checkout toggle. Charge banner: appears on bookings in the checkout view when the customer's card is eligible.
TL;DR
- One-tap charge against a saved card after the appointment — no front-desk queue.
- Seven eligibility checks run before any charge to prevent surprises.
- Requires Stripe Connect, customer card on file, and explicit consent.
- Owner enables the venue toggle; charging works on web and mobile.
Why walk-out checkout
The standard checkout flow assumes the customer is at the till — cash, tap, terminal, gift card, etc. For repeat clients who've saved a card, walking through the standard checkout is friction:
"Sarah just had her balayage. She's running to school pickup. She's already paid her deposit; the remaining $80 sits on her saved card. Walk-out checkout charges it in one tap as she leaves."
The customer's confirmation receipt goes to her email; she doesn't have to slow down at the counter.
Turning it on
- Open Settings → Card payments.
- Find the Walk-out checkout card.
- Toggle on.
- Confirm in the dialog.
Pre-requisites:
- Stripe Connect active on your venue
- Owner role (Manager/Stylist can't toggle)
If Stripe isn't active, the toggle is disabled with: "Stripe payments must be active before enabling walk-out checkout."
The eligibility check
Before any walk-out charge fires, an eligibility engine runs seven checks in order:
| # | Check | If fails |
|---|---|---|
| 1 | Venue has walk-out toggle on | Ineligible (no banner) |
| 2 | Venue Stripe active (stripeAccountId + chargesEnabled) |
Ineligible |
| 3 | Customer found (by email then phone) | Ineligible — show "No card on file" |
| 4 | Card status is active |
Ineligible. needs_update routes to Review required with "Card needs updating" reason |
| 5 | Consent status is consented |
Ineligible |
| 6 | Card not expired (month/year vs current) | Review required with "Card has expired" reason |
| 7 | Amount sanity — checks for soft anomalies that should be human-reviewed | Review required with one of the reason chips below |
Amount-sanity soft reasons (route to review, don't block)
| Reason | What triggers it |
|---|---|
tip_added |
Tip > 0 on the order |
discount_applied |
Discount > 0 on the order |
gift_card_applied |
Gift card > 0 on the order |
price_changed |
Subtotal deviates >5% from booked price (tax-rounding allowance) |
Charge-failure soft reason
| Reason | What triggers it |
|---|---|
recent_charge_failure |
A walk-out or no-show charge against this card failed in the last 90 days |
The banner states
The walk-out charge banner appears at the top of the checkout view. Seven states render different banners:
| State | Visual | What you see |
|---|---|---|
| Loading | Muted | Spinner + "Checking eligibility…" |
| Eligible | Success border + CreditCard icon |
"Charge $80 on Visa ····4242. $20 deposit already applied." + Charge $80 button |
| Review required | Warning border + AlertTriangle |
Reason chips ("Tip added", "Discount applied", etc.) + Charge $80 button (you confirm) |
| Blocked | Muted | "No card on file — use standard checkout" |
| Pending | Spinner | "Charging Visa ····4242…" |
| Failed | Destructive border + XCircle |
"Charge failed: card declined" + Retry button |
| Success | Success border + CheckCircle2 |
"$80 charged to Visa ····4242 · {date}" |
Triggering the charge
When the banner is Eligible:
- Tap Charge $80.
- The system creates a Stripe PaymentIntent with idempotency key
walkout_{orderId}so retries don't double-charge. - The booking is marked complete on success.
- The customer's emailed receipt goes out automatically.
For Review required state, the same Charge button works — you've manually acknowledged the reason and approved.
How "review required" differs from "ineligible"
| State | Banner | Charge possible? |
|---|---|---|
| Eligible | Green | Yes — one tap |
| Review required | Amber | Yes — you confirm before tapping |
| Blocked / Ineligible | Muted | No — use standard checkout |
The point of Review required is to flag things you should double-check (a $5 tip, a card you didn't realise expired) without forcing you to manually run the full standard checkout for every visit.
Audit trail
Every charge attempt — successful or failed — writes to paymentChargeAudit with:
- Attempt type:
walkout_charge - Eligibility status snapshot
- Reason codes snapshot (if any)
- Outcome: succeeded / failed / requires_action
- Customer ID, booking ID, amount, currency
- The staff member who triggered it
- Stripe Payment Method ID used
Visible in the booking detail history section for full traceability.
Settings location
| Setting | Where |
|---|---|
| Walk-out enabled (venue toggle) | Settings → Card payments → Walk-out checkout |
| Customer card on file | Per-customer; see Saved Payment Methods |
| Customer consent | Captured at card-save time; see Saved Payment Methods |
Mobile parity
Full parity. Same eligibility engine; same banner states; same Charge action. The Tap-to-Pay surcharge notice is independent (walk-out runs server-side, not via the mobile NFC SDK).
Tier
All plans, requires Stripe Connect active on your venue. No PRO requirement on the underlying feature (the UI may show a PRO badge in some contexts but the gating is Stripe Connect activation, not subscription tier).
Common mistakes
| Problem | What to check |
|---|---|
| Banner shows "No card on file" | Customer hasn't saved a card. Send them a card-update link so they can add one. |
| Banner shows "Card has expired" | Card month/year is past. Send a card-update link. |
| Banner shows "Review required: Tip added" | A tip was added to the order. Tap Charge if you want to proceed; or remove the tip and re-check. |
| Charge failed with "card declined" | Standard Stripe decline. Retry, or fall back to in-person standard checkout with a different payment method. |
| Charge succeeded but the booking isn't marked complete | Refresh the booking. The complete step runs after the charge succeeds; brief race window possible. |
| Idempotency error on Retry | The first charge actually succeeded — refresh and you'll see the green success banner. |
| Walk-out toggle is disabled | Stripe Connect isn't active. Complete Stripe onboarding first (Settings → Card payments → Connect with Stripe). |
FAQ
What is walk-out checkout?
A one-tap charge against a customer's saved card after the appointment, so they don't have to queue at the front desk. The booking gets marked complete and the saved card is charged for the order total. Useful for repeat clients with card on file.
What can stop a walk-out charge?
Seven eligibility checks run before any charge: venue feature enabled, Stripe active, customer resolved, card active, consent valid, card not expired, no recent disputes, and a sanity check on amount (large discounts, tips, or gift card applications route to a 'review required' state rather than auto-charge).
What happens if the eligibility check flags something?
The card-on-file banner shows 'Review required' with reason chips ('Tip added', 'Discount applied', 'Gift card applied', 'Card expired', etc.). You can review and either proceed with the charge or fall back to standard checkout.
How do I enable walk-out checkout?
Settings → Card payments → Walk-out checkout toggle. Owner-only. Requires Stripe Connect to be active first. Once enabled, the walk-out charge banner appears on bookings where the customer has an eligible card on file.
Does walk-out work with discounts and gift cards?
It does, but those trigger the Review required state because they're unusual line items (gift cards reduce the cash due; discounts change the price). The system asks you to confirm before charging.
Does the customer get a receipt?
Yes — the same hosted receipt + PDF that every checkout generates goes to their email automatically after the charge succeeds.