1. Introduction

A long, long time ago, when the seats were square-shaped and each seat was numbered, UX and conversion rate terms were something vague for the ticketing. Ticketing giants like TM invested a lot of money using all their experience to create impressive seating plans for the users.

Nowadays, with thousands of competitors, it takes all the running you can do to stay at the same place. As well as Alice, you can run twice as fast as now, and you need the right partner.

If you are good at marketing, sales, and ticketing operation and want to compete with the best on the market – you need a perfect, nice looking, informative, convenient seating plans to sell your venues.

Seatmap.pro is the platform for seating plans creation, management, and efficient seating charts rendering for the ticketing companies. The most powerful feature of Seatmap.pro is the possibility of integration with any ticketing system regardless of seating plan supportability.

Let’s go.

2. Overview

Seatmap.pro allows you to use the cutting-edge technologies for the seating plans management and the best user experience approaches and practices for the interaction with the End User. Embed reserved ticketing with a modern seating plan software, html5 seat system, leveraging full stack of technologies for visualization: SVG, HTML canvas and WebGL. Designed as a SaaS solution, Seatmap.pro aimed at leveraging the conversion rate for the ticketing sales.

Seatmap.pro operates with two general types of tickets:

  1. Unique Seats with numbered names (Seat)

  2. General admission tickets, when you have only a section specified on your ticket (GA)

2.1. Components

Seatmap.pro contains the following components and services:

Seatmap Editor

Seating maps editor. Allows to create, edit and manage your seating plans.

Seatmap Booking

Events and price management tool. This component is a bridge between schemas and specific seats on the event available for booking.

Seatmap Renderer

JavaScript component embedded into the Sales page. Renderer responsible for all visualization routines on the client side.

components
Figure 1. Components. Green – Seatmap stack, Blue – Your ticketing system
All the components are designed as a seamless SaaS solution and should be delivered as one product. Unfortunately, we can’t deliver the only Renderer due to complex and constantly changing protocols between Renderer and Booking components.

2.2. Security Concerns

How to separate the seating chart’s visual representation from the complete assignments/booking/sales ticketing cycle?

Seatmap.pro is the platform only for manipulation with seating plans.

We are not:

  1. A ticketing company neither a ticketing service.

  2. Getting the money from the users. Checkout process is operated completely on your side.

  3. Counting how many tickets did you sell. We can see only the seat locks.

  4. Getting your prices information. The prices can be abstracted like – 'Price 1', 'Price 2', etc.

3. Getting Started

To understand how to integrate Seatmap.pro into your ticketing system lets review and match overall simplified lifecycle of tickets during a reserved ticketing event.

In this document, we assume that you already have some ticketing system.

In a common scenario, we need to accomplish the following steps:

  1. Create a schema for a venue.

  2. Create an Event.

  3. Assign prices to the seats (bind the event and schema).

  4. Show the sales page to customers, and allow them to interact with the seating chart.

  5. Add selected seats to the cart.

  6. Check them out.

lifecycle
Figure 2. Lifecycle

3.1. Composite Key

To address any attributes to specific seats on a chart (price, state and so on), Seatmap.pro uses natural language composite keys. For example, if you have a seat named: Section B, Row 5, Seat 14 – composite key will be "Section B;;5;;14".

So, to assign a price to a seat, lock, unlock and do any operation composite keys shall be considered as the main option.

General admission "Seats" shall be addressed by the section name

3.2. Creating a Schema

Please refer to Seatmap.pro editor documentation to learn how to create and manage seating plans.

When a schema is created and published, it is ready to be exposed by API. Please see the Venues section to get more details.

3.3. Create an Event

The event is an entity that binds prices and seats for a single show. In Seatmap.pro you can assign more than one event to the schema. For example, if you have several events of one artist with the same show at the same venue you probably want to have the same seating chart for all events.

Be advised that in your terminology Event might be Instance or Show.

Event creation should be a synchronized operation between your Event storage and Seatmap.pro. For example, if you want to create an event named "Test event" you should perform two simple requests:

event creation
Figure 3. Event creation
  1. Retrieve schemas and venues list

  2. Create an Event linked to the selected schema

The created Event ID should be saved on your side to specify it during Renderer’s initialization on the Sales page.

Now, when the event contains a linked schema, let’s assign prices to the event.

3.4. Assign Prices

To assign a price to the seats you should use Composite keys.

To retrieve all composite keys for a schema, please use the corresponding method getMeta from the Venues section.
assign prices
Figure 4. Assign prices
  1. It is an optional step, just to validate your namespace.

  2. The assign price command sends an Array of key/values like composite key/price.

3.5. Show Seating Plan to User

The user opens the sales page in a browser. Without Seatmap.pro integration, you just show theEvent description and your approach to seat selection to the User.

To integrate the Renderer component into your sales page, you need to initialize the JS component and transfer the following values to it:

  1. The public key (Security).

  2. Event id (Saved on step 2 during Event creation).

  3. Callbacks for the handling of mouse/touch events.

renderer init
Figure 5. Renderer initialization
  1. The Sales page should be rendered or filled with a data from the Ticketing System Backend.

  2. Event ID created on the step 2 shall be returned to the Sales page.

  3. The Sales page initializes the Renderer with Event ID.

  4. The Renderer fetches all information by Event ID and initializes a seating chart.

After the initialization phase, the Renderer retrieves all the data including the seating chart and prices by Event ID from Booking API. Now it is ready to interact.

3.6. Operations with Seats

The renderer has callbacks for the basic events like:

  1. Seat selection.

  2. Seat deselection.

  3. onHover, onBlur, etc.

Here, for the getting started purposes we are interested in how to integrate the ticket selection process and convert it into a successful purchase.

Your sales page handles callbacks including onSeatSelect. After catching this event you have two options:

  1. Collect all the seats is a cart without any interactions with server-side, or.

  2. On each select/deselect event do preliminary locks on objects.

Let’s consider the most complicated scenario – lock per click.

lock
Figure 6. Seat locking
  1. User clicks on a seat.

  2. The renderer component runs callback function to notify the Sales page about en event.

  3. The Sales page trying to lock a seat and sending the locking request to the Ticketing Backend.

  4. The Ticketing Backend checks the seat’s state in accordance with internal logic.

  5. In case if lock operation is available the Ticketing Backend sends lock request to the Booking service.

4. Renderer Component

The Renderer component is a JavaScript library for a seating plan visualization. The component allows us to display any available seating chart from Seatmap.pro and provides all functionality to interact with it. A renderer may be embedded into a sales page.

As a developer, from a JS perspective, you can interact with a component with in the following ways:

  • Component’s initial configuration

  • Subscribe on events

  • Direct component’s methods call

