Quick-create lets you make a new customer record at the counter without asking them to download the app or sign up online. It's built into the walk-in wizard but you can also trigger it from the customers list.
What it does
A single API call creates:
- A
customersrow with first name, last name, phone, email - A Stripe customer placeholder so you can later attach a card or charge
- Returns the customer for immediate use in a booking
The phone number is normalized (digits only, plus a leading + if
international) and used as the dedup key.
How to trigger it
From the walk-in wizard
Step 1 of the wizard:
- Search by name, phone, or email — get no results
- Click + New customer
- Fill in first name, last name, phone (required), email (optional)
- Click Create customer
The customer card is now selected and you continue to step 2.
From the customers list
/dashboard/customers doesn't yet have a "+ New customer" button (we
plan to add one). For now, the walk-in wizard is the operator-facing
entry point.
Via the API
POST /api/customers/quick-create
{
"firstName": "Jane",
"lastName": "Rider",
"phone": "+15551234567",
"email": "jane@example.com",
"country": "US"
}
Response:
{
"ok": true,
"customer": {
"id": "...",
"customer_number": 12345,
"full_name": "Jane Rider",
"phone": "+15551234567",
"email": "jane@example.com",
"stripe_customer_id": "cus_..."
},
"already_existed": false
}
If a customer with this phone number already exists in the database, the
endpoint returns the existing record with already_existed: true —
idempotent. Calling the endpoint twice from the wizard does not create
two records.
What you can't set in quick-create
The quick-create flow intentionally skips:
- Address — set from the customer detail page later if needed
- Date of birth — most rentals don't need this; collect via signed waiver
- Document ID — captured via the (future) photo-ID flow
- Marketing preferences — defaults to "yes consent" implied by the rental
Add these later from the customer detail page.
Stripe customer creation
The endpoint creates a Stripe customer in test mode if your subaccount
has is_demo = true and STRIPE_SECRET_KEY_TEST is configured;
otherwise live mode. The metadata on the Stripe customer includes
subaccount_id, source: "operator_quick_create", and test_mode.
If Stripe creation fails (rate limit, transient API issue), the
customers row is still created without a stripe_customer_id. You can
backfill later with the
payment method attach flow.
Permissions
The operator who triggers quick-create needs the customer:view
permission. Most shop-counter staff roles have this by default.
Common quick-create scenarios
Customer doesn't have email
Email is optional. Phone is the dedup key, so you can quick-create phone-only customers and email them receipts later (or print the receipt).
Two customers share a phone (couple, family)
Use slightly different phones (they almost always have separate phones) or — if you really need shared phones — append a Stripe extension or suffix in the phone field. Most shops just keep one record per household and rent under that name.
Customer is from out of country
Set the country field to their ISO-2 country code. This affects Stripe
customer setup but isn't strictly required.
Repeat customer from before quick-create existed
If their record predates this feature and is missing stripe_customer_id,
that's fine — the
payment-methods endpoint
will create a Stripe customer on first use.