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.
/api/v1/events/{eventKey}/seats/releasePath Parameters
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.
1 <= items <= 200Response 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"
}
]
}Book held seats POST
Confirms one or more previously-held seats as booked in a single atomic, all-or-nothing batch. Pass every seat label in `objectLabels[]`; all must currently be held under the same `holdToken` returned from `/hold`. If any one seat is no longer held by that token, the whole request fails with `409` and nothing is booked. Booked seats remain in `booked` status until explicitly released via `/release`. Emits one `seat.booked` webhook per booked seat if a subscription exists.
Extend held seats POST
Refresh the hold TTL (payment window) for one or more seats the caller already holds. Batch + partial-success: seats no longer held by this token are returned in failed[] without failing the request.