4.1. Initialization

For the component’s initialization you need to assign two basic parameters:

  1. DOM element that will be a host element for the Renderer

  2. Renderer settings

var el = document.getElementById('root');
var settings = {
  publicKey: 'bd780a2f-9b9d-48a8-ad05-34dc5154fb9a',
  onSectorClick: handleSectorClick
};
var renderer = new SeatmapBookingRenderer(el, settings);

Settings object may include the following properties:

var settings = {
    publicKey: 'bd780a2f-9b9d-48a8-ad05-34dc5154fb9a',(1)
    onSeatMouseEnter: function(seat) { (2)
      console.log('seat mouse enter', seat);
    },
    onSeatMouseLeave: function() { (3)
      console.log('seat mouse leave');
    },
    onSeatSelect: seat =>(4)
      function(seat) {
        console.log('seat select', seat);
      },
    onSeatDeselect: function(seat) {(5)
      console.log('seat deselect', seat);
    },
    onCartChange: function(cart) {(6)
      console.log('cart change ', cart);
    },
    onSectorMouseEnter: function(sector) {(7)
      console.log('sector mouse enter', sector);
    },
    onSectorMouseLeave: function() {(8)
      console.log('sector mouse leave');
    },
    onSectorClick: function(sector) {(9)
      console.log('sector click', sector);
    },
    onZoomStart: function(to, from) {(10)
      console.log('before zoom', to, from);
    },
    onZoomEnd: function(to, from) {(11)
      console.log('after zoom', to, from);
    },
    onPan: function(delta, isEnd) {(12)
      console.log('pan', delta, isEnd);
    }
  };
1 Public key shall be used for each request
2 onSeatMouseEnter rises when the mouse pointer moves above a seat
3 onSeatMouseLeave fires when the mouse pointer leaves a seat
4 onSeatSelect fires when the user mark a seat as selected
5 onSeatDeselect fires when the user deselect a seat
6 onCartChange fires when the cart is modified
7 onSectorMouseEnter fires when the mouse pointer moves above a section
8 onSectorMouseLeave fires when the mouse pointer leaves a section
9 onSectorClick fires when the user click on a section
10 onZoomStart fires before the zoom operation
11 onZoomEnd fires after the zoom operation
12 onPan fires while panning

4.2. Renderer Methods

4.2.1. Load Event’s Schema

loadEvent(eventId: string) => Promise

Loads event’s schema with prices and GA. As a parameter, you shall specify the Event ID. Method loadEvent is asynchronous, returns a Promise object.

Load event
var eventId = 'a4a75361-7823-4847-bf22-336843022e80';
renderer.loadEvent(eventId).then(function() {
  renderer.initCart(cart);
});

4.2.2. Retrieve Internal Cart State

getCart() => ICart

Seatmap.pro does not support any session mechanisms. Cart is always should be stored on the ticketing system side. For the state management reasons, the Renderer has internal selected seat representation.

Returns selected seats.

Cart container
var cart = {
  seats: [
    { id: 1389563, key: 'Section 1;;5;;14', price: 100 },
    { key: 'Table 3;;1;;1', price: 500 },
    { key: 'Section 2;;5;;1', price: 200 }
  ],
  ga: [
    {
        id: 100500, (1)
        key: 'Table 2', (2)
        price: 200, (3)
        count: 1 },(4)
    { key: 'Section 5', price: 100, count: 2 }
  ]
};
1 Internal seat or section id
2 Composite Key used for the global seats addressing
3 Price value
4 For GA section – quantity of tickets

4.2.3. Clear Cart

clearCart()

Eliminate all the elements from the cart.

4.2.4. Cart Initialization

initCart(cart: ICart)

In a case of page reload you should initialize the saved state with this method.

Cart initialization is available right after component initialization.

Cart initialization
var cart = {
  seats: [
    {
        id: 1389563,
        key: 'Section 1;;5;;14',
        price: 100 },
    { key: 'Table 3;;1;;1', price: 500 },
    { key: 'Section 2;;5;;1', price: 200 }
  ],
  ga: [
    {
        id: 100500,
        key: 'Table 2',
        price: 200,
        count: 1 },
    { key: 'Section 5', price: 100, count: 2 }
  ]
};
renderer.initCart(cart);
Sales page must save the cart state in the given format to support the page reload feature

4.2.5. Retrieve Prices

getPrices() => IColoredPrice[]

Returns array of available prices.

var prices = renderer.getPrices();
 [
   { id: 63, name: '100', color: '#9C27B0' },
   { id: 64, name: '200', color: '#2196F3' }
 ];

4.2.6. Manually Add Seats to Cart

addSeatsToCart(seats: ICartSeat[])

Adds seat to cart programmatically. This method is optional. In a common scenario, the User adds available seats by clicking them.

renderer.addSeatsToCart([
    {
        id: 803, (1)
        key: 'Section 3;;3;;1', (2)
        price: 500 (3)
    }
    ]);
1 Internal seat identifier
2 Composite Key used for the global seats addressing
3 Price value

4.2.7. Manually Add GA Seats to Cart

addGaToCart(ga: ICartGa)

Adds GA seats to the cart.

This method can be used when onSectorClick fired and developer wants to handle custom add/remove GA seats control. Then the selection in a custom control complete – you can just add desired quantity of GA tickets in the cart.

renderer.addGaToCart({
  id: 100500,(1)
  key: 'Table 2',(2)
  price: 200,(3)
  count: 3(4)
});
1 Internal seat or section id
2 Composite Key used for the global seats addressing
3 Price value
4 For GA section – quantity of tickets

4.2.8. Disable Seats by IDs

disableSeatsByIds(seatIds: number[])

Marks seats as unavailable using internal identifiers

4.2.9. Disable Seats by Keys

disableSeatsByKeys(keys: string[])

Marks seats as unavailable using Composite Key

4.2.10. Zooming

zoomIn() / zoomOut() / zoomToFit()

Zoom operations

4.2.11. Getting Zoom level

getZoom() => number

Returns the current zoom level

5. Resources

5.1. Venues

Provides descriptions of the existing venues and schemas

5.1.1. Retrieve list of all venues

GET /api/private/v1.0/venues/
Description

Getting all the venues with paging

Parameters
Type Name Description Schema Default

Query

limit
optional

Quantity of requested items

integer (int32)

50

Query

offset
optional

Offset for the pager

integer (int32)

0

Responses
HTTP Code Description Schema

200

