Customer dashboard

You can integrate the customer dashboard on your site if you want customers to register and sign in to your site via Snipcart’s modal.

When enabled, customers will be able to place orders faster: when logged in, their billing and shipping information will be pre-filled automatically whenever they check out. Customers will also be able to consult their orders history.

Getting started

By default, the Sign in/Register/Sign out functions are available inside Snipcart's modal.

Whether in their cart or their checkout flow, customers will be able to Sign in/Register:

Shopping cart with Sign in link

Checkout flow with Sign in link

If you don't want to offer the customer dashboard feature to customers: in your merchant dashboard, go to Store configurations → Checkout & cart, and mark the "Allow Guests only" box.

To integrate the customer dashboard to your site directly, add a button anywhere in your site markup with the CSS class: snipcart-customer-signin.

Here's a more concrete example:

<!DOCTYPE html>
<html>
<body>
    <header>
        <button class="snipcart-customer-signin">My account</button>
    </header>
</body>

When customers click on this button, they will be prompted to sign in, with an option to register if they aren't already connected, and a way to recover their password in case they forgot it:

sign in

If they click on Register, they will be able to open an account:

register

If they click on Forgot your password, they will be able to recover it by entering the email they used to create their account:

reset password

If customers are signed in, they will have access to their orders history:

Snipcart customer dashboard with orders history

Customers can Sign out either in the cart modal by hitting "My account", or by accessing their account via a button implemented on your site.

Adding a "Request withdrawal" button to a customer's order

Availability: This override slot requires Snipcart cart widget v3.9.0 or later. Older widget versions installed on a merchant site do not expose the withdrawal-action section.

You can add a custom withdrawal button directly to each order in the customer dashboard by overriding the order template's withdrawal-action section. This skips the standard withdrawal form (where the customer would otherwise re-type their order number, name, and email) and goes straight to the confirmation page using their authenticated identity.

For background on what a withdrawal request is and the broader merchant-side flow, see the EU Right to Withdrawal feature guide.

Override the withdrawal-action section

Inside your Snipcart templates container, add:

<snipcart-customer-dashboard-order section="withdrawal-action">
    <button
        type="button"
        class="my-withdrawal-button"
        v-if="!hasPendingWithdrawal && ['Processed', 'Shipped', 'Delivered'].includes(status)"
        @click="snipcart.api.withdrawal.openConfirmation({
            orderInvoiceNumber: invoiceNumber,
            email: customerEmail,
            customerName: customerFullName,
        })"
    >
        Request withdrawal
    </button>
</snipcart-customer-dashboard-order>

The override template renders inside the per-order component's scope, so the following are directly available:

Variable Type Description
invoiceNumber string The customer-facing invoice number for this order.
status string Current order status (e.g. Processed, Shipped, Delivered, Cancelled).
hasPendingWithdrawal boolean true if the order already has a pending withdrawal request awaiting merchant action. Hide the button on these to avoid silently superseding the previous request.
total number Order total.
currency string Three-letter currency code.
date string Order creation date (ISO 8601).
customerEmail string The signed-in customer's email.
customerFullName string The signed-in customer's full name (from their billing address).

What openConfirmation does

Snipcart.api.withdrawal.openConfirmation({ orderInvoiceNumber, email, customerName }):

  1. Sends the request to the server for validation (same call as the public withdrawal form).
  2. On success, opens the cart on the withdrawal confirmation step — the customer skips re-entering their order details and lands directly on the item-selection / final-confirm page.
  3. On failure (invalid order, already withdrawn, etc.), the cart opens on the withdrawal form with an error message displayed, so the customer can correct and retry.

Returns a Promise<void> that resolves once navigation completes, or rejects with an SDK error if the call itself fails (network, server error). You don't need to handle the validation outcome yourself — the cart navigates accordingly in either case.

Filtering which orders show the button

The example above uses v-if to hide the button when an order isn't a sensible target for a withdrawal request. Two filters compose: a structural one (don't offer the button when one is already pending) and a policy one (which fulfilment states you accept withdrawals against).

  • Hide when a request is already in flight (recommended baseline): v-if="!hasPendingWithdrawal" — clicking the button on an order that already has a pending request would silently supersede the previous one, which confuses customers ("did my earlier request get lost?"). Hide the button until the merchant resolves the existing one.
  • By status: v-if="['Processed', 'Shipped', 'Delivered'].includes(status)"
  • Within the EU 14-day window: v-if="(Date.now() - new Date(date).getTime()) < 14 * 24 * 60 * 60 * 1000"
  • Combined (recommended):
    v-if="!hasPendingWithdrawal
        && ['Processed', 'Shipped', 'Delivered'].includes(status)
        && (Date.now() - new Date(date).getTime()) < 14 * 24 * 60 * 60 * 1000"

Was this article helpful?