> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flexwash.com/llms.txt
> Use this file to discover all available pages before exploring further.

# QR Self-Checkout

> Turn any lane into a self-serve lane with a QR code, no kiosk required.

Every lane has its own QR code. A customer scans it with their phone, picks
their vehicle out of the lane's live queue, buys a wash or joins a membership,
and pays, with no attendant and no pay station.

A printed sign is the whole install, so a lane can run self-serve without the
cost of a pay station or the power and network runs to support one.

Print the code once and mount it at the lane. The only setup is choosing which
packages appear on the menu.

## Set up the QR code

1. Select a single car wash in the top bar. The page needs exactly one car
   wash selected.
2. Go to **Support**, then **QR Self-Checkout**.
3. Pick the lane from the **Lane** dropdown. The QR code appears immediately,
   in FlexWash blue with your organization's logo in the middle.
4. Download the code as a PNG to send to your sign printer, or click the code
   to open the customer page and try it yourself.

<img src="https://mintcdn.com/flexwash/iuUQerPYbmE5nR_D/operations/transactions/self-checkout/qr-code.png?fit=max&auto=format&n=iuUQerPYbmE5nR_D&q=85&s=f733d86e64909615a5d612d5d435ad1c" alt="QR Self-Checkout" width="1709" height="1290" data-path="operations/transactions/self-checkout/qr-code.png" />

Lane names come from your site configuration. See [Car Wash
Config](/configuration/users-and-admin/car-wash-config) to rename a lane or
switch it between attended and unattended.

<Warning>
  The QR code is a lane credential. Anyone who scans it can open that
  lane's checkout page. The code does not rotate and cannot be regenerated, so
  a printed code stays valid for as long as the lane exists.
</Warning>

## Choose what appears on the menu

The self-checkout page only lists packages you have flagged for it. This
applies to single washes and to memberships. A package template that is not
flagged never appears, even if it is active everywhere else.

<Steps>
  <Step title="Open the package template">
    Go to **Wash Menu**, then **Packages**, and open the package template.
  </Step>

  <Step title="Enable Self-Checkout">
    Open the **Access Control** tab and check **Self-Checkout Enabled**. Then
    click **Save**.

    <Frame>
      <img src="https://mintcdn.com/flexwash/iNNIPf1HN3U-tlJq/operations/transactions/self-checkout/package-template-self-checkout-enabled.png?fit=max&auto=format&n=iNNIPf1HN3U-tlJq&q=85&s=7dd6f8244cfffd39a8d6c956123bbe92" alt="Self-Checkout Enabled checkbox on the Access Control tab" width="1400" height="470" data-path="operations/transactions/self-checkout/package-template-self-checkout-enabled.png" />
    </Frame>
  </Step>

  <Step title="Repeat for each package">
    Flag every single wash and every membership package you want to sell at
    the lane. Membership packages appear under their own **Monthly
    Memberships** heading on the customer page.
  </Step>
</Steps>

<Note>
  The package must also have **Enabled** checked on the same tab. Disabled
  packages stay hidden from self-checkout regardless of the Self-Checkout
  Enabled flag. Packages appear in the same order as your package list.
</Note>

<Warning>
  A membership sold at the lane only opens the gate if the membership package
  has an **Unattended Default** benefit. Without one the customer's
  membership still activates, but nothing is queued and an attendant has to
  send the wash. See [Memberships](/memberships/membership) for how benefits
  work.
</Warning>

## What the customer sees

The page opens with your logo and the site address, and a lane dropdown set to
the lane they scanned. The page then shows the live checkout queue for that
lane and refreshes every few seconds. The customer taps their vehicle. The
vehicle has to be in the queue already, so the site needs to be operational.

<Frame>
  <img src="https://mintcdn.com/flexwash/iNNIPf1HN3U-tlJq/operations/transactions/self-checkout/choose-vehicle.png?fit=max&auto=format&n=iNNIPf1HN3U-tlJq&q=85&s=ee2da5fb97c0d797cd878df329f4467d" alt="Choose your vehicle from the lane's checkout queue" width="520" height="480" data-path="operations/transactions/self-checkout/choose-vehicle.png" />
</Frame>

Once a vehicle is chosen, the page shows a menu with two sections: single
washes grouped by package type, and **Monthly Memberships**. A **Back**
button at the top of every later step returns the customer to this menu.

