Skip to main content

pricing

Type: object[]
Default: []

Seats supports two types of pricing: simple pricing and multi-level pricing. Both are defined using the pricing configuration parameter.

  • Simple pricing is pretty, well, simple: there's a single price point per category.
  • Multi-level pricing is for when you want to offer multiple price points within the same category, for example if you have a different price for student and regular tickets. Those are what we call ticket types.

You can read a more in-depth discussion about pricing categories and ticket types here.

Prices should be numbers, never strings

For historical reasons, it's technically possible to pass in strings as price values. Doing so, however, breaks things like ordering, and displaying a minimum and maximum price in the popover.

So don't do price: "10.00 €" or price: '10.00'!
Instead, pass in price: 10.00 and define a priceFormatter to turn the number into a properly formatted price string.

Simple pricing

For single price points per category, simply pass a pricing array of JavaScript objects like so:

pricing: [
{ category: 1, price: 30 },
{ category: 2, price: 40 },
{ category: 3, price: 50 }
]

Note that you can also use the category labels instead of their keys:

pricing: [
{ category: "Balcony", price: 30 },
{ category: "Ground Floor", price: 40 },
{ category: "Wheelchair", price: 50 }
]
Category labels are case sensitive

Category label "Balcony" is not the same as "balcony". Be mindful when using them like this, or use keys instead to avoid mistakes.

Multi-level pricing

To offer various price points within the same category, you can list multiple ticket types instead of setting a single price for the category. This allows you to have different prices for options like student and regular tickets.

A ticket type is an object with the following properties:

  • ticketType: a unique identifier for the ticket type
  • price: the price for this ticket type
  • label: an optional human-readable label for this ticket type
  • description: an optional longer description for this ticket type

The label is optional. If you don't specify it, the technical ID of the ticket type will be shown in the UI.

Multi level pricing
pricing: [
{ category: 1, ticketTypes: [
{ ticketType: 'adult', price: 30, label: 'Adults' },
{ ticketType: 'child', price: 20, label: 'Children' },
{ ticketType: 'senior', price: 25, label: 'Senior', description: '65+ – Requires ID' }
]},
]

You can also pass in labels for the ticket types. Ticket buyers will see the label in the popover, instead of the technical ID:

Longer descriptions are possible as well:

Discounts

You may also, at any place where a price can be specified, provide an originalPrice as well. When doing so, the value of originalPrice will be displayed alongside the price but with a strike-through, indicating the new discounted price is that defined as price. For instance:

pricing: [
{ category: 1, price: 30, originalPrice: 45 }
]

Here is a live sample of that:

Pricing per channel

You can override the category pricing for specific channels.

To do so, you can pass in a channels array for a category, with a specific pricing configuration - either a simple price, or a ticket types pricing structure - for each channel.

Like so:

pricing: [
{
category: 1,
price: 30,
channels: [
{ channel: 'b75c212e-0910-44b4-bb0a-98376e49c5b1', price: 10 },
{ channel: 'a2f732a9-c5d4-44f6-92a1-6f7e9b9c6147', ticketTypes: [
{ 'ticketType': 11, 'price': 20, 'label': 'adults' },
{ 'ticketType': 22, 'price': 22, 'label': 'children' }
]
}
]
}
]

Note that you should still always provide a price or ticketTypes for the category, which will be used as a fallback for seats that are not assigned to one of the specified channels.

Pricing per object

It's also possible to set pricing on a per-object basis. This is useful when you want to set a different price for specific seats, tables or general admission areas, regardless of their category. For instance, when a seat is being resold and its price is different from the other seats in the same category.

To set per-object pricing, you can pass in one or more objects in the a pricing array, each with an array of unique object labels and a specific pricing configuration - either a simple price, or a ticket types pricing structure -.

Here's an example:

pricing: [
{ category: 1, price: 30 },
{ objects: ['A-1', 'A-2'], price: 40 },
{ objects: ['B-1', 'B-2', 'B-3'], ticketTypes: [
{ ticketType: 'adult', price: 30, label: 'Adults' },
{ ticketType: 'child', price: 20, label: 'Children' }
]
}
]

The object arrays across the whole pricing configuration should be unique. In other words, a seat with label A-1 can only appear once in the objects array across all pricing objects.

All properties that are supported on the category level are also supported on the object level, including channels and originalPrice.