Returns list of objects

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Produces
  • */*

Security
Type Name Scopes

apiKey

global

Example HTTP request
GET /api/private/v1.0/venues/ HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Host: booking.seatmap.pro
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 100

[ {
  "id" : 68,
  "name" : "O2 Arena",
  "address" : "London, UK",
  "lat" : 0.0,
  "lng" : 0.0
} ]
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/venues/' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130'

5.1.2. Retrieve list of all schemas

GET /api/private/v1.0/venues/schemas/
Description

Getting all the schemas with paging

Parameters
Type Name Description Schema Default

Query

lastUpdated
optional

Schemas updated after this date will be retrieved.

string (date-time)

Query

limit
optional

Quantity of requested items

integer (int32)

50

Query

offset
optional

Offset for the pager

integer (int32)

0

Query

venueId
optional

Venue id

integer (int64)

Responses
HTTP Code Description Schema

200

Returns list of schemas

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Produces
  • */*

Security
Type Name Scopes

apiKey

global

Example HTTP request
GET /api/private/v1.0/venues/schemas/?lastUpdated=2000-10-04T06%3A14%3A36.719865&venueId=68 HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Host: booking.seatmap.pro
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 139

[ {
  "id" : 80,
  "capacity" : null,
  "name" : "Country Road",
  "venueId" : 68,
  "eventId" : "b5feeb7d-c59b-4bf5-90b6-c25d6df0ac10"
} ]
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/venues/schemas/?lastUpdated=2000-10-04T06%3A14%3A36.719865&venueId=68' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130'

5.1.3. Retrieve schema’s metadata

GET /api/private/v1.0/venues/schemas/{schemaId}/
Description

Getting schema’s metadata with Composite Keys

Parameters
Type Name Description Schema Default

Path

schemaId
required

schemaId

integer (int64)

Query

numberedSections
optional

numberedSections

boolean

"false"

Responses
HTTP Code Description Schema

200

Returns schema’s metadata

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Produces
  • */*

Security
Type Name Scopes

apiKey

global

5.1.4. Retrieve schema’s details

GET /api/private/v1.0/venues/schemas/{schemaId}/details/
Description

Getting schema’s details

Parameters
Type Name Description Schema

Path

schemaId
required

schemaId

integer (int64)

Responses
HTTP Code Description Schema

200

Returns schema’s details

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Produces
  • */*

Security
Type Name Scopes

apiKey

global

5.1.5. Retrieves a specific venue by id

GET /api/private/v1.0/venues/{venueId}
Description

Getting venue by Id

Parameters
Type Name Description Schema

Path

venueId
required

venueId

integer (int64)

Responses
HTTP Code Description Schema

200