<Frame>
  <img src="https://mintcdn.com/flexwash/iNNIPf1HN3U-tlJq/operations/transactions/self-checkout/choose-package.png?fit=max&auto=format&n=iNNIPf1HN3U-tlJq&q=85&s=1e1c9334d0b8c9bd08cb216139728bcb" alt="Wash packages and monthly memberships for the chosen vehicle" width="520" height="730" data-path="operations/transactions/self-checkout/choose-package.png" />
</Frame>

What happens next depends on what the customer picks.

<Tabs>
  <Tab title="Single wash">
    <Steps>
      <Step title="Pick a wash">
        The customer taps a wash package. Only packages flagged for
        self-checkout appear.
      </Step>

      <Step title="Pay">
        The page shows an **Order Summary** with the wash and any taxes, then
        the payment form. The customer pays by card, Apple Pay, or Google Pay.

        <Frame>
          <img src="https://mintcdn.com/flexwash/iNNIPf1HN3U-tlJq/operations/transactions/self-checkout/single-wash-payment.png?fit=max&auto=format&n=iNNIPf1HN3U-tlJq&q=85&s=94bdb1709e9dc2f196235f34a3f0b200" alt="Order summary and payment form for a single wash" width="520" height="830" data-path="operations/transactions/self-checkout/single-wash-payment.png" />
        </Frame>
      </Step>

      <Step title="Done">
        The page shows **Payment Success** with a **View Receipt** button
        that opens the web receipt. Under it, a status card tracks the wash:
        **Queuing Your Wash** while FlexWash contacts the on-site system,
        then **Wash Queued** once the vehicle is in the wash queue and the
        gate, if there is one, lets the customer through.
      </Step>
    </Steps>

    <Info>
      Self-checkout does not collect an email address for a single wash, so
      the receipt is available from the **View Receipt** button only. No
      receipt email is sent.
    </Info>
  </Tab>

  <Tab title="Membership signup">
    <Steps>
      <Step title="Pick a plan">
        The customer taps a plan under **Monthly Memberships**. If the vehicle
        already has a membership, the section is hidden and only single
        washes are offered.
      </Step>

      <Step title="Enter member details">
        The form asks for name, phone number, and email. The license plate is
        filled in from the vehicle they chose and cannot be edited. If the
        plate is wrong, the form tells them to see an attendant.

        A marketing opt-in checkbox uses your organization's opt-in message.
        If the membership package has terms and conditions assigned, the
        customer also has to check **I have read and agree to the terms and
        conditions** and sign in the signature box. The customer then taps
        **Continue to Payment**.

        <Frame>
          <img src="https://mintcdn.com/flexwash/iNNIPf1HN3U-tlJq/operations/transactions/self-checkout/membership-signup-form.png?fit=max&auto=format&n=iNNIPf1HN3U-tlJq&q=85&s=4f85397595fd6d8c0c93d125cc2e570f" alt="Membership signup form with signature pad" width="520" height="830" data-path="operations/transactions/self-checkout/membership-signup-form.png" />
        </Frame>
      </Step>

      <Step title="Pay the first month">
        The customer enters their card. FlexWash charges the first month and
        saves the card for recurring billing in the same step.

        <Frame>
          <img src="https://mintcdn.com/flexwash/iNNIPf1HN3U-tlJq/operations/transactions/self-checkout/membership-signup-payment.png?fit=max&auto=format&n=iNNIPf1HN3U-tlJq&q=85&s=24ac12e7933fdc85e92d28b27ca0e1a6" alt="Card entry for the first membership payment" width="520" height="610" data-path="operations/transactions/self-checkout/membership-signup-payment.png" />
        </Frame>
      </Step>

      <Step title="Done">
        The page shows **Membership Active** with a **View Receipt** button.

        If the membership package has an **Unattended Default** benefit,
        FlexWash records the member's first wash against that benefit and
        queues it, so the gate opens for them right away, and the same
        **Queuing Your Wash** and **Wash Queued** status card appears as for a
        single wash. Without that benefit the membership is still active, but
        nothing is queued and an attendant has to send the wash.
      </Step>
    </Steps>

    <Tip>
      Signed terms are stored on the customer's record. See [Signed Terms and
      Conditions](/memberships/signatures) to find them.
    </Tip>
  </Tab>
</Tabs>

## Recover a failed membership payment

When a member's card stops working, the lane is the best place to fix it. The
member is already there, and they want to wash.

