Skip to main content

For sale / not for sale

Sometimes you don't want ticket buyers to be able to choose from all seats in a venue.

For example:

  • the event organizer decides to sell tickets through multiple ticketing companies. You're selling tickets for Section A, and your competitor is selling tickets for Section B. You want all seats in Section B to be visible but unselectable for your customers.
  • you don't want to sell all sections in a large venue right away, but only after a number of seats have been sold in other sections.

In those cases, you can use the 'for sale' and 'not for sale' API calls to mark seats, areas, tables or categories as for sale or not for sale, without having to change the status of those objects. Doing so is much more convenient and faster than sending status changes in batch.

You can also specify the for sale configuration when you create an event or a top-level season.

You can embed the event manager to allow your admin users to modify the for sale configuration.

caution

Note that ’for sale and ‘not for sale’ do not replace seat bookings. Each time you assign a seat to someone, you must also use our status change API, otherwise the availability management will not work properly. One of the reasons is that changes made by ‘for sale’ and ‘not for sale’ don’t support live updates, so they are not pushed to all ticket buyers. As a result, ticket buyers may not see the correct availability information unless there is also the correct status change API call.

In effect, it is a condition of use of seats.io that there is a strict mirroring between assigning a seat and a /change-object-status or /book API call. Breach of this would constitute a breach of our terms of use.

There’s a rate limit of 10 calls per event per day on the for sale/not for sale API calls, which means you’ll get an error if you try more often. See below for more info.

Tip This endpoint does not validate whether or not seats exist. This is intentional.

This means you can mark seats as not-for-sale even before they are created. This allows you to add extra seats to a chart, that are immediately unavailable for sale: just mark them as not-for-sale first, then draw them on the seating chart.

Marking whole sections or rows for sale or not for sale is deprecated

Seats.io accounts created before March 11 2024 can mark whole sections or rows not for sale. Newer accounts can't.

We removed this functionality because it had a confusing side-effect: it you marked a booth called 'A' as not for sale, all seats in row 'A' became not for sale as well.

Mark objects as not-for-sale

This API call marks the passed in objects, area places and categories as not for sale, while marking all other objects as for sale.

POST https://api-{region}.seatsio.net/events/{eventKey}/actions/mark-as-not-for-sale

Request

{
"objects": ["A-1", "A-2"],
"areaPlaces": {"GA1": 3},
"categories": ["category1", "category2"]
}
  • objects: optional array of strings. Can contain table labels, booth labels, area labels or seat labels.
  • areaPlaces: optional object, which indicates how many places per general admission area should be not for sale. An area can also be passed into objects. In that case, it's made completely not for sale.
  • categories optional array of strings. Can contain category keys or labels.

Objects that satisfy objects, areaPlaces or categories will become unselectable. All other objects are selectable, unless their status is not equal to 'free'.

Examples

To mark seats A-1 and A-2 as not for sale:

{
"objects": ["A-1", "A-2"]
}

To mark 10 places in GA1 as not for sale:

{
"areaPlaces": {"GA1": 10}
}

To mark all objects in category 'category1' as not for sale:

{
"categories": ["category1"]
}

Example request

curl https://api-{region}.seatsio.net/events/event34/actions/mark-as-not-for-sale \
-u aSecretKey: -X POST -H 'Content-Type: application/json' -d '{"objects": ["A-1", "A-2"]}'

Response

{
"rateLimitRemainingCalls": 9,
"rateLimitResetDate": "2021-10-01T23:00:00Z"
}
Warning

There's a rate limit of 10 calls per day per event. If that rate limit if reached, a 429 (Too Many Requests) is returned. The Retry-After header indicates how many seconds you have to wait before trying again.

Mark objects as for sale

This API call marks the passed in objects, area places and categories as for sale, while marking all other objects as not for sale.

POST https://api-{region}.seatsio.net/events/{eventKey}/actions/mark-as-for-sale

Request

{
"objects": ["A-1", "A-2"],
"areaPlaces": {"GA1": 3},
"categories": ["category1", "category2"]
}
  • objects: optional array of strings. Can contain table labels, booth labels, area labels or seat labels.
  • areaPlaces: optional object, which indicates how many places per general admission area should be for sale. An area can also be passed into objects. In that case, it's made completely for sale.
  • categories optional array of strings. Can contain category keys or labels.

Only objects that satisfy objects, areaPlaces or categories will become selectable (and bookable). All other objects are not selectable, and trying to book them results in a bad request.

Note that even though object is marked for sale, it's still not selectable if its status is not free.

Examples

To mark seats A-1 and A-2 for sale:

{
"objects": ["A-1", "A-2"]
}

To mark 10 places in GA1 as for sale:

{
"areaPlaces": {"GA1": 10}
}

To mark all objects in category 'category1' for sale:

{
"categories": ["category1"]
}

Example request

curl https://api-{region}.seatsio.net/events/event34/actions/mark-as-for-sale \
-u aSecretKey: -X POST -H 'Content-Type: application/json' -d '{"objects": ["A-1", "A-2"]}'

Response

{
"rateLimitRemainingCalls": 9,
"rateLimitResetDate": "2021-10-01T23:00:00Z"
}
Warning

There's a rate limit of 10 calls per day per event. If that rate limit if reached, a 429 (Too Many Requests) is returned. The Retry-After header indicates how many seconds you have to wait before trying again.

Mark all objects as for sale

This API call marks all objects as for sale, which means resetting the list of objects and categories that were previously passed in by mark-as-for-sale or mark-as-not-for-sale.

POST https://api-{region}.seatsio.net/events/{eventKey}/actions/mark-everything-as-for-sale

Example request

curl https://api-{region}.seatsio.net/events/event34/actions/mark-everything-as-for-sale \
-u aSecretKey: -X POST

Response

204 - No Content

Rate limiting

The above API endpoints are rate limited: you can only call it 10 times per 24 hours.

Of course, this rate limit applies per event: If you have used up all 10 saves for event A, you will still be able to change the for-sale configuration for event B.

Screenshot 2019-06-14 11.39.51.png

If that limit of 10 is reached, a 429 (Too Many Requests) is returned. The Retry-After header indicates how many seconds you have to wait before trying again.

An exception

If you only mark seats as for-sale, that were previously marked as not-for-sale, the call is not counted for the rate limit.

In other words: you can always change the for-sale configuration of an event to open up more seats for sale.

This allows you to start sales with just a portion of your floor plan as available, and then to gradually open up the rest of the seats.

So this operation will count for the rate limit:

Screenshot 2019-06-14 11.46.56.png

And this will not count for the rate limit:

Screenshot 2019-06-14 11.47.09.png