Lesson 6 of 8 · 4 min

Requiring a Card at Booking

How the 'Require a card at booking' toggle works, what customers see during checkout, and how to customize the card-collection copy.

Requiring a Card at Booking

Video coming soon

6/8

Lesson Notes

01

In the same Billing & Cancellation section (Settings → Organization → [Your Org]), the second panel is 'Require a card at booking'. Toggle it on to instruct the booking flow to collect a card from every new customer who does not already have one saved. The card is saved via a Stripe SetupIntent — no charge is made at booking time.

02

When a customer completes the booking form and submits, the backend creates the order and checks whether the org requires a card and whether the customer already has a `defaultPaymentMethodId`. If a card is needed, the backend returns a SetupIntent client secret alongside the order confirmation. The booking flow detects this and renders a new step — 'Save a Card on File' — between the booking confirmation and the final success screen. The customer enters their card details through Stripe's embedded PaymentElement (which supports cards, Apple Pay on Safari, and other saved-in-browser methods). Clicking Save Card confirms the SetupIntent inline without a page redirect.

03

When the toggle is on, a 'Booking copy' textarea appears. This lets you write a custom reassurance message that is displayed to the customer directly under the card form — for example: 'We'll only charge this card if you cancel inside the 24-hour window.' If you leave the textarea blank, the platform default is used: 'You aren't being charged anything right now. We're saving this card so we can charge cancellation fees if they apply.' The copy is important — a clear explanation reduces drop-off at this step.

04

From that point forward, whenever the customer books a new job with the same company, the card step is skipped because they already have a saved card. When they later cancel an order, the fee is charged to that saved card automatically. If the Stripe webhook confirming the SetupIntent has not yet fired (very rare race condition), the booking still completes — the card is just not yet on file, and the fee would need to be collected manually.

05

On the iOS Vremly app, agents booking on behalf of a customer see the same card step rendered as a native Stripe Elements form. The flow behaves identically — SetupIntent collected, card saved to the customer's Stripe Customer record, webhook updates the database. Admins do not see the card step when booking for a customer who already has a card on file.

Key Takeaways

  • The card step appears automatically in the booking flow when enabled and no card is saved for that customer.
  • No money is charged at booking — only a Stripe SetupIntent is confirmed.
  • Customize the reassurance copy in org settings to reduce customer drop-off.
  • Returning customers with a saved card skip the step entirely.
  • Without a card on file, automatic cancellation fee collection is not possible.
Related documentation at docs.vremly.com