Skip to main content

Book objects

Rate limits

This endpoint belongs to the priority lane.

Changes the object status to ‘booked’. Booked objects are not selectable on a rendered chart.

POST https://api-{region}.seatsio.net/events/{eventKey}/actions/book

POST https://api-{region}.seatsio.net/events/{eventKey}/actions/book?expand=objects

You should use this API call to tell us whenever a ticket sale is confirmed. The exact definition of confirmed depends on your sales process, but this would typically be right before the payment has been processed (read more here).

You can change object status whenever you want. E.g. You could pre-book seats prior to opening up your sales page, to reserve VIP seats.

Note

All seats (or tables, booths or GA places) passed in to this API will be considered as "used seats" for pricing purposes.

Request

// Minimal request
{
"objects": ["A-3", "A-5"]
}

// Booking held seats
{
"objects": ["A-3", "A-5"],
"holdToken": "wvXbB9MlHt"
}

// Ticket types
{
"objects": [
{"objectId": "A-1", "ticketType": "adult"},
{"objectId": "A-2", "ticketType": "child"}
]
}

// Mix of ticket types and no ticket types
{
"objects": [
{"objectId": "A-1", "ticketType": "adult"},
{"objectId": "A-2", "ticketType": "child"},
{"objectId": "A-3"},
{"objectId": "A-4"}
]
}
  • objects: an array of object ids to book, or an array of object ids and ticket types
  • holdToken (optional): the hold token must be supplied when you want to make sure that the same person that made the hold confirms his booking. If the seats were not held with this token, the API call doesn't book any seats and returns an error 400 (bad request).
  • orderId (optional): an order id, defined by yourself, to be able to retrieve the objects IDs per order later on.
  • keepExtraData (optional): boolean. If set to true, the existing extra data doesn't get cleared
  • channelKeys (optional): an array of strings, i.e. the channel keys of the channel(s) to which the objects belong. If omitted, and the objects to be booked are assigned to a channel, the request will fail with 400 Bad request. Pass in NO_CHANNEL as channel key to allow objects without a channel.
  • ignoreChannels (optional): if true, the booking call succeeds, even if the booked objects belong to a channel. Useful inside a back office application, in which the user is allowed to book any seat - no matter the channel. Should not be used in combination with channelKeys.

Response

If you pass in an expand=objects query parameter in the URL, the response will contain the full object details of the booked objects. This is useful information you will likely want to show on the tickets you generate for your customers. All serverside SDKs pass this query parameter by default, and so return a result object of some sort.

Without expand=objects 204 - No Content

With expand=objects 200 - ok

{
"objects": {
"SEC A-A-3": {
"label": "SEC A-A-3",
"labels": {
"own": {
"label": "3",
"type": "seat",
},
"parent": {
"label": "Row A",
"type": "row"
},
"section": "Section A"
},
"ids": {
"own": "3",
"parent": "A",
"section": "SEC A"
},
"status": "booked",
"categoryLabel": "Ground Floor",
"categoryKey": "4",
"ticketType": "adult",
"orderId": "order1",
"forSale": true,
"objectType": "seat",
"isAccessible": true,
"isCompanionSeat": false,
"hasRestrictedView": false,
"leftNeighbour": "SEC A-A-2",
"rightNeighbour": "SEC A-A-4",
"entrance": "Blue",
"floor": {
"name": "1",
"displayName": "Ground Floor"
}
},
"SEC A-A-5": {
"label": "SEC A-A-5",
"labels": {
"own": {
"label": "5",
"type": "seat"
},
"parent": {
"label": "Row A",
"type": "row"
},
"section": "Section A"
},
"ids": {
"own": "5",
"parent": "A",
"section": "SEC A"
},
"status": "booked",
"categoryLabel": "Ground Floor",
"categoryKey": "4",
"ticketType": "adult",
"orderId": "order1",
"forSale": true,
"objectType": "seat",
"isAccessible": true,
"isCompanionSeat": false,
"hasRestrictedView": false,
"leftNeighbour": "SEC A-A-4",
"rightNeighbour": "SEC A-A-6",
"entrance": "Blue",
"floor": {
"name": "1",
"displayName": "Ground Floor"
}
}
}
}