Returns list of objects

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Produces
  • */*

Security
Type Name Scopes

apiKey

global

5.2. Events

Provides CRUD operations for the Events

5.2.1. Create an Event

POST /api/private/v1.0/events/
Description

Before you start to create an Event you need to create a schema with venue.

Parameters
Type Name Description Schema

Body

event
required

Valid event object without id field

Responses
HTTP Code Description Schema

200

Returns created object

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Consumes
  • application/json

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

Example HTTP request
POST /api/private/v1.0/events/ HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Content-Length: 143
Host: booking.seatmap.pro

{
  "id" : null,
  "start" : "2020-10-04T06:14:36.460473",
  "killAfter" : "2020-10-04T06:14:36.460484",
  "name" : "test",
  "schemaId" : 80
}
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 163

{
  "id" : "4ce60330-3092-47c1-a376-3f3f4448a250",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test",
  "schemaId" : 80
}
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/events/' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130' \
    -d '{
  "id" : null,
  "start" : "2020-10-04T06:14:36.460473",
  "killAfter" : "2020-10-04T06:14:36.460484",
  "name" : "test",
  "schemaId" : 80
}'

5.2.2. Retrieve list of all events

GET /api/private/v1.0/events/
Description

Getting all the events with paging

Parameters
Type Name Description Schema Default

Query

limit
optional

Quantity of requested items

integer (int32)

50

Query

offset
optional

Offset for the pager

integer (int32)

0

Responses
HTTP Code Description Schema

200

Returns list of objects

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

Example HTTP request
GET /api/private/v1.0/events/ HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Host: booking.seatmap.pro
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 1837

[ {
  "id" : "c74f804a-9721-4d61-81e2-1e5a6cab6921",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "testPrice",
  "schemaId" : 80
}, {
  "id" : "05c2d5f7-2590-4c10-a45f-6a6710b0dbaf",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "testPrice",
  "schemaId" : 80
}, {
  "id" : "f2535940-2491-4411-97cf-c4be6046dca4",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "testPrice",
  "schemaId" : 80
}, {
  "id" : "913bb3bf-96ad-425c-84a1-28781fe23d5e",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "testPrice",
  "schemaId" : 80
}, {
  "id" : "35811af3-7bf5-4017-9d28-1ad9eccddc72",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test",
  "schemaId" : 80
}, {
  "id" : "f7565a9c-9276-46a8-914e-1f1cb2dc5426",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test",
  "schemaId" : 80
}, {
  "id" : "0eba7505-2e30-4a08-b4b9-04086986353f",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test",
  "schemaId" : 80
}, {
  "id" : "367b185d-991f-4877-8ddf-c182dc77fba0",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test",
  "schemaId" : 80
}, {
  "id" : "9ee6a483-3213-4bef-9048-a767a05845a8",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test",
  "schemaId" : 80
}, {
  "id" : "73a8a372-8ca8-4bce-bdae-bc8abf5f2ad6",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test",
  "schemaId" : 80
}, {
  "id" : "4ce60330-3092-47c1-a376-3f3f4448a250",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test",
  "schemaId" : 80
} ]
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/events/' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130'

5.2.3. Update an Event

PUT /api/private/v1.0/events/
Description

Updated event shall contains valid id.

Parameters
Type Name Description Schema

Body

event
required

Valid event object with existing id field

Responses
HTTP Code Description Schema

200

Returns updated object

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Consumes
  • application/json

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

Example HTTP request
PUT /api/private/v1.0/events/ HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Content-Length: 165
Host: booking.seatmap.pro

{
  "id" : "d4525f01-12b8-437a-a59e-e8e5ef3f6254",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test22",
  "schemaId" : 80
}
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 165

{
  "id" : "d4525f01-12b8-437a-a59e-e8e5ef3f6254",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test22",
  "schemaId" : 80
}
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/events/' -i -X PUT \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130' \
    -d '{
  "id" : "d4525f01-12b8-437a-a59e-e8e5ef3f6254",
  "start" : "2020-10-04T06:14:00",
  "killAfter" : "2020-10-04T06:14:00",
  "name" : "test22",
  "schemaId" : 80
}'

5.3. Prices

Provides CRUD operations for prices

5.3.1. Create a price for event

POST /api/private/v1.0/prices/
Description

Binds a price to event

Parameters
Type Name Description Schema

Body

price
required

price

Responses
HTTP Code Description Schema

200

Returns created object

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Consumes
  • application/json

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

Example HTTP request
POST /api/private/v1.0/prices/ HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Content-Length: 89
Host: booking.seatmap.pro

{
  "id" : null,
  "name" : "300",
  "eventId" : "c74f804a-9721-4d61-81e2-1e5a6cab6921"
}
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 86

{
  "id" : 1,
  "name" : "300",
  "eventId" : "c74f804a-9721-4d61-81e2-1e5a6cab6921"
}
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/prices/' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130' \
    -d '{
  "id" : null,
  "name" : "300",
  "eventId" : "c74f804a-9721-4d61-81e2-1e5a6cab6921"
}'

5.3.2. Retrieve all prices for event

GET /api/private/v1.0/prices/
Description

All prices

Parameters
Type Name Description Schema

Query

id
required

id

string (uuid)

Responses
HTTP Code Description Schema

200

Returns list of objects

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

Example HTTP request
GET /api/private/v1.0/prices/?id=913bb3bf-96ad-425c-84a1-28781fe23d5e HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Host: booking.seatmap.pro
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 3

[ ]
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/prices/?id=913bb3bf-96ad-425c-84a1-28781fe23d5e' -i -X GET \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130'

5.3.3. Update a price for event

PUT /api/private/v1.0/prices/
Description

Binds a price to event

Parameters
Type Name Description Schema

Body

price
required

price

Responses
HTTP Code Description Schema

200

Returns updated object

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Consumes
  • application/json

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

Example HTTP request
PUT /api/private/v1.0/prices/ HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Content-Length: 89
Host: booking.seatmap.pro

{
  "id" : 3,
  "name" : "500555",
  "eventId" : "f2535940-2491-4411-97cf-c4be6046dca4"
}
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 89

{
  "id" : 3,
  "name" : "500555",
  "eventId" : "f2535940-2491-4411-97cf-c4be6046dca4"
}
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/prices/' -i -X PUT \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130' \
    -d '{
  "id" : 3,
  "name" : "500555",
  "eventId" : "f2535940-2491-4411-97cf-c4be6046dca4"
}'

5.3.4. Delete a price for event

DELETE /api/private/v1.0/prices/
Description

Binds a price to event

Parameters
Type Name Description Schema

Query

id
required

id

integer (int64)

Responses
HTTP Code Description Schema

200

Returns true if everything is okt

boolean

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

Example HTTP request
DELETE /api/private/v1.0/prices/ HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Host: booking.seatmap.pro
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 4

true
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/prices/' -i -X DELETE \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130'

5.4. Price Assignments

Allows to assign/remove prices to seats

5.4.1. Assign prices to event

POST /api/private/v1.0/assignments/
Description

Price assignments assume using of plain representation of price. For GA sections you need to specify capacity

Parameters
Type Name Description Schema Default

Query

clean
optional

Clean before assign is used when you need completely renew the price assignment. It also could be cleaned with clean method

boolean

"false"

Query

id
required

Corresponding event id

string (uuid)

Body

list
required

Array of price assignments

< PriceAssignment > array

Responses
HTTP Code Description Schema

200

Returns unsuccessful assignments

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Consumes
  • application/json

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

Example HTTP request
POST /api/private/v1.0/assignments/?id=367b185d-991f-4877-8ddf-c182dc77fba0 HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Content-Length: 219
Host: booking.seatmap.pro

[ {
  "capacity" : 50,
  "compositeKey" : "Unnamed section",
  "price" : 500,
  "properties" : null
}, {
  "capacity" : null,
  "compositeKey" : "Unnamed section copy;;13;;1",
  "price" : 1500,
  "properties" : null
} ]
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 3

[ ]
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/assignments/?id=367b185d-991f-4877-8ddf-c182dc77fba0' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130' \
    -d '[ {
  "capacity" : 50,
  "compositeKey" : "Unnamed section",
  "price" : 500,
  "properties" : null
}, {
  "capacity" : null,
  "compositeKey" : "Unnamed section copy;;13;;1",
  "price" : 1500,
  "properties" : null
} ]'

5.4.2. Remove specified assignments from event

DELETE /api/private/v1.0/assignments/
Description

To remove assignments from event we are using simplified object Selection. For GA sections use capacity field as well

Parameters
Type Name Description Schema

Query

id
required

Corresponding event id

string (uuid)

Body

list
required

list

< Selection > array

Responses
HTTP Code Description Schema

200

Returns unsuccessful attempts to remove assignment

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

Example HTTP request
DELETE /api/private/v1.0/assignments/?id=73a8a372-8ca8-4bce-bdae-bc8abf5f2ad6 HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Content-Length: 138
Host: booking.seatmap.pro

[ {
  "capacity" : 50,
  "compositeKey" : "Unnamed section"
}, {
  "capacity" : null,
  "compositeKey" : "Unnamed section copy;;13;;1"
} ]
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 3

[ ]
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/assignments/?id=73a8a372-8ca8-4bce-bdae-bc8abf5f2ad6' -i -X DELETE \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130' \
    -d '[ {
  "capacity" : 50,
  "compositeKey" : "Unnamed section"
}, {
  "capacity" : null,
  "compositeKey" : "Unnamed section copy;;13;;1"
} ]'

5.4.3. Remove all price assignments from event

POST /api/private/v1.0/assignments/clean
Description

All states including locked seats, will be cleaned up during this operation

Parameters
Type Name Description Schema

Query

id
required

Corresponding event id

string (uuid)

Responses
HTTP Code Description Schema

200

Returns true if everything is ok

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Consumes
  • application/json

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

Example HTTP request
POST /api/private/v1.0/assignments/clean HTTP/1.1
Content-Type: application/json
X-API-Key: af90387c-9071-4015-9a58-cbb543d84130
Host: booking.seatmap.pro

id=9ee6a483-3213-4bef-9048-a767a05845a8
Example HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 4

true
Example Curl request
$ curl 'https://booking.seatmap.pro/api/private/v1.0/assignments/clean' -i -X POST \
    -H 'Content-Type: application/json' \
    -H 'X-API-Key: af90387c-9071-4015-9a58-cbb543d84130' \
    -d 'id=9ee6a483-3213-4bef-9048-a767a05845a8'

5.5. Booking

Allows to the system lock ans unlock seats

5.5.1. Lock a seat or GA

POST /api/private/v1.0/booking/lock
Description

Seat should be available

Parameters
Type Name Description Schema

Query

id
required

id

string (uuid)

Body

list
required

list

< Selection > array

Responses
HTTP Code Description Schema

200

Returns unsuccessful attempts

< Selection > array

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Consumes
  • application/json

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

5.5.2. Transfer seat or GA to the state sold

POST /api/private/v1.0/booking/sale
Description

This feature applicable only in a sales control mode

Parameters
Type Name Description Schema

Query

id
required

id

string (uuid)

Body

list
required

list

< Selection > array

Responses
HTTP Code Description Schema

200

Returns unsuccessful attempts

< Selection > array

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Consumes
  • application/json

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

5.5.3. Unlock a seat or GA

POST /api/private/v1.0/booking/unlock
Description

For GA unlocking capacity counter shall be specified

Parameters
Type Name Description Schema

Query

id
required

id

string (uuid)

Body

list
required

list

< Selection > array

Responses
HTTP Code Description Schema

200

Returns unsuccessful attempts

< Selection > array

400

Input data is not valid

No Content

403

Forbidden. Please use correct private key.

No Content

Consumes
  • application/json

Produces
  • application/json

Security
Type Name Scopes

apiKey

global

6. Security

6.1. Private security key

Type : apiKey
Name : X-API-Key
In : HEADER

7. Definitions

7.1. Event

Event object contains event properties and related schema id

Name Description Schema

id
optional

Event identifier.

string (uuid)

killAfter
required

After specified date event will be marked as archived

string (date-time)

name
required

Event name. Must be not empty.

string

schemaId
required

Event refers to existing schema by id.

integer (int64)

start
required

Event start date.

string (date-time)

7.2. EventMetadata

Contains list of sections

Name Description Schema

sectors
optional

List of sections metadata

< SectorMetadata > array

7.3. Json

Type : object

7.4. Price

Name Description Schema

eventId
optional

Related price id

string (uuid)

id
optional

Price identifier

integer (int64)

name
optional

Price value

string

7.5. PriceAssignment

Name Description Schema

capacity
optional

Capacity may be applied only for GA sections

integer (int32)

compositeKey
required

Composite Key to be assigned

string

price
required

Specified price to assign.

integer (int32)

properties
required

Additional properties. API assumes that you can pass any JSON structure to the renderer.

7.6. RowMetadata

Name Description Schema

key
required

string

name
required

Row name

string

seats
optional

Array of SeatMetadata

< SeatMetadata > array

7.7. Schema

Name Description Schema

capacity
required

Maximum schema capacity

integer (int32)

eventId
optional

Default eventId for the schema. Deprecated.

string (uuid)

id
required

Identifier

integer (int64)

name
required

Name of the schema

string

venueId
required

Identifier of the Venue

integer (int64)

7.8. SeatMetadata

Name Description Schema

ix
required

Initial horizontal (X) coordinate, without transformations

integer (int32)

iy
required

Initial vertical (Y) coordinate, without transformations

integer (int32)

key
required

string

name
required

Seat name

string

x
required

Absolute horizontal (X) coordinate

integer (int32)

y
required

Absolute vertical (Y) coordinate

integer (int32)

7.9. SectorMetadata

Name Description Schema

angle
optional

Section’s rotation angle. Applicable only for GA sections

integer (int32)

guid
required

Unique UUID

string (uuid)

height
optional

Section’s height. Applicable only for GA sections

integer (int32)

id
required

Unique id of the section

integer (int64)

key
required

string

name
required

Section name

string

rows
required

List of rows

< RowMetadata > array

width
optional

Section’s width. Applicable only for GA sections

integer (int32)

x
required

Absolute horizontal (X) coordinate

integer (int32)

y
required

Absolute vertical (Y) coordinate

integer (int32)

7.10. Selection

Name Description Schema

capacity
optional

Capacity may be applied only for GA sections

integer (int32)

compositeKey
required

Composite Key to be assigned

string

7.11. Venue

Name Description Schema

address
required

Venue address

string

id
required

Venue identifier

integer (int64)

lat
required

Venue latitude

number (double)

lng
required

Venue longitude

number (double)

name
required

Venue name

string

8. Renderer Resources

8.1. Class: SeatmapBookingRenderer

8.1.1. Hierarchy

  • Renderer

    SeatmapBookingRenderer

8.1.2. Implements

  • IRenderer

8.1.3. Constructors

8.1.4. constructor

+ new SeatmapBookingRenderer(element: HTMLElement, settings?: IBookingRendererSettings): SeatmapBookingRenderer

Creates the booking renderer.

Parameters:

Name Type Description

element

HTMLElement

DOM element that will be a host element for the Renderer

settings?

IBookingRendererSettings

Renderer settings

8.1.5. Methods

8.1.6. addGaToCart

addGaToCart(ga: ICartGa): void

Adds GA seats to cart programmatically.

remarks

This method can be used when onSectorClick was fired and developer wants to handle custom add/remove GA seats control. You can add desired quantity of GA tickets to the cart.

example

renderer.addGaToCart({
  id: 100500,
  key: 'Table 2',
  price: 200,
  // quantity of GA tickets
  count: 3
});

Parameters:

Name Type Description

ga

ICartGa

GA cart item

Returns: void


8.1.7. addSeatsToCart

addSeatsToCart(seats: ICartSeat[]): void

Adds seats to cart programmatically.

remarks

This method is optional. In a common scenario the user adds available seats by clicking on them.

example

renderer.addSeatsToCart([
  {
    id: 803,
    key: 'Section 3;;3;;1',
    price: 500
  }
]);

Parameters:

Name Type Description

seats

ICartSeat[]

Array of seats to add

Returns: void


8.1.8. clearCart

clearCart(): void

Clears the internal cart state.

Returns: void


8.1.9. destroy

destroy(): void

Returns: void


8.1.10. disableSeatsByIds

disableSeatsByIds(ids: number[]): void

Marks seats as unavailable and removes them from cart.

Parameters:

Name Type Description

ids

number[]

Array of internal seat IDs

Returns: void


8.1.11. disableSeatsByKeys

disableSeatsByKeys(keys: string[]): void

Marks seats as unavailable and removes them from cart.

Parameters:

Name Type Description

keys

string[]

Array of composite seat keys

Returns: void


8.1.12. getCart

getCart(): ICart

Retrieves the internal cart state.

remarks

Seatmap.pro doesn’t support any session mechanisms. Cart is always should be stored on the ticketing system side. For the state management reasons, the Renderer has internal selected seat representation.

example

Example of cart object:

var cart = {
  seats: [
    { id: 1389563, key: 'Section 1;;5;;14', price: 100 },
    { key: 'Table 3;;1;;1', price: 500 },
    { key: 'Section 2;;5;;1', price: 200 }
  ],
  ga: [
    {
      id: 100500,
      key: 'Table 2',
      price: 200,
      count: 1
    },
    { key: 'Section 5', price: 100, count: 2 }
  ]
};

Returns: ICart

Returns selected seats and GA ticket count


8.1.13. getCategoryColor

getCategoryColor(category: number): *undefined

string*

Returns category’s color

Parameters:

Name Type Description

category

number

Category number

Returns: *undefined

string*


8.1.14. getHeight

getHeight(): number

Returns: number


8.1.15. getMaxZoom

getMaxZoom(): number

Returns the maximum zoom preset value.

Returns: number


8.1.16. getMinZoom

getMinZoom(): number

Returns the minimal zoom preset value.

Returns: number


8.1.17. getMode

getMode(): *undefined

string*

Returns: *undefined

string*


8.1.18. getPrices

getPrices(): IColoredPrice[]

Retrieves the available prices.

example

Example of return value:

[
  { id: 63, name: '100', color: '#9C27B0' },
  { id: 64, name: '200', color: '#2196F3' }
];

Returns: IColoredPrice[]

Array of available prices


8.1.19. getSeatIds

getSeatIds(seats: ISeat[]

number[]

string[]): number[]

Parameters:

Name Type

seats

ISeat[] | number[] | string[]

Returns: number[]


8.1.20. getSeatSelection

getSeatSelection(): IExtendedSeat[]

Returns selected seats

Returns: IExtendedSeat[]


8.1.21. getSections

getSections(): ISector[]

Returns sections info

Returns: ISector[]


8.1.22. getSectionsWithCoords

getSectionsWithCoords(): object[]

Returns: object[]


8.1.23. getSelectedGa

getSelectedGa(): *undefined

ISector*

Returns: *undefined

ISector*


8.1.24. getVisibleSeats

getVisibleSeats(): ISeat[]

Returns only visible seats with coords relative to canvas

Returns: ISeat[]


8.1.25. getWidth

getWidth(): number

Returns: number


8.1.26. getZoom

getZoom(): number

Returns current zoom value.

Returns: number


8.1.27. initCart

initCart(cart: ICart): void

Initializes the internal cart state.

remarks

In a case of page reload you should initialize the saved state with this method.

Cart initialization is available right after component initialization.

Sales page must save the cart state in the given format to support the page reload feature.

example

var cart = {
  seats: [
    {
      id: 1389563,
      key: 'Section 1;;5;;14',
      price: 100
    },
    { key: 'Table 3;;1;;1', price: 500 },
    { key: 'Section 2;;5;;1', price: 200 }
  ],
  ga: [
    {
      id: 100500,
      key: 'Table 2',
      price: 200,
      count: 1
    },
    { key: 'Section 5', price: 100, count: 2 }
  ]
};

renderer.initCart(cart);

Parameters:

Name Type Description

cart

ICart

Cart state

Returns: void


8.1.28. loadEvent

loadEvent(eventId: string, sectorId?: undefined

number): Promise‹void›

Loads event’s schema and prices.

example

var eventId = 'a4a75361-7823-4847-bf22-336843022e80';
renderer.loadEvent(eventId).then(function() {
  renderer.initCart(cart);
});

Parameters:

Name Type Description

eventId

string

Event GUID

sectorId?

undefined | number

You can specify sector ID to show only specific sector

Returns: Promise‹void›

Resolves when the data fetching is completed


8.1.29. removeSeatsFromCartByIds

removeSeatsFromCartByIds(ids: number[]): void

Removes seats from internal cart.

Parameters:

Name Type Description

ids

number[]

Array of internal seat IDs

Returns: void


8.1.30. removeSeatsFromCartByKeys

removeSeatsFromCartByKeys(keys: string[]): void

Removes seats from internal cart.

Parameters:

Name Type Description

keys

string[]

Array of composite seat keys

Returns: void


8.1.31. resetCategories

resetCategories(): void

Returns: void


8.1.32. seatKeysToIds

seatKeysToIds(keys: string[]): number[]

Convert array of seat keys to array of seat ids

Parameters:

Name Type Description

keys

string[]

Array of composite seat keys

Returns: number[]


8.1.33. seatToExtendedSeat

seatToExtendedSeat(seat: ISeat): IExtendedSeat

Parameters:

Name Type

seat

ISeat

Returns: IExtendedSeat


8.1.34. setGaCategory

setGaCategory(sectionId: number, category: number

undefined): void

Parameters:

Name Type

sectionId

number

category

number | undefined

Returns: void


8.1.35. setHeight

setHeight(height: number): void

Parameters:

Name Type

height

number

Returns: void


8.1.36. setMode

setMode(mode: string): void

Parameters:

Name Type

mode

string

Returns: void


8.1.37. setSeatSelection

setSeatSelection(seats: number[]

string[]

ISeat[]): void

Parameters:

Name Type

seats

number[] | string[] | ISeat[]

Returns: void


8.1.38. setSeatsCategory

setSeatsCategory(seats: ISeat[]

number[]

string[], category: number): void

Parameters:

Name Type

seats

ISeat[] | number[] | string[]

category

number

Returns: void


8.1.39. setSelectedGa

setSelectedGa(ga?: number

string): void

Parameters:

Name Type

ga?

number | string

Returns: void


8.1.40. updateSeatLocks

updateSeatLocks(filter: SeatFilter): void

Updates seat lock states.

example

For example, you can create handler to prevent selection of seats with different special state:

const handleCartChange = (cart, prevCart) => {
  if (!cart.seats.length) {
    // Unlock all the seats if the cart is empty
    renderer.updateSeatLocks(s => false);
  } else if (!prevCart || !prevCart.seats.length) {
    // Lock seats with different special state
    const seat = cart.seats[0];
    renderer.updateSeatLocks(
      s => (s.special && s.special.s1) !== (seat.special && seat.special.s1)
    );
  }
};

Parameters:

Name Type Description

filter

SeatFilter

Function should return true for seats to lock

Returns: void


8.1.41. zoomIn

zoomIn(): void

Returns: void


8.1.42. zoomOut

zoomOut(): void

Returns: void


8.1.43. zoomToFit

zoomToFit(): void

Returns: void

8.2. Interface: IBeforeSeatDrawEvent

8.2.1. Hierarchy

  • IBeforeSeatDrawEvent

8.2.2. Properties

8.2.3. context

  • context: Context


8.2.4. seat

  • seat: ISeat


8.2.5. state


8.2.6. style

8.3. Interface: IBookingRendererSettings

8.3.1. Hierarchy

  • IRendererSettings

    IBookingRendererSettings

8.3.2. Properties

8.3.3. Optional debounceDelay

debounceDelay? : *undefined

number*


8.3.4. Optional env

env? : *undefined

string*

Environment (prod/stage)


8.3.5. Optional height

height? : *undefined

number*


8.3.6. Optional lockedSeatsFilter

lockedSeatsFilter? : *undefined

function*


8.3.7. Optional onBeforeSeatDraw

onBeforeSeatDraw? : *undefined

function*

You can control seats' styling by returning custom style for each seat


8.3.8. Optional onCartChange

onCartChange? : *undefined

function*

Fires when the cart was modified.

remarks

Cart state is passed as a param to the handler (see ICart).


8.3.9. Optional onPan

onPan? : *undefined

function*

Fires while panning.


8.3.10. Optional onRedrawEnd

onRedrawEnd? : *undefined

function*

Fires when component full redrawing ends.


8.3.11. Optional onRedrawStart

onRedrawStart? : *undefined

function*

Fires when component full redrawing starts.


8.3.12. Optional onSeatDebouncedEnter

onSeatDebouncedEnter? : *undefined

function*

Same as onSeatMouseEnter but with debounce.

remarks

Seat is passed as a param to the handler (see IExtendedSeat).


8.3.13. Optional onSeatDeselect

onSeatDeselect? : *undefined

function*

Fires when the user deselects a seat.

remarks

Seat is passed as a param to the handler (see IExtendedSeat).

To cancel seat deselection you can return false or Promise resolving to false.


8.3.14. Optional onSeatMouseEnter

onSeatMouseEnter? : *undefined

function*

Rises when the mouse pointer moves above a seat.

remarks

Seat is passed as a param to the handler (see IExtendedSeat).


8.3.15. Optional onSeatMouseLeave

onSeatMouseLeave? : *undefined

function*

Fires when the mouse pointer leaves a seat.


8.3.16. Optional onSeatSelect

onSeatSelect? : *undefined

function*

Fires when the user marks a seat as selected.

remarks

Seat is passed as a param to the handler (see IExtendedSeat).

To cancel seat selection you can return false or Promise resolving to false.


8.3.17. Optional onSeatSelectionChange

onSeatSelectionChange? : *undefined

function*

Fires after seat selection was updated.


8.3.18. Optional onSectionClick

onSectionClick? : *undefined

function*

Fires when the user clicks on a section.

remarks

Section is passed as a param to the handler (see ISection).


8.3.19. Optional onSectorClick

onSectorClick? : *undefined

function*

Fires when the user clicks on a section.

deprecated Use onSectionClick instead


8.3.20. Optional onSectorMouseEnter

onSectorMouseEnter? : *undefined

function*

Fires when the mouse pointer moves above a section.

remarks

Section is passed as a param to the handler (see ISection).


8.3.21. Optional onSectorMouseLeave

onSectorMouseLeave? : *undefined

function*

Fires when the mouse pointer leaves a section.


8.3.22. Optional onZoomEnd

onZoomEnd? : *undefined

function*

Fires after the zoom animation ended.


8.3.23. Optional onZoomStart

onZoomStart? : *undefined

function*

Fires before the zoom animation started.


8.3.24. Optional padding

padding? : *undefined

number*


8.3.25. Optional publicKey

publicKey? : *undefined

string*

Public API key


8.3.26. Optional seatSelectionMinZoom

seatSelectionMinZoom? : *undefined

number*


8.3.27. Optional selectionLimit

selectionLimit? : *undefined

number*


8.3.28. Optional theme


8.3.29. Optional zoomAnimationDuration

zoomAnimationDuration? : *undefined

number*

8.4. Interface: ICart

8.4.1. Hierarchy

  • ICart

8.4.2. Properties

8.4.3. ga


8.4.4. seats

8.5. Interface: ICartGa

8.5.1. Hierarchy

  • ICartGa

8.5.2. Properties

8.5.3. count

  • count: number


8.5.4. key

  • key: string


8.5.5. price

  • price: number


8.5.6. Optional sectorId

sectorId? : *undefined

number*

8.6. Interface: ICartSeat

8.6.1. Hierarchy

8.6.2. Properties

8.6.3. Optional id

id? : *undefined

number*


8.6.4. key

  • key: string


8.6.5. Optional price

price? : *undefined

number*


8.6.6. Optional special

  • special? : ISpecialState

8.7. Interface: IColoredPrice

8.7.1. Hierarchy

8.7.2. Properties

8.7.3. color

  • color: string


8.7.4. id

  • id: number

Inherited from IPrice.id


8.7.5. name

  • name: string

Inherited from IPrice.name

8.8. Interface: IExtendedSeat

8.8.1. Hierarchy

8.8.2. Properties

8.8.3. ax

  • ax: number


8.8.4. ay

  • ay: number


8.8.5. Optional id

id? : *undefined

number*

Inherited from ICartSeat.id


8.8.6. key

  • key: string

Inherited from ICartSeat.key


8.8.7. Optional price

price? : *undefined

number*

Inherited from ICartSeat.price


8.8.8. rowNumber

  • rowNumber: number


8.8.9. seatName

  • seatName: string


8.8.10. sectionId

  • sectionId: number


8.8.11. sectionName

  • sectionName: string


8.8.12. sectorId

  • sectorId: number


8.8.13. Optional special

  • special? : ISpecialState

Inherited from ICartSeat.special


8.8.14. x

  • x: number


8.8.15. y

  • y: number

8.9. Interface: IPoint

8.9.1. Hierarchy

  • IPoint

8.9.2. Properties

8.9.3. Readonly x

  • x: number


8.9.4. Readonly y

  • y: number

8.10. Interface: IPrice

8.10.1. Hierarchy

8.10.2. Properties

8.10.3. id

  • id: number


8.10.4. name

  • name: string

8.11. Interface: IRendererSeatStyleSettings

8.11.1. Hierarchy

  • IRendererSeatStyleSettings

8.11.2. Properties

8.11.3. default


8.11.4. hovered


8.11.5. selected


8.11.6. unavailable

8.12. Interface: IRendererTheme

8.12.1. Hierarchy

  • IRendererTheme

8.12.2. Properties

8.12.3. bgColor

  • bgColor: string


8.12.4. Optional colorCategories

  • colorCategories? : string[]


8.12.5. gridStep

  • gridStep: number


8.12.6. Optional images

images? : *undefined

object*


8.12.7. priceColors

  • priceColors: string[][]


8.12.8. seatStyles

8.13. Interface: ISeatStyle

8.13.1. Hierarchy

  • ISeatStyle

8.13.2. Properties

8.13.3. color

  • color: string


8.13.4. Optional imageId

imageId? : *undefined

string*


8.13.5. Optional seatName

seatName? : *undefined

object*


8.13.6. Optional shadow

shadow? : *undefined

object*


8.13.7. size

  • size: number


8.13.8. Optional stroke

stroke? : *undefined

object*

8.14. Interface: ISection

8.14.1. Hierarchy

  • ISection

8.14.2. Properties

8.14.3. ga

  • ga: boolean


8.14.4. Optional id

id? : *undefined

number*


8.14.5. name

  • name: string


8.14.6. Optional price

price? : *undefined

number*


8.14.7. rect

  • rect: ISectionRect


8.14.8. Optional special

  • special? : ISpecialState

8.15. Interface: IZoomSettings

8.15.1. Hierarchy

  • IZoomSettings

8.15.2. Properties

8.15.3. maxPinchZoom

  • maxPinchZoom: number


8.15.4. maxZoomToFitScale

  • maxZoomToFitScale: number


8.15.5. minPinchZoom

  • minPinchZoom: number


8.15.6. presets

  • presets: number[]

9. API Licensing Agreement

This Customer Agreement (hereinafter – the "Agreement") sets out the terms and conditions of using the Seatmap.pro website (hereinafter "Terms of Use"), accessible at https://seatmap.pro (hereinafter, the "Website"). Before using the Website, the natural person (hereinafter "Customer") must read, agree with and accept these Terms of Use. If the Customer doesn’t accept the terms of this Agreement and shall not accept to be bound by all the terms of this Agreement, they should stop using the Website immediately.

This API licensing agreement (hereinafter referred to as the "Agreement") defines the access rights of the Customer (hereinafter referred to as "Licensee") over APIs, data and documentation provided and licensed by Seatmap.pro. By using Seatmap.pro APIs, the Customer is under obligaton to comply with the terms of the Agreement. If the Customer does not agree with the terms of the Agreement, they can not use APIs.

APIs are protected by copyright and international copyright agreements, as well as other intellectual property laws.

9.1. General provisions

  1. An "application programming interface" or "API" is a set of libraries, tools, sample source codes, published specifications and documentation developed by Seatmap.pro. At its own discretion, Seatmap.pro may provide updates or API additions for Licensees.

  2. The documentation includes (but is not limited to) the programmer’s manual, materials and other information needed for the use of APIs.

9.2. Licensing

  1. Under the terms of this Agreement, Seatmap.pro grants the Licensee a limited, non-exclusive, non-transferable license (without the right to sublicense) to use APIs solely for the Licensee’s personal use (for the development of apps to work with Seatmap.pro products).
    The Licensee may not distribute, license, or otherwise transfer APIs to third parties.

9.3. Other Rights and Restrictions

  1. The Licensee may copy the APIs only for use under the terms of this Agreement.

  2. Reverse engineering. The Licensee has no rights over the API source code except for the rights expressly granted to the Licensee by this Agreement. The Licensee is not entitled to process, decompile, modify, or disassemble APIs, or otherwise bring the APIs to a generally accepted form of submission, in whole or in part, except as expressly permitted by this Agreement or applicable law.

  3. For the efficient use of API, additional development tools such as a compiler or other software (“Third-Party Software”) may be required. Licensee bears full responsibility for the purchase of this software and the necessary licenses. Seatmap.pro is not under any obligation and makes no warranties regarding the use of third-party software by the Licensee.

  4. The Licensee is not entitled to sublicense their rights under this Agreement, except for the cases expressly provided in this Agreement. The Licensee may not use Seatmap.pro trademarks or trade names. Seatmap.pro reserves all rights not expressly granted herein.

  5. The Licensee cannot obtain patent rights to APIs or applications developed using the Seatmap.pro API or APIs of other Seatmap.pro API licensees to create, use or sell any products or technologies.

9.4. Property

  1. Seatmap.pro shall reserve the property rights, including all rights to patents, copyrights, trade secrets, trademark and other intellectual property rights to APIs and any changes thereto. Seatmap.pro has exclusive right to register any patents and copyrights. The Licensee recognizes that under this Agreement the Licensee does not have property rights over APIs, only the right to limited use under the terms of this Agreement.

9.5. Support

  1. Seatmap.pro Customer Support does not provide technical support for the APIs under the terms of this Agreement and does not provide updates, bug fixes or API changes.

9.6. Confidentiality

  1. APIs contain valuable information about the company and commercial secrets belonging to Seatmap.pro. These remain the property of Seatmap.pro. Licensees are required to avoid disclosing this information and avoid unauthorized use of APIs.

  2. The Licensee shall not disclose, advertise or publish the terms of this Agreement without the prior written consent of Seatmap.pro. Any press release or publication relevant to this Agreement is subject to prior review and written approval by Seatmap.pro.

9.7. No warranty

  1. APIs and documentation are provided "as is" without warranty of any kind. Seatmap.pro does not warrant that APIs and documentation are suitable for use by Licensee and free of defects or errors. In addition, Seatmap.pro does not guarantee continuous and uninterrupted access to APIs and documentation and makes no warranties or representations regarding the results of their use.

9.8. Limitation of Liability

  1. The Licensee is fully liable for any damage to their computer system or loss of data resulting from the download or use of APIs. Seatmap.pro shall not be liable for any special, incidental, consequential damages (including, but not limited to, loss of profits, suspension or termination of work, failure or breakdown of the computer, loss of information or any other damages, including financial damages, arising from the use of or inability to use APIs or the provision or lack of provision of support services), even if Seatmap.pro has been notified of the possibility of such damage.

9.9. Indemnity

  1. Licensee shall not hold Seatmap.pro, its customers, suppliers or other partners and employees liable for any losses, claims or demands, reasonable legal fees arising from the use of APIs.

9.10. Term and Termination of the Agreement

  1. In the event that the Licensee fails to comply with any of the terms of this Agreement, they will be held liable to Seatmap.pro for any loss or damage arising from the breach of terms.

  2. Upon termination of this Agreement, the Licensee shall immediately terminate the use of APIs, delete all copies of APIs and documentation or return them to Seatmap.pro.

  3. Seatmap.pro shall be entitled to verify compliance of the Licensee with the terms of the Agreement. The Licensee, at the request of Seatmap.pro, is obliged to facilitate this.

9.11. Miscellaneous

  1. Violation or failure to comply with the terms of this Agreement shall result in its termination.

  2. Seatmap.pro shall be entitled to suspend (or terminate), at its own discretion and without notice, the Licensee’s access to the Service in the event that the terms of the Agreement are violated.

  3. By installing, copying or otherwise using Seatmap.pro APIs, the Licensee acknowledges that that they have read, understood and agree to the conditions specified above.

10. Contact us

For any questions please mail us hello@seatmap.pro