SeatBuilderSeatBuilder Docs

Release seats

Returns one or more seats to `free` status in a single atomic, all-or-nothing batch. Works on both held and booked seats. Use this when a purchase is cancelled, a hold needs to be voluntarily released before TTL expiry, or a booking is refunded. If any one requested label is not currently held or booked, the whole request fails with `409` and nothing is released. Emits one `seat.released` webhook per released seat if a subscription exists.

POST/api/v1/events/{eventKey}/seats/release

Path Parameters

eventKeystring
objectLabelsarray<string>

Seat labels to release in one request. Single seat = array of one. Returns each to free whether previously held or booked. All-or-nothing: if any label is not currently held or booked, the whole request fails with 409 and nothing is released.

Items1 <= items <= 200

Response Body

curl -X POST "http://localhost:3000/api/v1/events/string/seats/release" \  -H "Content-Type: application/json" \  -d '{    "objectLabels": [      "string"    ]  }'

{
  "chartKey": "chart_8a2b1c",
  "eventKey": "evt_q3-2026-jazz-night",
  "status": "free",
  "releasedAt": "2026-10-02T19:15:30.000Z",
  "released": [
    {
      "objectLabel": "A-12"
    },
    {
      "objectLabel": "A-13"
    }
  ]
}
{
  "statusCode": 0,
  "message": "string",
  "errors": {
    "property1": [
      "string"
    ],
    "property2": [
      "string"
    ]
  }
}
{
  "statusCode": 0,
  "message": "string",
  "errors": {
    "property1": [
      "string"
    ],
    "property2": [
      "string"
    ]
  }
}
{
  "statusCode": 0,
  "message": "string",
  "errors": {
    "property1": [
      "string"
    ],
    "property2": [
      "string"
    ]
  }
}
{
  "statusCode": 0,
  "message": "string",
  "errors": {
    "property1": [
      "string"
    ],
    "property2": [
      "string"
    ]
  }
}

{
  "error": "One or more seats could not be released",
  "failed": [
    {
      "objectLabel": "A-13",
      "reason": "not_found_or_free"
    }
  ]
}