---
search:
  tags:
    - customer
    - POST
seo:
  description: >-
    Requires the X-Customer-Session header. The enterprise service API key is…
    Reference for the POST /customer/orders endpoint in the FreeTicket B2B API.
sidebar:
  label: Create the ticket reservation (step 1 of the headless purchase)
  badge: POST
title: Create the ticket reservation (step 1 of the headless purchase)
type: openapi-operation
---
Requires the `X-Customer-Session` header. The enterprise service API key is OPTIONAL: with a key, the date and the ticket type must belong to the workspace pinned to it (anything else is 404); without a key, it is enough for the ticket type to exist and be on sale (same eligibility as the first-party checkout). Reserves inventory and creates the PENDING sale with the SAME rules as the first-party checkout (stock under lock, seats validated against seats.io, per-buyer limit, presale, memberships and virtual queue turn). The buyer email comes from the session, never from the body. Rejections carry a stable `reason` in `error.details.reason` (`sold_out`, `queue_turn_required`, `seats_not_held`, …). With `pending_sale_in_progress` the inventory is taken by a half-paid purchase FROM THE SAME buyer: `error.details.pendingSaleId` and `pendingReference` identify it, and the right step is to reopen its payment with `POST /customer/orders/{pendingSaleId}/payment` (idempotent) instead of reserving again. If `free` is true the sale is already confirmed and `/payment` must NOT be called. Next step: `POST /customer/orders/{id}/payment`.

`POST /customer/orders`
