Skip to main content
POST
/
api
/
public
/
v2
/
seatmap
/
products
/
{productId}
/
variants
/
{variantId}
/
validate
Validate - Seatmap
curl --request POST \
  --url https://www.headout.com/api/public/v2/seatmap/products/{productId}/variants/{variantId}/validate/ \
  --header 'Content-Type: application/json' \
  --header 'Headout-Auth: <api-key>' \
  --data '
{
  "inventoryId": 123,
  "seatCodes": [
    "<string>"
  ]
}
'
{
  "productId": 3023,
  "variantId": 4700,
  "inventoryId": 489560432,
  "currencyCode": "GBP",
  "date": "2026-03-25",
  "startTime": "19:30",
  "seats": [
    {
      "seatCode": "SE-B8223499-CF01-562C-97DC-62F72E232FEC-E-11",
      "sectionName": "Grand Circle",
      "row": "E",
      "seatNumber": "11",
      "seatType": "STANDARD",
      "isAvailable": true,
      "pricing": {
        "currency": "GBP",
        "headoutSellingPrice": 58.43,
        "netPrice": 50.83
      }
    }
  ],
  "validationErrors": []
}
For products with inventorySelectionType: SEATMAP. Performs a live availability and pricing check on a set of seats before checkout. Always check the validationErrors array even on 200 responses. A 200 response does not mean all seats are available — business-level failures (seat sold, seat not recognised) are returned as 200 with non-empty validationErrors. HTTP 4xx errors are returned for system-level failures (bad input, auth, product not found). Validate is recommended but not required before booking. Prices can change between the Inventory response and booking time — use the prices returned by this endpoint in the booking request. Seat count must satisfy the product’s minPax/maxPax constraint. Hard ceiling is 20 seats per request.

Validation error codes

CodeDescription
SEAT_UNAVAILABLESeat exists but cannot be booked
SEAT_NOT_FOUNDSeat code does not exist in this venue
ADJACENCY_RULE_VIOLATIONSeat selection violates a venue seating rule

Adjacency rules

Some venues enforce rules about which seats can be selected together. These are returned with code: ADJACENCY_RULE_VIOLATION. The seat itself is available — it is the combination of selected seats that violates the venue’s rule. Prompt the customer to adjust their selection.
MessageWhat it meansHow to fix
”Selected seats must be consecutive”Seats must be next to each other in the same row — no gapsRemove the seat causing the gap
”Left adjacent seat must also be selected”Selecting an end seat that would leave a single unsold seat to its leftAlso select the seat to the left, or pick a different seat
”Right adjacent seat must also be selected”Same but to the rightAlso select the seat to the right, or pick a different seat
”All seats at the table must be selected”For table-style venues, all seats at a table must be booked togetherSelect all remaining seats at that table
{
  "productId": 3023,
  "variantId": 4700,
  "inventoryId": 489560432,
  "currencyCode": "GBP",
  "date": "2026-03-25",
  "startTime": "19:30",
  "seats": [
    {
      "seatCode": "SE-B8223499-CF01-562C-97DC-62F72E232FEC-E-11",
      "sectionName": "Grand Circle",
      "row": "E",
      "seatNumber": "11",
      "seatType": "STANDARD",
      "isAvailable": true,
      "pricing": {
        "currency": "GBP",
        "headoutSellingPrice": 58.43,
        "netPrice": 50.83
      }
    }
  ],
  "validationErrors": []
}

Authorizations

Headout-Auth
string
header
required

Path Parameters

productId
integer
required
variantId
integer
required

Query Parameters

currencyCode
string

ISO 4217 currency code. Defaults to USD.

Body

application/json
inventoryId
integer<int64>
required

Show-level inventory identifier. Must be an integer — strings and floats are rejected with 400.

seatCodes
string[]
required
Maximum array length: 20

Response

Validation result. Check validationErrors array even on 200 responses.

productId
integer
variantId
integer
inventoryId
integer<int64>
currencyCode
string
date
string<date>
startTime
string
seats
object[]
validationErrors
object[]

Non-empty when one or more seats failed validation. Check this even on 200 responses.