Baskets

Submit a Basket

Finalises the basket and turns it into an Order. On success the basket transitions to submitted, an Order is created, appointments and area bookings are confirmed (or queued as enquiries depending on configuration), payments are captured or authorised, and confirmation email + SMS are sent to the customer.

The endpoint is idempotent within a one-hour window for already submitted baskets — a re-submit returns the existing basket with the intake-form URL attached. Beyond the window, submitted baskets respond 404 Not Found.

You can optionally include customer_id or email (and the other guest-checkout fields) directly in the submit payload to set the customer in the same request — this delegates to the same logic as POST /shop/basket/{basketId}/customer.

Returns 400 Bad Request for any submit-time failure: unavailable items, validation errors, payment failures, or a lock timeout when another concurrent submit is in progress.

post/shop/basket/{basketId}/submit

Request body

customer_idstring uuid

Existing Customer to attach to the basket before submitting.

emailstring

Email address for guest checkout.

first_namestring

Customer's given name for guest checkout.

last_namestring

Customer's family name for guest checkout.

phonestring

Customer's phone number. Persisted as E.164 using phone_country (or the site's country code) as the default region.

phone_countrystring

Two-letter ISO country code used to interpret an unprefixed phone.

marketing_preferencesstring[]

IDs of marketing preferences the customer is opting in to. Only honoured when creating a new customer.

Example request

{
  "email": "avery.lin@example.com",
  "first_name": "Avery",
  "last_name": "Lin",
  "phone": "+447700900100",
  "phone_country": "GB"
}

Response

The submitted Basket (with an attached intake-form URL when relevant).

Changes