If the chosen vehicle's membership is in **Payment Failed** or **Invalid
Card** status, the page shows **Payment Method Failed** instead of the menu.
The card names the membership package and the card on file, and offers three
choices.

<Frame>
  <img src="https://mintcdn.com/flexwash/iNNIPf1HN3U-tlJq/operations/transactions/self-checkout/payment-method-failed.png?fit=max&auto=format&n=iNNIPf1HN3U-tlJq&q=85&s=989e90221542448d214a07ef675520cc" alt="Payment Method Failed prompt with three options" width="520" height="650" data-path="operations/transactions/self-checkout/payment-method-failed.png" />
</Frame>

<AccordionGroup>
  <Accordion title="Update payment method">
    The customer enters a new card and taps **Save details**. FlexWash saves
    the card to the member's profile and immediately retries the failed
    charge.

    <Frame>
      <img src="https://mintcdn.com/flexwash/iNNIPf1HN3U-tlJq/operations/transactions/self-checkout/update-payment-method.png?fit=max&auto=format&n=iNNIPf1HN3U-tlJq&q=85&s=049e8be945502123a2e759ef3b47795b" alt="Card entry to update the payment method" width="520" height="610" data-path="operations/transactions/self-checkout/update-payment-method.png" />
    </Frame>

    * **Charge approved.** The page shows **Membership Reactivated** with a
      **View Receipt** button for the recharge. The membership returns to
      active. If the package has an **Unattended Default** benefit, FlexWash
      queues that wash and the gate opens. Without one, an attendant has to
      send the wash.
    * **Charge declined.** The page tells the customer their card was
      declined and to try a different card or contact their card issuer. The
      new card stays on file, so the next scheduled billing run uses it. The
      membership status does not change, the decline does not count as a
      billing attempt, and FlexWash does not send a payment failed message.
      The **Back** button returns to the prompt so the customer can try
      another card or skip.
  </Accordion>

  <Accordion title="Skip this time">
    The customer keeps their membership as is and buys a single wash instead.
    The menu shows single washes only, since the vehicle already has a
    membership.

    <Frame>
      <img src="https://mintcdn.com/flexwash/iNNIPf1HN3U-tlJq/operations/transactions/self-checkout/skip-this-time.png?fit=max&auto=format&n=iNNIPf1HN3U-tlJq&q=85&s=fa21fb316a6dd7ce466c074764967896" alt="Single washes only after skipping the payment prompt" width="520" height="590" data-path="operations/transactions/self-checkout/skip-this-time.png" />
    </Frame>
  </Accordion>

  <Accordion title="Cancel membership">
    The page asks the customer to confirm and reminds them that updating
    their payment method takes only a minute. **Keep membership** returns to
    the prompt.

    <Frame>
      <img src="https://mintcdn.com/flexwash/iNNIPf1HN3U-tlJq/operations/transactions/self-checkout/cancel-membership-confirm.png?fit=max&auto=format&n=iNNIPf1HN3U-tlJq&q=85&s=be7c911edb0998b3946eb8501a5843d8" alt="Cancellation confirmation with Keep membership and Cancel membership buttons" width="520" height="600" data-path="operations/transactions/self-checkout/cancel-membership-confirm.png" />
    </Frame>

    If the customer confirms, FlexWash cancels the membership immediately.
    The cancellation is recorded on the customer's timeline as a
    self-checkout cancellation with no employee attached. The prompt then
    disappears, and the vehicle is offered a fresh membership signup the next
    time it is chosen.
  </Accordion>
</AccordionGroup>

<Info>
  **Payment Failed** means a recharge was declined and FlexWash is still
  retrying it. The membership is still treated as active. **Invalid Card**
  means FlexWash has exhausted its retries and the membership has lapsed.
  Both statuses get the same prompt at the lane.
</Info>

## Troubleshooting

* **The vehicle is not in the list.** The list is the lane's live checkout
  queue, fed by the on-site system. Check that the site is online and that
  the camera read the plate. The customer can switch lanes in the dropdown
  if they scanned the wrong code.
* **A package is missing from the menu.** Open the package template and
  confirm that both **Enabled** and **Self-Checkout Enabled** are checked on
  the **Access Control** tab.
* **A new member paid but the gate did not open.** The membership package
  has no Unattended Default benefit, or the on-site system could not be
  reached. The page shows **Wash Queue Error** in the second case. The
  membership is active either way; an attendant can send the wash.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.