beginner
shop-rentals
customers
walk-in

Quick-Create a Customer at the Counter

Create a customer record on the spot during a walk-in — phone-deduplicated, Stripe customer auto-created, idempotent

Levy Fleets TeamMay 7, 20264 min read

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:

  1. A customers row with first name, last name, phone, email
  2. A Stripe customer placeholder so you can later attach a card or charge
  3. 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:

  1. Search by name, phone, or email — get no results
  2. Click + New customer
  3. Fill in first name, last name, phone (required), email (optional)
  4. 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: trueidempotent. 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.