VM Access Platform
The VM Access Platform is an access control solution for eg sport and festival venues. It is a product from Venue Manager A/S.
During development the project’s codename was “Beautiful Bjarne”. The name has stuck a few places.
A central server provides a REST API for creating and updating
-
Venues (a site with entrances and zones)
-
Events (takes place at a venue at a given date and time; has a number of ticket types)
-
Tickets (with barcodes, NFC UIDs or other tokens, grants access to events)
The server communicates with a number of scanning devices, that reads the ticket tokens and grants/denies access based on the rules set up for the event. The scanning devices can be integrated in a turnstile, control a signal light or perhaps be an app on a mobile device. In all cases an API based on RabbitMQ is used for the communication between server and scanner devices.
The scanning devices receive a complete data set from the server. This way the device can decide whether to grant or deny access for a scanned ticket without having to ask the server.
Authentication
Authentication can be done in two ways.
-
Basic
that uses a username and a password. Username format: username[@organizer_label] -
Bearer
that uses a JSON Web Token (issued byPOST /users/token
withBasic
authentication). JWT format: token[@organizer_label]
In both cases the username (or JWT) can include an optional organizer-label, which is required for some end-points if the user is related to multiple organizers.
NOTE For the request to /users/token
the username should not include the organizer-label!
Public end-points
Some end points are public, meaning they do not require a user, and therefore do not require the Authentication header.
Instead the following two headers should be set:
-
X-Organizer
with the relevant organizer-label. -
X-Client
with a client agent string that identifies what application is performing the request.It is recommended to follow the syntax of the User-Agent header, e.g. “ScannerWebApp/1.0 (device #1)”
Most of these public end-points also requires the usage of UUID strings instead of ID.
Error codes
All end-points can return an error object, which contains an error
property with a textual explanation of the error.
For some 400 errors the errorCode
property can be checked for a technical check of the error.
Below is a complete list of possible errorCode
values:
-
1001
: Id from request and body does not matchThe ID in the URL does not match the ID of the object in the request body.
-
1002
: Missing propertyA required property is not specified, either as GET parameters or on the object in the request body.
-
1003
: Value is emptyA value cannot be set as empty.
-
1004
: Invalid valueA value is invalid, either because it must be one of a set of values, or the format is invalid.
-
1005
: State mismatchThe status/state property cannot change from its current value to the specified value.
-
1006
: Name already usedThe specified name is already used by another entity.
-
1007
: Name contains invalid termsThe specified name contains at least one term from the profanity blacklist.
-
1008
: Access type stock errorCannot add an access type because of its stock
-
1009
: Virtual queue is closedCannot perform the wanted while virtual queue is closed.
-
1010
: Virtual queue is closingCannot perform the wanted while virtual queue is closing.
-
1011
: To many tickets in couponA coupon cannot be created with more tickets than allowed.
-
1012
: Not enough room for showThe queue does not have enough room available for the selected show.
-
1013
: Ticket already has an active couponThe ticket is in an active coupon for a queue of the same type (calendar or flow/max-population)
-
1014
: Ticket is not validThe ticket is not valid and therefore cannot be used for e.g. a virtual queue coupon
-
1015
: Token value is not valid for its token typeThe value of the token is not valid according to its token type validation restrictions
-
1016
: The allowed cancellation time for this scanning has expiredThe time allowed to cancel the scan has expired.
NOTE Not all end-points can return all error codes.
A note about synchronization
To facilitate the scanning devices’ synchronization with the server all entities have these properties:
-
syncId
A monotonically increasing number issued by the server. Every time an entity is changed (ie created, updated, deleted) the syncId is updated.
Two objects will never share the same syncId.
The syncId is a signed 64-bit integer.
The syncId is also used to protect against concurrent changes to an entity by two users. In PUT and DELETE operations the syncId must match the current value in the database (or set to NULL to force the operation).
-
isDeleted
When entities are deleted, they are not actually removed from the database. Instead the isDeleted property is se to true. However the entity will be invisible for all future GET/PUT/DELETE operations from the API.
System ¶
Daemon ¶
Ping daemonGET/daemon/ping{?style,waitDelay}
Example URI
- style
enum
(optional)Use simple to only output the response time, as seconds, instead of a JSON object
Choices:
simple
json
- waitDelay
number
(optional) Example: 3How many seconds should we wait for a response?
200
Body
0.041
200
Headers
Content-Type: application/json
Body
{
"error": false,
"seconds": 0.041,
"message": "``"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "boolean"
},
"seconds": {
"type": "number"
},
"message": {
"type": "string"
}
},
"required": [
"error",
"seconds",
"message"
]
}
500
Headers
Content-Type: application/json
Body
{
"error": true,
"seconds": 4,
"message": "MessagePing did not receive a Success response"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "boolean"
},
"seconds": {
"type": "number"
},
"message": {
"type": "string"
}
},
"required": [
"error",
"seconds",
"message"
]
}
Devices ¶
The hardware devices used for scanning tickets are managed here.
Devices ¶
List all devicesGET/devices{?allowDeleted}
Example URI
- allowDeleted
boolean
(optional) Example: 1Find the devices, even if they are deleted
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 70,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc",
"organizers": [
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest"
}
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new devicePOST/devices
Will automatically create a device lane as well.
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": "string"
},
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"uniqueId": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"uuid",
"type",
"name",
"label",
"uniqueId"
]
}
201
Headers
Content-Type: application/json
Location: /devices/{deviceId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 70,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": "string"
},
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"uniqueId": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"type",
"name",
"label",
"uniqueId"
]
}
List all devices with infoGET/devices/info
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 70,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc",
"organizers": [
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest"
}
],
"lastSeenServerTime": "Hello, world!",
"lastSeenDeviceTime": "Hello, world!",
"queueUser": "Hello, world!",
"appVersion": "Hello, world!"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Search for devicesGET/devices/search{?organizerId,organizerLabel,search,offset,limit}
Search for devices for pagination.
Example URI
- search
string
(optional) Example: central*Search in name, label, and unique ID for this string. Can do a wildcard search with *. To search for * escape it with *.
- organizerId
number
(optional) Example: 10Only find devices for this organizer. If set to 0 it will find all devices without any organizer
- organizerLabel
string
(optional) Example: smukfestSame as organizerId, just the label of the organizer instead of the ID
- offset
number
(optional) Example: 0- limit
number
(optional) Example: 100
200
Headers
Content-Type: application/json
Body
{
"entities": [
{
"syncId": 999,
"isDeleted": false,
"id": 70,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc",
"organizers": [
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest"
}
]
}
],
"totalCount": 123
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"entities": {
"type": "array"
},
"totalCount": {
"type": "number",
"description": "The total number of devices matching the search."
}
}
}
Deletable device IDsGET/devices/deletableIds
Get the IDs of all devices that can be deleted. This does not validate if the user can actually delete the device.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Device ¶
Get deviceGET/devices/{deviceId}
Example URI
- deviceId
number
(required) Example: 70
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 70,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc",
"lanes": [
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": "string"
},
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"uniqueId": {
"type": "string"
},
"lanes": {
"type": "array"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"type",
"name",
"label",
"uniqueId",
"lanes"
]
}
Update devicePUT/devices/{deviceId}
The ID in the URL and the body must match.
Example URI
- deviceId
number
(required) Example: 70
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 70,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": "string"
},
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"uniqueId": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"type",
"name",
"label",
"uniqueId"
]
}
204
Delete deviceDELETE/devices/{deviceId}
Example URI
- deviceId
number
(required) Example: 70
204
Device lanes ¶
List all device lanesGET/devices/lanes
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create device lanesPOST/devices/lanes
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"deviceId": 70,
"name": "1",
"allowedModes": 0,
"selectedMode": 0
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"deviceId": {
"type": "number"
},
"name": {
"type": "string"
},
"allowedModes": {
"type": "number",
"description": "Bit mask: 1=scan in, 2=scan out, 4=count in, 8=count out, 16=open in, 32=open out. Closed is always allowed"
},
"selectedMode": {
"type": "number",
"description": "Selected modes. A bit mask from allowedModes, or 0 for closed."
}
},
"required": [
"syncId",
"isDeleted",
"deviceId",
"name",
"allowedModes",
"selectedMode"
]
}
201
Headers
Content-Type: application/json
Location: /devices/{deviceId}/lanes/{deviceLaneId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1,
"msgType": "DeviceLane"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"deviceId": {
"type": "number"
},
"name": {
"type": "string"
},
"allowedModes": {
"type": "number",
"description": "Bit mask: 1=scan in, 2=scan out, 4=count in, 8=count out, 16=open in, 32=open out. Closed is always allowed"
},
"selectedMode": {
"type": "number",
"description": "Selected modes. A bit mask from allowedModes, or 0 for closed."
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"deviceId",
"name",
"allowedModes",
"selectedMode",
"msgType"
]
}
Device lane ¶
Get device laneGET/devices/{deviceId}/lanes/{deviceLaneId}
Example URI
- deviceId
number
(required) Example: 70- deviceLaneId
number
(required) Example: 70
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"deviceId": {
"type": "number"
},
"name": {
"type": "string"
},
"allowedModes": {
"type": "number",
"description": "Bit mask: 1=scan in, 2=scan out, 4=count in, 8=count out, 16=open in, 32=open out. Closed is always allowed"
},
"selectedMode": {
"type": "number",
"description": "Selected modes. A bit mask from allowedModes, or 0 for closed."
}
},
"required": [
"syncId",
"isDeleted",
"id",
"deviceId",
"name",
"allowedModes",
"selectedMode"
]
}
Update device lanePUT/devices/{deviceId}/lanes/{deviceLaneId}
The IDs in the URL and the body must match.
Example URI
- deviceId
number
(required) Example: 70- deviceLaneId
number
(required) Example: 70
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"deviceId": {
"type": "number"
},
"name": {
"type": "string"
},
"allowedModes": {
"type": "number",
"description": "Bit mask: 1=scan in, 2=scan out, 4=count in, 8=count out, 16=open in, 32=open out. Closed is always allowed"
},
"selectedMode": {
"type": "number",
"description": "Selected modes. A bit mask from allowedModes, or 0 for closed."
}
},
"required": [
"syncId",
"isDeleted",
"id",
"deviceId",
"name",
"allowedModes",
"selectedMode"
]
}
204
Delete device laneDELETE/devices/{deviceId}/lanes/{deviceLaneId}
Example URI
- deviceId
number
(required) Example: 70- deviceLaneId
number
(required) Example: 70
204
Device lanes - directly ¶
List all device lanesGET/deviceLanes{?deviceId}
Example URI
- deviceId
number
(required) Example: 70
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create device lanesPOST/deviceLanes{?deviceId}
Example URI
- deviceId
number
(required) Example: 70
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"deviceId": 70,
"name": "1",
"allowedModes": 0,
"selectedMode": 0
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"deviceId": {
"type": "number"
},
"name": {
"type": "string"
},
"allowedModes": {
"type": "number",
"description": "Bit mask: 1=scan in, 2=scan out, 4=count in, 8=count out, 16=open in, 32=open out. Closed is always allowed"
},
"selectedMode": {
"type": "number",
"description": "Selected modes. A bit mask from allowedModes, or 0 for closed."
}
},
"required": [
"syncId",
"isDeleted",
"deviceId",
"name",
"allowedModes",
"selectedMode"
]
}
201
Headers
Content-Type: application/json
Location: /devices/{deviceId}/lanes/{deviceLaneId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1,
"msgType": "DeviceLane"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"deviceId": {
"type": "number"
},
"name": {
"type": "string"
},
"allowedModes": {
"type": "number",
"description": "Bit mask: 1=scan in, 2=scan out, 4=count in, 8=count out, 16=open in, 32=open out. Closed is always allowed"
},
"selectedMode": {
"type": "number",
"description": "Selected modes. A bit mask from allowedModes, or 0 for closed."
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"deviceId",
"name",
"allowedModes",
"selectedMode",
"msgType"
]
}
Device lane - directly ¶
Get device laneGET/deviceLanes/{deviceLaneId}
Example URI
- deviceLaneId
number
(required) Example: 70
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"deviceId": {
"type": "number"
},
"name": {
"type": "string"
},
"allowedModes": {
"type": "number",
"description": "Bit mask: 1=scan in, 2=scan out, 4=count in, 8=count out, 16=open in, 32=open out. Closed is always allowed"
},
"selectedMode": {
"type": "number",
"description": "Selected modes. A bit mask from allowedModes, or 0 for closed."
}
},
"required": [
"syncId",
"isDeleted",
"id",
"deviceId",
"name",
"allowedModes",
"selectedMode"
]
}
Update device lanePUT/deviceLanes/{deviceLaneId}
The IDs in the URL and the body must match.
Example URI
- deviceLaneId
number
(required) Example: 70
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"deviceId": {
"type": "number"
},
"name": {
"type": "string"
},
"allowedModes": {
"type": "number",
"description": "Bit mask: 1=scan in, 2=scan out, 4=count in, 8=count out, 16=open in, 32=open out. Closed is always allowed"
},
"selectedMode": {
"type": "number",
"description": "Selected modes. A bit mask from allowedModes, or 0 for closed."
}
},
"required": [
"syncId",
"isDeleted",
"id",
"deviceId",
"name",
"allowedModes",
"selectedMode"
]
}
204
Delete device laneDELETE/deviceLanes/{deviceLaneId}
Example URI
- deviceLaneId
number
(required) Example: 70
204
Device organizers ¶
List all organizers for the deviceGET/devices/{deviceId}/organizers
Example URI
- deviceId
number
(required) Example: 70
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Device organizer ¶
Add device to organizerPOST/devices/{deviceId}/organizers/{organizerId}
Example URI
- deviceId
number
(required) Example: 70- organizerId
number
(required) Example: 10
204
Remove device from organizerDELETE/devices/{deviceId}/organizers/{organizerId}
Example URI
- deviceId
number
(required) Example: 70- organizerId
number
(required) Example: 10
204
Device state changes ¶
Get device state changesGET/devices/{deviceId}/stateChanges{?from,to,types,search,offset,limit}
Find all state changes for a device.
Example URI
- deviceId
number
(required) Example: 70- from
string
(optional) Example: 2019-01-01T05:00:00+02:00- to
string
(optional) Example: 2019-01-01T05:00:00+02:00- types
enum
(optional)+ Members + battery + Firmware: Central board #0 + Firmware: Remote I/O for lane A #1 + Firmware: Remote I/O for lane B #1 + gps + last_sync_id:event:* + mobile_is_connected + mobile_link_speeds + power + shutdown + wifi_is_connected + wifi_link_speed
- search
string
(optional)Searches in the value of the stateChange. Can do a wildcard search with *. To search for * escape it with *.
- offset
number
(optional) Example: 0- limit
number
(optional) Example: 100
200
Headers
Content-Type: application/json
Body
{
"stateChanges": [
{
"id": 72,
"deviceId": 70,
"serverTime": "2018-08-05T12:30:00+02:00",
"deviceTime": "2018-08-05T12:30:00+02:00",
"type": "power",
"value": "off"
}
],
"totalCount": 123
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"stateChanges": {
"type": "array"
},
"totalCount": {
"type": "number",
"description": "The total number of state changes for this device (of the specified type)."
}
}
}
Get latest device state changeGET/devices/{deviceId}/stateChanges/{type}
Find the latest state change for the device of the specified type.
Example URI
- deviceId
number
(required) Example: 70- type
string
(required) Example: powerType of state (power|battery|gps|shutdown).
200
Headers
Content-Type: application/json
Body
{
"id": 72,
"deviceId": 70,
"serverTime": "2018-08-05T12:30:00+02:00",
"deviceTime": "2018-08-05T12:30:00+02:00",
"type": "power",
"value": "off"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"deviceId": {
"type": "number",
"description": "ID of the device reporting."
},
"serverTime": {
"type": "string",
"description": "The server time when the state change was received."
},
"deviceTime": {
"type": "string",
"description": "The client local time when the state change occurred."
},
"type": {
"type": "string",
"description": "Type of state (power|battery|gps|shutdown)."
},
"value": {
"type": "string",
"description": "The new value."
}
},
"required": [
"id",
"deviceId",
"serverTime",
"deviceTime",
"type",
"value"
]
}
Device info ¶
Get device infoGET/devices/{deviceId}/info
Example URI
- deviceId
number
(required) Example: 70
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 70,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc",
"connection": {
"status": "connected",
"lastSeen": "2017-08-05T12:30:00+02:00",
"queueUser": "VM_0109",
"appVersion": "1.0.9",
"event": {
"deviceId": 70,
"eventId": 30,
"lastSyncId": 12345,
"updated": "2017-08-05T12:30:00+02:00"
},
"lanes": [
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 0,
"selectedMode": 0,
"lastSeen": "2017-08-05T12:30:00+02:00",
"status": "connected"
}
]
},
"batteryState": null,
"powerState": null,
"location": null,
"network": {
"wired": null,
"wifi": {
"connected": true,
"strength": 99
},
"mobile": {
"connected": true,
"strengths": {
"LTE": [],
"WCDMA": []
}
}
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": "string"
},
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"uniqueId": {
"type": "string"
},
"connection": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"connected",
"disconnected",
"turned off"
]
},
"lastSeen": {
"type": "string"
},
"queueUser": {
"type": [
"string",
"null"
]
},
"appVersion": {
"type": [
"string",
"null"
]
},
"event": {
"type": [
"object",
"null"
],
"properties": {
"deviceId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"lastSyncId": {
"type": "number"
},
"updated": {
"type": "string"
}
},
"required": [
"deviceId",
"eventId",
"lastSyncId",
"updated"
]
},
"lanes": {
"type": "array"
}
},
"required": [
"status",
"lastSeen",
"queueUser",
"appVersion",
"event",
"lanes"
]
},
"batteryState": {
"type": [
"string",
"null"
]
},
"powerState": {
"type": [
"string",
"null"
]
},
"location": {
"type": [
"string",
"null"
]
},
"network": {
"type": "object",
"properties": {
"wired": {
"type": [
"object",
"null"
],
"properties": {},
"description": "Reserved for future use"
},
"wifi": {
"type": "object",
"properties": {
"connected": {
"type": [
"boolean",
"null"
]
},
"strength": {
"type": "number",
"description": "Strength in percentage"
}
},
"required": [
"connected",
"strength"
]
},
"mobile": {
"type": "object",
"properties": {
"connected": {
"type": [
"boolean",
"null"
]
},
"strengths": {
"type": "object",
"properties": {
"LTE": {
"type": "array",
"description": "Strengths in dbm for all LTE (4G) connection"
},
"WCDMA": {
"type": "array",
"description": "Strengths in dbm for all WCDMA (3G) connection"
}
}
}
},
"required": [
"connected",
"strengths"
]
}
},
"required": [
"wired",
"wifi",
"mobile"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"type",
"name",
"label",
"uniqueId",
"connection",
"batteryState",
"powerState",
"location",
"network"
]
}
Update device infoPUT/devices/{deviceId}/info
Example URI
- deviceId
number
(required) Example: 70
Headers
Content-Type: application/json
Body
{
"queueUser": "VM_0109",
"appVersion": "1.0.9"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"queueUser": {
"type": "string"
},
"appVersion": {
"type": "string"
}
}
}
204
Device organizer configurations ¶
Configurations for the device, specific for the current organizer.
Get device organizer configurationsGET/devices/{deviceId}/organizerConfigurations
Example URI
- deviceId
number
(required) Example: 70
200
Headers
Content-Type: application/json
Body
{
"id": 72,
"organizerId": 10,
"deviceId": 70,
"mobilepayClientId": "Hello, world!",
"mobilepayClientSecret": "Hello, world!",
"mobilepayMerchantVatNumber": "Hello, world!",
"mobilepayStoreId": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"deviceId": {
"type": "number"
},
"mobilepayClientId": {
"type": [
"string",
"null"
]
},
"mobilepayClientSecret": {
"type": [
"string",
"null"
]
},
"mobilepayMerchantVatNumber": {
"type": [
"string",
"null"
]
},
"mobilepayStoreId": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"organizerId",
"deviceId",
"mobilepayClientId",
"mobilepayClientSecret",
"mobilepayMerchantVatNumber",
"mobilepayStoreId"
]
}
Update device organizer configurationsPUT/devices/{deviceId}/organizerConfigurations
The ID in the URL and the body must match.
Example URI
- deviceId
number
(required) Example: 70
Headers
Content-Type: application/json
Body
{
"id": 72,
"organizerId": 10,
"deviceId": 70,
"mobilepayClientId": "Hello, world!",
"mobilepayClientSecret": "Hello, world!",
"mobilepayMerchantVatNumber": "Hello, world!",
"mobilepayStoreId": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"deviceId": {
"type": "number"
},
"mobilepayClientId": {
"type": [
"string",
"null"
]
},
"mobilepayClientSecret": {
"type": [
"string",
"null"
]
},
"mobilepayMerchantVatNumber": {
"type": [
"string",
"null"
]
},
"mobilepayStoreId": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"organizerId",
"deviceId",
"mobilepayClientId",
"mobilepayClientSecret",
"mobilepayMerchantVatNumber",
"mobilepayStoreId"
]
}
204
Feedbacks ¶
Feedbacks ¶
Feedback definitions syntax:
-
green
: Green light for a short while. This is the default feedback for “access granted”. -
red
: Red light for a short while. This is the default feedback for “access denied” and should not be used. -
yellow
: Yellow light for a short while. -
blue
: Blue light for a short while.
Special feedback definitions:
-
special:force_lane_direction
: Change the lane to the next allowed mode in the same direction as the scanner used (e.g. if the token is scanned by the in-scanner the mode is changed to either scan_in, count_in, or open_in). -
special:change_lane_direction
: Change the lane to the opposite direction as it is now, preferably of the same type (scan, count, open) as its current mode. -
special:change_lane_mode
: Change the lane to the next allowed mode (except for closed). -
special:change_lane_to_in
: Change the lane to the next allowed mode in the in-direction (scan_in, count_in, open_in), preferably of the same type (scan, count, open) as its current mode. -
special:change_lane_to_out
: Change the lane to the next allowed mode in the out-direction (scan_out, count_out, open_out), preferably of the same type (scan, count, open) as its current mode. -
special:change_lane_to_scan_in
: Change the lane to scan_in mode, if allowed. -
special:change_lane_to_scan_out
: Change the lane to scan_out mode, if allowed. -
special:change_lane_to_count_in
: Change the lane to count_in mode, if allowed. -
special:change_lane_to_count_out
: Change the lane to count_out mode, if allowed. -
special:change_lane_to_open_in
: Change the lane to open_in mode, if allowed. -
special:change_lane_to_open_out
: Change the lane to open_out mode, if allowed. -
special:change_lane_to_closed
: Change the lane to closed. It is not possible to use a special feedback to change away from closed! -
special:forced_closed_on_direction
: Set forced closed in the scanned direction. -
special:forced_closed_off_direction
: Remove forced closed in the scanned direction. -
special:forced_closed_toggle_direction
: Toggle forced closed in the scanned direction.
List all feedbacksGET/feedbacks{?name}
Example URI
- name
string
(optional)
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 13,
"name": "Grøn med gult blink",
"label": "green",
"definition": "beep2"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new feedbackPOST/feedbacks
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"name": "Grøn med gult blink",
"label": "green",
"definition": "beep2"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"label": {
"type": "string",
"description": "Unique identifier for this Feedback"
},
"definition": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"name",
"label",
"definition"
]
}
201
Headers
Content-Type: application/json
Location: /feedbacks/{deviceId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 13,
"name": "Grøn med gult blink",
"label": "green",
"definition": "beep2",
"msgType": "Feedback"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"label": {
"type": "string",
"description": "Unique identifier for this Feedback"
},
"definition": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name",
"label",
"definition",
"msgType"
]
}
Deletable feedback IDsGET/feedbacks/deletableIds
Get the IDs of all feedbacks that can be deleted. This does not validate if the user can actually delete the feedback.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Feedback ¶
Get feedbackGET/feedbacks/{feedbackId}
Example URI
- feedbackId
number
(required) Example: 70
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 13,
"name": "Grøn med gult blink",
"label": "green",
"definition": "beep2"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"label": {
"type": "string",
"description": "Unique identifier for this Feedback"
},
"definition": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name",
"label",
"definition"
]
}
Update feedbackPUT/feedbacks/{feedbackId}
The ID in the URL and the body must match.
Example URI
- feedbackId
number
(required) Example: 70
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 13,
"name": "Grøn med gult blink",
"label": "green",
"definition": "beep2"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"label": {
"type": "string",
"description": "Unique identifier for this Feedback"
},
"definition": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name",
"label",
"definition"
]
}
204
Delete feedbackDELETE/feedbacks/{feedbackId}
Example URI
- feedbackId
number
(required) Example: 70
204
Token types ¶
Tickets are identified by one or more tokens, eg a Code128 barcode or an NFC UID. Here the possible token types are defined.
Token types ¶
List all token typesGET/tokenTypes{?name}
Example URI
- name
string
(optional)
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 110,
"name": "NFC UID",
"transform": "uppercase",
"validation": "/^[0-9A-F]+$/"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new token typePOST/tokenTypes
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"name": "NFC UID",
"transform": "uppercase",
"validation": "/^[0-9A-F]+$/"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"transform": {
"type": "string",
"enum": [
"uppercase",
"lowercase"
],
"description": "Transform values before validation and save"
},
"validation": {
"type": "string",
"description": "Regular expression for validating token values before they are saved. If specified it must be a full PCRE pattern, see https://www.php.net/manual/en/reference.pcre.pattern.syntax.php"
}
},
"required": [
"syncId",
"isDeleted",
"name"
]
}
201
Headers
Content-Type: application/json
Location: /tokenTypes/{tokenTypeId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 110,
"name": "NFC UID",
"transform": "uppercase",
"validation": "/^[0-9A-F]+$/",
"msgType": "TokenType"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"transform": {
"type": "string",
"enum": [
"uppercase",
"lowercase"
],
"description": "Transform values before validation and save"
},
"validation": {
"type": "string",
"description": "Regular expression for validating token values before they are saved. If specified it must be a full PCRE pattern, see https://www.php.net/manual/en/reference.pcre.pattern.syntax.php"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name",
"msgType"
]
}
Deletable token type IDsGET/tokenTypes/deletableIds
Get the IDs of all token types that can be deleted. This does not validate if the user can actually delete the token type.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Token type ¶
Get token typeGET/tokenTypes/{tokenTypeId}
Example URI
- tokenTypeId
number
(required) Example: 110
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 110,
"name": "NFC UID",
"transform": "uppercase",
"validation": "/^[0-9A-F]+$/"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"transform": {
"type": "string",
"enum": [
"uppercase",
"lowercase"
],
"description": "Transform values before validation and save"
},
"validation": {
"type": "string",
"description": "Regular expression for validating token values before they are saved. If specified it must be a full PCRE pattern, see https://www.php.net/manual/en/reference.pcre.pattern.syntax.php"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name"
]
}
Update token typePUT/tokenTypes/{tokenTypeId}
The ID in the URL and the body must match.
Example URI
- tokenTypeId
number
(required) Example: 110
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 110,
"name": "NFC UID",
"transform": "uppercase",
"validation": "/^[0-9A-F]+$/"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"transform": {
"type": "string",
"enum": [
"uppercase",
"lowercase"
],
"description": "Transform values before validation and save"
},
"validation": {
"type": "string",
"description": "Regular expression for validating token values before they are saved. If specified it must be a full PCRE pattern, see https://www.php.net/manual/en/reference.pcre.pattern.syntax.php"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name"
]
}
204
Delete token typeDELETE/tokenTypes/{tokenTypeId}
Example URI
- tokenTypeId
number
(required) Example: 110
204
Organizers ¶
Organizers ¶
List all organizersGET/organizers
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new organizerPOST/organizers
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"label": "smukfest",
"name": "Smukfest"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"label": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"label",
"name"
]
}
201
Headers
Content-Type: application/json
Location: /organizers/{organizerId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest",
"msgType": "Organizer"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"label": {
"type": "string"
},
"name": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"label",
"name",
"msgType"
]
}
Organizer ¶
Get organizerGET/organizers/{organizerId}
Example URI
- organizerId
number
(required) Example: 10
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"label": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"label",
"name"
]
}
Update organizerPUT/organizers/{organizerId}
The ID in the URL and the body must match.
Example URI
- organizerId
number
(required) Example: 10
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"label": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"label",
"name"
]
}
204
Delete organizerDELETE/organizers/{organizerId}
Example URI
- organizerId
number
(required) Example: 10
204
Organizer configurations ¶
Organizer-specific configurations for the Access system.
Get organizer configurationsGET/organizers/{organizerId}/configurations
Example URI
- organizerId
number
(required) Example: 10
200
Headers
Content-Type: application/json
Body
{
"id": 15,
"organizerId": 10,
"timeZone": "Europe/Copenhagen",
"dayStartTime": "00:00:00",
"defaultEventImageUrl": "https://placekitten.com/480/640",
"defaultZoneImageUrl": "https://placekitten.com/300/300",
"backgroundColor": "#FFFFFF",
"foregroundColor": "#000000",
"virtualQueueBackgroundColor": "#FFFFFF",
"virtualQueueForegroundColor": "#000000",
"virtualQueueButtonBackgroundColor": "#000000",
"virtualQueueButtonForegroundColor": "#FFFFFF",
"calloutPrimaryBackgroundColor": "#000000",
"calloutPrimaryForegroundColor": "#FFFFFF",
"calloutSecondaryBackgroundColor": "#000000",
"calloutSecondaryForegroundColor": "#FFFFFF",
"calloutActiveForegroundColor": "#FFFFFF",
"calloutNumberOfNamesPerSlide": 28,
"webAppPin": 1234,
"timeoutAccessAssumed": 5000,
"timeoutAccessNotGranted": 10000,
"timeoutAccessUnused": 6000,
"timeoutScanToEntry": 1500
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"timeZone": {
"type": "string"
},
"dayStartTime": {
"type": "string",
"description": "Start time of a day period"
},
"defaultEventImageUrl": {
"type": "string",
"description": "URL to a default event image (used if the event does not have an image)"
},
"defaultZoneImageUrl": {
"type": "string",
"description": "URL to a default zone image (used if the zone does not have an image)"
},
"backgroundColor": {
"type": "string",
"description": "Primary background color. Used for the scanner WebApp"
},
"foregroundColor": {
"type": "string",
"description": "Primary foreground color. Used for the scanner WebApp"
},
"virtualQueueBackgroundColor": {
"type": "string",
"description": "Background color used for the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueForegroundColor": {
"type": "string",
"description": "Foreground color used for the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueButtonBackgroundColor": {
"type": "string",
"description": "Background color used for buttons in the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueButtonForegroundColor": {
"type": "string",
"description": "Foreground color used for buttons in the virtual queue coupon flow in the scanner WebApp"
},
"calloutPrimaryBackgroundColor": {
"type": "string",
"description": "Primary background color used for the callout screen"
},
"calloutPrimaryForegroundColor": {
"type": "string",
"description": "Primary foreground color used for the callout screen"
},
"calloutSecondaryBackgroundColor": {
"type": "string",
"description": "Secondary background color used for the callout screen"
},
"calloutSecondaryForegroundColor": {
"type": "string",
"description": "Secondary foreground color used for the callout screen"
},
"calloutActiveForegroundColor": {
"type": "string",
"description": "Active foreground color used for the callout screen"
},
"calloutNumberOfNamesPerSlide": {
"type": "number",
"description": "The number of names per slide for the callout screen."
},
"webAppPin": {
"type": "number",
"description": "The PIN code that should be used to perform actions in the WebApp"
},
"timeoutAccessAssumed": {
"type": "number",
"description": "How long we should wait before assuming the user has entered a gate that cannot provide feedback (in ms)"
},
"timeoutAccessNotGranted": {
"type": "number",
"description": "How long we should wait when no physical device is used to grant entry (in ms)"
},
"timeoutAccessUnused": {
"type": "number",
"description": "How long we should wait for feedback, from the turnstile, about entry before cancelling the scanning (in ms)"
},
"timeoutScanToEntry": {
"type": "number",
"description": "How long after each scanning we should allow for entry (in ms)"
}
},
"required": [
"id",
"organizerId",
"timeZone",
"dayStartTime"
]
}
Update organizer configurationsPUT/organizers/{organizerId}/configurations
The ID in the URL and the body must match.
Example URI
- organizerId
number
(required) Example: 10
Headers
Content-Type: application/json
Body
{
"id": 15,
"organizerId": 10,
"timeZone": "Europe/Copenhagen",
"dayStartTime": "00:00:00",
"defaultEventImageUrl": "https://placekitten.com/480/640",
"defaultZoneImageUrl": "https://placekitten.com/300/300",
"backgroundColor": "#FFFFFF",
"foregroundColor": "#000000",
"virtualQueueBackgroundColor": "#FFFFFF",
"virtualQueueForegroundColor": "#000000",
"virtualQueueButtonBackgroundColor": "#000000",
"virtualQueueButtonForegroundColor": "#FFFFFF",
"calloutPrimaryBackgroundColor": "#000000",
"calloutPrimaryForegroundColor": "#FFFFFF",
"calloutSecondaryBackgroundColor": "#000000",
"calloutSecondaryForegroundColor": "#FFFFFF",
"calloutActiveForegroundColor": "#FFFFFF",
"calloutNumberOfNamesPerSlide": 28,
"webAppPin": 1234,
"timeoutAccessAssumed": 5000,
"timeoutAccessNotGranted": 10000,
"timeoutAccessUnused": 6000,
"timeoutScanToEntry": 1500
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"timeZone": {
"type": "string"
},
"dayStartTime": {
"type": "string",
"description": "Start time of a day period"
},
"defaultEventImageUrl": {
"type": "string",
"description": "URL to a default event image (used if the event does not have an image)"
},
"defaultZoneImageUrl": {
"type": "string",
"description": "URL to a default zone image (used if the zone does not have an image)"
},
"backgroundColor": {
"type": "string",
"description": "Primary background color. Used for the scanner WebApp"
},
"foregroundColor": {
"type": "string",
"description": "Primary foreground color. Used for the scanner WebApp"
},
"virtualQueueBackgroundColor": {
"type": "string",
"description": "Background color used for the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueForegroundColor": {
"type": "string",
"description": "Foreground color used for the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueButtonBackgroundColor": {
"type": "string",
"description": "Background color used for buttons in the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueButtonForegroundColor": {
"type": "string",
"description": "Foreground color used for buttons in the virtual queue coupon flow in the scanner WebApp"
},
"calloutPrimaryBackgroundColor": {
"type": "string",
"description": "Primary background color used for the callout screen"
},
"calloutPrimaryForegroundColor": {
"type": "string",
"description": "Primary foreground color used for the callout screen"
},
"calloutSecondaryBackgroundColor": {
"type": "string",
"description": "Secondary background color used for the callout screen"
},
"calloutSecondaryForegroundColor": {
"type": "string",
"description": "Secondary foreground color used for the callout screen"
},
"calloutActiveForegroundColor": {
"type": "string",
"description": "Active foreground color used for the callout screen"
},
"calloutNumberOfNamesPerSlide": {
"type": "number",
"description": "The number of names per slide for the callout screen."
},
"webAppPin": {
"type": "number",
"description": "The PIN code that should be used to perform actions in the WebApp"
},
"timeoutAccessAssumed": {
"type": "number",
"description": "How long we should wait before assuming the user has entered a gate that cannot provide feedback (in ms)"
},
"timeoutAccessNotGranted": {
"type": "number",
"description": "How long we should wait when no physical device is used to grant entry (in ms)"
},
"timeoutAccessUnused": {
"type": "number",
"description": "How long we should wait for feedback, from the turnstile, about entry before cancelling the scanning (in ms)"
},
"timeoutScanToEntry": {
"type": "number",
"description": "How long after each scanning we should allow for entry (in ms)"
}
},
"required": [
"id",
"organizerId",
"timeZone",
"dayStartTime"
]
}
204
Configurations for current organizer ¶
Get configurations for current organizer (public)GET/organizers/configurations
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": 15,
"organizerId": 10,
"timeZone": "Europe/Copenhagen",
"dayStartTime": "00:00:00",
"defaultEventImageUrl": "https://placekitten.com/480/640",
"defaultZoneImageUrl": "https://placekitten.com/300/300",
"backgroundColor": "#FFFFFF",
"foregroundColor": "#000000",
"virtualQueueBackgroundColor": "#FFFFFF",
"virtualQueueForegroundColor": "#000000",
"virtualQueueButtonBackgroundColor": "#000000",
"virtualQueueButtonForegroundColor": "#FFFFFF",
"calloutPrimaryBackgroundColor": "#000000",
"calloutPrimaryForegroundColor": "#FFFFFF",
"calloutSecondaryBackgroundColor": "#000000",
"calloutSecondaryForegroundColor": "#FFFFFF",
"calloutActiveForegroundColor": "#FFFFFF",
"calloutNumberOfNamesPerSlide": 28,
"webAppPin": 1234,
"timeoutAccessAssumed": 5000,
"timeoutAccessNotGranted": 10000,
"timeoutAccessUnused": 6000,
"timeoutScanToEntry": 1500
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"timeZone": {
"type": "string"
},
"dayStartTime": {
"type": "string",
"description": "Start time of a day period"
},
"defaultEventImageUrl": {
"type": "string",
"description": "URL to a default event image (used if the event does not have an image)"
},
"defaultZoneImageUrl": {
"type": "string",
"description": "URL to a default zone image (used if the zone does not have an image)"
},
"backgroundColor": {
"type": "string",
"description": "Primary background color. Used for the scanner WebApp"
},
"foregroundColor": {
"type": "string",
"description": "Primary foreground color. Used for the scanner WebApp"
},
"virtualQueueBackgroundColor": {
"type": "string",
"description": "Background color used for the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueForegroundColor": {
"type": "string",
"description": "Foreground color used for the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueButtonBackgroundColor": {
"type": "string",
"description": "Background color used for buttons in the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueButtonForegroundColor": {
"type": "string",
"description": "Foreground color used for buttons in the virtual queue coupon flow in the scanner WebApp"
},
"calloutPrimaryBackgroundColor": {
"type": "string",
"description": "Primary background color used for the callout screen"
},
"calloutPrimaryForegroundColor": {
"type": "string",
"description": "Primary foreground color used for the callout screen"
},
"calloutSecondaryBackgroundColor": {
"type": "string",
"description": "Secondary background color used for the callout screen"
},
"calloutSecondaryForegroundColor": {
"type": "string",
"description": "Secondary foreground color used for the callout screen"
},
"calloutActiveForegroundColor": {
"type": "string",
"description": "Active foreground color used for the callout screen"
},
"calloutNumberOfNamesPerSlide": {
"type": "number",
"description": "The number of names per slide for the callout screen."
},
"webAppPin": {
"type": "number",
"description": "The PIN code that should be used to perform actions in the WebApp"
},
"timeoutAccessAssumed": {
"type": "number",
"description": "How long we should wait before assuming the user has entered a gate that cannot provide feedback (in ms)"
},
"timeoutAccessNotGranted": {
"type": "number",
"description": "How long we should wait when no physical device is used to grant entry (in ms)"
},
"timeoutAccessUnused": {
"type": "number",
"description": "How long we should wait for feedback, from the turnstile, about entry before cancelling the scanning (in ms)"
},
"timeoutScanToEntry": {
"type": "number",
"description": "How long after each scanning we should allow for entry (in ms)"
}
},
"required": [
"id",
"organizerId",
"timeZone",
"dayStartTime"
]
}
Update configurations for current organizerPUT/organizers/configurations
The ID in the URL and the body must match.
Example URI
Headers
Content-Type: application/json
Body
{
"id": 15,
"organizerId": 10,
"timeZone": "Europe/Copenhagen",
"dayStartTime": "00:00:00",
"defaultEventImageUrl": "https://placekitten.com/480/640",
"defaultZoneImageUrl": "https://placekitten.com/300/300",
"backgroundColor": "#FFFFFF",
"foregroundColor": "#000000",
"virtualQueueBackgroundColor": "#FFFFFF",
"virtualQueueForegroundColor": "#000000",
"virtualQueueButtonBackgroundColor": "#000000",
"virtualQueueButtonForegroundColor": "#FFFFFF",
"calloutPrimaryBackgroundColor": "#000000",
"calloutPrimaryForegroundColor": "#FFFFFF",
"calloutSecondaryBackgroundColor": "#000000",
"calloutSecondaryForegroundColor": "#FFFFFF",
"calloutActiveForegroundColor": "#FFFFFF",
"calloutNumberOfNamesPerSlide": 28,
"webAppPin": 1234,
"timeoutAccessAssumed": 5000,
"timeoutAccessNotGranted": 10000,
"timeoutAccessUnused": 6000,
"timeoutScanToEntry": 1500
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"timeZone": {
"type": "string"
},
"dayStartTime": {
"type": "string",
"description": "Start time of a day period"
},
"defaultEventImageUrl": {
"type": "string",
"description": "URL to a default event image (used if the event does not have an image)"
},
"defaultZoneImageUrl": {
"type": "string",
"description": "URL to a default zone image (used if the zone does not have an image)"
},
"backgroundColor": {
"type": "string",
"description": "Primary background color. Used for the scanner WebApp"
},
"foregroundColor": {
"type": "string",
"description": "Primary foreground color. Used for the scanner WebApp"
},
"virtualQueueBackgroundColor": {
"type": "string",
"description": "Background color used for the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueForegroundColor": {
"type": "string",
"description": "Foreground color used for the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueButtonBackgroundColor": {
"type": "string",
"description": "Background color used for buttons in the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueButtonForegroundColor": {
"type": "string",
"description": "Foreground color used for buttons in the virtual queue coupon flow in the scanner WebApp"
},
"calloutPrimaryBackgroundColor": {
"type": "string",
"description": "Primary background color used for the callout screen"
},
"calloutPrimaryForegroundColor": {
"type": "string",
"description": "Primary foreground color used for the callout screen"
},
"calloutSecondaryBackgroundColor": {
"type": "string",
"description": "Secondary background color used for the callout screen"
},
"calloutSecondaryForegroundColor": {
"type": "string",
"description": "Secondary foreground color used for the callout screen"
},
"calloutActiveForegroundColor": {
"type": "string",
"description": "Active foreground color used for the callout screen"
},
"calloutNumberOfNamesPerSlide": {
"type": "number",
"description": "The number of names per slide for the callout screen."
},
"webAppPin": {
"type": "number",
"description": "The PIN code that should be used to perform actions in the WebApp"
},
"timeoutAccessAssumed": {
"type": "number",
"description": "How long we should wait before assuming the user has entered a gate that cannot provide feedback (in ms)"
},
"timeoutAccessNotGranted": {
"type": "number",
"description": "How long we should wait when no physical device is used to grant entry (in ms)"
},
"timeoutAccessUnused": {
"type": "number",
"description": "How long we should wait for feedback, from the turnstile, about entry before cancelling the scanning (in ms)"
},
"timeoutScanToEntry": {
"type": "number",
"description": "How long after each scanning we should allow for entry (in ms)"
}
},
"required": [
"id",
"organizerId",
"timeZone",
"dayStartTime"
]
}
204
Organizer properties ¶
Organizer-specific properties for the Access system, such as which features are enabled.
Current allowed property labels:
-
enableCalendars
-
enableLockers
-
enableMobilePay
-
enableScreens
-
enableUsageUnits
-
enableUserAccessTypes
-
enableVirtualQueues
-
enableZoneGroups
Get organizer propertiesGET/organizers/{organizerId}/properties
Array of values indexed by property labels.
Example URI
- organizerId
number
(required) Example: 10
200
Headers
Content-Type: application/json
Body
{}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {}
}
Get properties for current organizer (public)GET/organizers/properties
Array of values indexed by property labels.
Example URI
200
Headers
Content-Type: application/json
Body
{}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {}
}
Set organizer propertiesPUT/organizers/{organizerId}/properties
This will set all organizer properties. Any properties not specified, will be removed. Array of values indexed by property labels.
Example URI
- organizerId
number
(required) Example: 10
Headers
Content-Type: application/json
Body
{}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {}
}
204
Users ¶
Management of the users that can call the API.
Users ¶
List all usersGET/users{?allowInactive}
Example URI
- allowInactive
boolean
(optional) Example: 1Find the users, even if they are deactivated
200
Headers
Content-Type: application/json
Body
[
{
"id": 20,
"username": "shop.smukfest.dk",
"password": "null",
"email": "dev_shop@combine.dk",
"firstName": "Test",
"lastName": "Testensen",
"created": "Hello, world!",
"updated": "Hello, world!",
"isActive": true,
"organizers": [
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest",
"owner": true
}
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new userPOST/users
Example URI
Headers
Content-Type: application/json
Body
{
"id": null,
"username": "shop.smukfest.dk",
"password": "null",
"email": "dev_shop@combine.dk",
"firstName": "Test",
"lastName": "Testensen",
"isActive": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": [
"number",
"null"
]
},
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"created": {
"type": "string"
},
"updated": {
"type": "string"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"username",
"isActive"
]
}
201
Headers
Content-Type: application/json
Location: /users/{userId}
Body
{
"id": 20,
"username": "shop.smukfest.dk",
"password": "null",
"email": "dev_shop@combine.dk",
"firstName": "Test",
"lastName": "Testensen",
"created": "Hello, world!",
"updated": "Hello, world!",
"isActive": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"created": {
"type": "string"
},
"updated": {
"type": "string"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"id",
"username",
"isActive"
]
}
User ¶
Get userGET/users/{userId}
Example URI
- userId
number
(required) Example: 20
200
Headers
Content-Type: application/json
Body
{
"id": 20,
"username": "shop.smukfest.dk",
"password": "null",
"email": "dev_shop@combine.dk",
"firstName": "Test",
"lastName": "Testensen",
"created": "Hello, world!",
"updated": "Hello, world!",
"isActive": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"created": {
"type": "string"
},
"updated": {
"type": "string"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"id",
"username",
"isActive"
]
}
Update userPUT/users/{userId}
The ID in the URL and the body must match.
Example URI
- userId
number
(required) Example: 20
Headers
Content-Type: application/json
Body
{
"id": 20,
"username": "shop.smukfest.dk",
"password": "null",
"email": "dev_shop@combine.dk",
"firstName": "Test",
"lastName": "Testensen",
"created": "Hello, world!",
"updated": "Hello, world!",
"isActive": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"created": {
"type": "string"
},
"updated": {
"type": "string"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"id",
"username",
"isActive"
]
}
204
Delete userDELETE/users/{userId}
Example URI
- userId
number
(required) Example: 20
204
Current user ¶
Get current userGET/users/current
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": 20,
"username": "shop.smukfest.dk",
"password": "null",
"email": "dev_shop@combine.dk",
"firstName": "Test",
"lastName": "Testensen",
"created": "Hello, world!",
"updated": "Hello, world!",
"isActive": true,
"organizers": [
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest",
"roles": [
[
{
"id": 1,
"name": "ROLE_ADMIN",
"permissions": [
{
"permissionId": 54,
"permissionPathId": 55,
"path": "/tickets",
"methods": [
"Hello, world!"
]
}
]
}
]
]
}
],
"organizerProperties": [],
"organizerConfigurations": [
{
"id": 15,
"organizerId": 10,
"timeZone": "Europe/Copenhagen",
"dayStartTime": "00:00:00",
"defaultEventImageUrl": "https://placekitten.com/480/640",
"defaultZoneImageUrl": "https://placekitten.com/300/300",
"backgroundColor": "#FFFFFF",
"foregroundColor": "#000000",
"virtualQueueBackgroundColor": "#FFFFFF",
"virtualQueueForegroundColor": "#000000",
"virtualQueueButtonBackgroundColor": "#000000",
"virtualQueueButtonForegroundColor": "#FFFFFF",
"calloutPrimaryBackgroundColor": "#000000",
"calloutPrimaryForegroundColor": "#FFFFFF",
"calloutSecondaryBackgroundColor": "#000000",
"calloutSecondaryForegroundColor": "#FFFFFF",
"calloutActiveForegroundColor": "#FFFFFF",
"calloutNumberOfNamesPerSlide": 28,
"webAppPin": 1234,
"timeoutAccessAssumed": 5000,
"timeoutAccessNotGranted": 10000,
"timeoutAccessUnused": 6000,
"timeoutScanToEntry": 1500
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"created": {
"type": "string"
},
"updated": {
"type": "string"
},
"isActive": {
"type": "boolean"
},
"organizers": {
"type": "array"
},
"organizerProperties": {},
"organizerConfigurations": {
"type": "array"
}
},
"required": [
"id",
"username",
"isActive",
"organizers",
"organizerProperties",
"organizerConfigurations"
]
}
User tokens ¶
List all tokens for the userGET/users/token
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"id": "25",
"userId": "20",
"issuedTime": "2019-01-01T05:00:00+02:00",
"revokedTime": "null",
"isActive": true,
"description": "VM Shop"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Issue new tokenPOST/users/token
Issue a token that can be used with Bearer
instead of Basic
for all authorizations.
Example URI
Headers
Content-Type: application/json
Body
{
"description": "VM Shop"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"description": {
"type": "string"
}
}
}
200
Headers
Content-Type: application/json
Body
"abcd.efg.hijk"
User token ¶
Get a user tokenGET/users/token/{userTokenId}
Example URI
- userTokenId
number
(required) Example: 25
200
Headers
Content-Type: application/json
Body
{
"id": "25",
"userId": "20",
"issuedTime": "2019-01-01T05:00:00+02:00",
"revokedTime": "null",
"isActive": true,
"description": "VM Shop"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"userId": {
"type": "string"
},
"issuedTime": {
"type": "string"
},
"revokedTime": {
"type": [
"string",
"null"
]
},
"isActive": {
"type": "boolean"
},
"description": {
"type": "string"
}
},
"required": [
"issuedTime",
"revokedTime",
"isActive",
"description"
]
}
Revoke a user tokenDELETE/users/token/{userTokenId}
Revoke a user token, preventing all future requests with it.
Example URI
- userTokenId
number
(required) Example: 25
204
User organizers ¶
List all organizers for a userGET/users/{userId}/organizers
Example URI
- userId
number
(required) Example: 20
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest",
"owner": true
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
User organizer ¶
Add organizer to userPUT/users/{userId}/organizers/{organizerId}
Example URI
- userId
number
(required) Example: 20- organizerId
number
(required) Example: 10
Headers
Content-Type: application/json
Body
{
"asOwner": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"asOwner": {
"type": "boolean"
}
}
}
204
Remove organizer from userDELETE/users/{userId}/organizers/{organizerId}
Example URI
- userId
number
(required) Example: 20- organizerId
number
(required) Example: 10
204
User roles ¶
Get list of roles for userGET/users/{userId}/roles
Example URI
- userId
number
(required) Example: 20
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest",
"roles": [
[
{
"id": 1,
"name": "ROLE_ADMIN",
"permissions": [
{
"permissionId": 54,
"permissionPathId": 55,
"path": "/tickets",
"methods": [
"Hello, world!"
]
}
]
}
]
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Set roles on userPUT/users/{userId}/roles
Double array, where outer array is indexed by organizer ID (0 for no organizer) and inner array is a list of role IDs.
Example URI
- userId
number
(required) Example: 20
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
204
User role ¶
Give role to userPOST/users/{userId}/roles/{roleId}{?organizerId}
Example URI
- userId
number
(required) Example: 20- roleId
number
(required) Example: 1- organizerId
number
(optional) Example: 10
204
Take role from userDELETE/users/{userId}/roles/{roleId}{?organizerId}
Example URI
- userId
number
(required) Example: 20- roleId
number
(required) Example: 1- organizerId
number
(optional) Example: 10
204
Entity Type Users ¶
Get users restricted to an entity typeGET/users/entityTypes/{entityType}
Example URI
- entityType
string
(required) Example: zone
200
Headers
Content-Type: application/json
Body
[
{
"id": 20,
"username": "shop.smukfest.dk",
"password": "null",
"email": "dev_shop@combine.dk",
"firstName": "Test",
"lastName": "Testensen",
"created": "Hello, world!",
"updated": "Hello, world!",
"isActive": true
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get users with restricted access to an entityGET/users/entityTypes/{entityType}/{entityId}
Example URI
- entityType
string
(required) Example: zone- entityId
number
(required) Example: 0
200
Headers
Content-Type: application/json
Body
[
{
"id": 20,
"username": "shop.smukfest.dk",
"password": "null",
"email": "dev_shop@combine.dk",
"firstName": "Test",
"lastName": "Testensen",
"created": "Hello, world!",
"updated": "Hello, world!",
"isActive": true
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
User Entity Types ¶
Get entity types a user has restricted access toGET/users/{userId}/entityTypes{?organizerId}
Example URI
- userId
number
(required) Example: 20- organizerId
number
(optional) Example: 10
200
Headers
Content-Type: application/json
Body
[
"Hello, world!"
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Set entity types a user is restricted access toPUT/users/{userId}/entityTypes{?organizerId}
Example URI
- userId
number
(required) Example: 20- organizerId
number
(optional) Example: 10
Headers
Content-Type: application/json
Body
[
"Hello, world!"
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
204
User Entity Element ¶
Add user entity elementPOST/users/{userId}/entityElement/{entityType}/{entityId}
Add access to an entity for a user with restricted access to the entity type.
Example URI
- userId
number
(required) Example: 20- entityType
string
(required) Example: zone- entityId
number
(required) Example: 1
204
Remove user entity elementDELETE/users/{userId}/entityElement/{entityType}/{entityId}
Remove access to an entity from a user with restricted access to the entity type.
Example URI
- userId
number
(required) Example: 20- entityType
string
(required) Example: zone- entityId
number
(required) Example: 1
204
User access types ¶
Get acccess types for userGET/users/{userId}/accessTypes
Get list of access types this user is allowed to grant.
Example URI
- userId
number
(required) Example: 20
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Set access types for userPUT/users/{userId}/accessTypes
The user’s list of access types are updated to match the supplied array of ids. This includes the special case “empty array” where all the user’s existing access types are removed.
The DELETE action is currently not implemented.
Example URI
- userId
number
(required) Example: 20
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
204
User access type ¶
Remove access type from userDELETE/users/{userId}/accessTypes/{accessTypeId}
Remove a single access type from the user.
Example URI
- userId
number
(required) Example: 20- accessTypeId
number
(required) Example: 90
204
Add access type to userPOST/users/{userId}/accessTypes/{accessTypeId}
Add a single access type to the user.
Example URI
- userId
number
(required) Example: 20- accessTypeId
number
(required) Example: 90
204
Roles ¶
Get all available rolesGET/roles
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"id": 1,
"name": "ROLE_ADMIN"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Role ¶
Get roleGET/roles/{roleId}
Example URI
- roleId
number
(required) Example: 1
200
Headers
Content-Type: application/json
Body
{
"id": 1,
"name": "ROLE_ADMIN"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
}
},
"required": [
"id",
"name"
]
}
Day Types ¶
Day Types ¶
Day types can be used in calendars.
List all day typesGET/dayTypes{?isActive}
Example URI
- isActive
boolean
(optional) Example: true
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 200,
"organizerId": 10,
"isActive": true,
"name": "Helligdag",
"color": "0000FF"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new day typePOST/dayTypes
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"organizerId": null,
"isActive": true,
"name": "Helligdag",
"color": "0000FF"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"organizerId": {
"type": [
"number",
"null"
]
},
"isActive": {
"type": "boolean"
},
"name": {
"type": "string"
},
"color": {
"type": "string",
"description": "6 digit hex code"
}
},
"required": [
"syncId",
"isDeleted",
"isActive",
"name",
"color"
]
}
201
Headers
Content-Type: application/json
Location: /dayTypes/{dayTypeId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 200,
"organizerId": 10,
"isActive": true,
"name": "Helligdag",
"color": "0000FF",
"msgType": "DayType"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"name": {
"type": "string"
},
"color": {
"type": "string",
"description": "6 digit hex code"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"isActive",
"name",
"color",
"msgType"
]
}
Deletable day type IDsGET/dayTypes/deletableIds
Get the IDs of all day types that can be deleted. This does not validate if the user can actually delete the day type.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Day Type ¶
Get day typeGET/dayTypes/{dayTypeId}
Example URI
- dayTypeId
number
(required) Example: 210
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 200,
"organizerId": 10,
"isActive": true,
"name": "Helligdag",
"color": "0000FF"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"name": {
"type": "string"
},
"color": {
"type": "string",
"description": "6 digit hex code"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"isActive",
"name",
"color"
]
}
Update day typePUT/dayTypes/{dayTypeId}
The ID in the URL and the body must match.
Example URI
- dayTypeId
number
(required) Example: 210
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 200,
"organizerId": 10,
"isActive": true,
"name": "Helligdag",
"color": "0000FF"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"name": {
"type": "string"
},
"color": {
"type": "string",
"description": "6 digit hex code"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"isActive",
"name",
"color"
]
}
204
Delete day typeDELETE/dayTypes/{dayTypeId}
Example URI
- dayTypeId
number
(required) Example: 210
204
Day Type Periods ¶
List all day type periodsGET/dayTypes/{dayTypeId}/periods
Use 0 as dayTypeId to get periods for all day types.
Example URI
- dayTypeId
number
(required) Example: 210
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 205,
"dayTypeId": 200,
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new day type periodPOST/dayTypes/{dayTypeId}/periods
Example URI
- dayTypeId
number
(required) Example: 210
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"dayTypeId": 200,
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"dayTypeId": {
"type": "number"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"tags": {
"type": "string",
"description": "Comma-separated string of tags"
}
},
"required": [
"syncId",
"isDeleted",
"dayTypeId",
"startTime",
"endTime",
"tags"
]
}
201
Headers
Content-Type: application/json
Location: /dayTypes/{dayTypeId}/periods/{dayTypePeriodId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 205,
"dayTypeId": 200,
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled",
"msgType": "DayTypePeriod"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"dayTypeId": {
"type": "number"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"tags": {
"type": "string",
"description": "Comma-separated string of tags"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"dayTypeId",
"startTime",
"endTime",
"tags",
"msgType"
]
}
Day Type Period ¶
Get day type periodGET/dayTypes/{dayTypeId}/periods/{dayTypePeriodId}
Example URI
- dayTypeId
number
(required) Example: 210- dayTypePeriodId
number
(required) Example: 215
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 205,
"dayTypeId": 200,
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"dayTypeId": {
"type": "number"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"tags": {
"type": "string",
"description": "Comma-separated string of tags"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"dayTypeId",
"startTime",
"endTime",
"tags"
]
}
Update day type periodPUT/dayTypes/{dayTypeId}/periods/{dayTypePeriodId}
The IDs in the URL and the body must match.
Example URI
- dayTypeId
number
(required) Example: 210- dayTypePeriodId
number
(required) Example: 215
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 205,
"dayTypeId": 200,
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"dayTypeId": {
"type": "number"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"tags": {
"type": "string",
"description": "Comma-separated string of tags"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"dayTypeId",
"startTime",
"endTime",
"tags"
]
}
204
Delete day type periodDELETE/dayTypes/{dayTypeId}/periods/{dayTypePeriodId}
Example URI
- dayTypeId
number
(required) Example: 210- dayTypePeriodId
number
(required) Example: 215
204
Usage Units ¶
Usage Units ¶
Usage units can be used to have a different value for each scan depending on which zone a token was scanned to. This requires a maxUsages on an access type and a zone cost for the zone.
List all usage unitsGET/usageUnits{?label,name,code}
Example URI
- label
string
(optional)- name
string
(optional)- code
string
(optional)
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 170,
"isActive": true,
"organizerId": 10,
"label": "turbandpoint",
"name": "Turbandpoint",
"shortName": "ture",
"code": "XTP",
"exponent": 0
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new usage unitPOST/usageUnits
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"isActive": true,
"organizerId": null,
"label": "turbandpoint",
"name": "Turbandpoint",
"shortName": "ture",
"code": "XTP",
"exponent": 0
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"isActive": {
"type": "boolean"
},
"organizerId": {
"type": [
"number",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"shortName": {
"type": "string"
},
"code": {
"type": "string"
},
"exponent": {
"type": "number",
"description": "The exponent (10^x) is the difference between the major and minor units. This is usually 2 for a real currency and 0 for everything else."
}
},
"required": [
"syncId",
"isDeleted",
"isActive",
"label",
"name",
"shortName",
"code",
"exponent"
]
}
201
Headers
Content-Type: application/json
Location: /usageUnits/{usageUnitId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 170,
"isActive": true,
"organizerId": 10,
"label": "turbandpoint",
"name": "Turbandpoint",
"shortName": "ture",
"code": "XTP",
"exponent": 0,
"msgType": "UsageUnit"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"organizerId": {
"type": "number"
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"shortName": {
"type": "string"
},
"code": {
"type": "string"
},
"exponent": {
"type": "number",
"description": "The exponent (10^x) is the difference between the major and minor units. This is usually 2 for a real currency and 0 for everything else."
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"isActive",
"organizerId",
"label",
"name",
"shortName",
"code",
"exponent",
"msgType"
]
}
Deletable usage unit IDsGET/usageUnits/deletableIds
Get the IDs of all usage units that can be deleted. This does not validate if the user can actually delete the usage unit.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Usage Unit ¶
Get usage unitGET/usageUnits/{usageUnitId}
Example URI
- usageUnitId
number
(required) Example: 170
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 170,
"isActive": true,
"organizerId": 10,
"label": "turbandpoint",
"name": "Turbandpoint",
"shortName": "ture",
"code": "XTP",
"exponent": 0
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"organizerId": {
"type": "number"
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"shortName": {
"type": "string"
},
"code": {
"type": "string"
},
"exponent": {
"type": "number",
"description": "The exponent (10^x) is the difference between the major and minor units. This is usually 2 for a real currency and 0 for everything else."
}
},
"required": [
"syncId",
"isDeleted",
"id",
"isActive",
"organizerId",
"label",
"name",
"shortName",
"code",
"exponent"
]
}
Update usage unitPUT/usageUnits/{usageUnitId}
The ID in the URL and the body must match.
Example URI
- usageUnitId
number
(required) Example: 170
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 170,
"isActive": true,
"organizerId": 10,
"label": "turbandpoint",
"name": "Turbandpoint",
"shortName": "ture",
"code": "XTP",
"exponent": 0
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"organizerId": {
"type": "number"
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"shortName": {
"type": "string"
},
"code": {
"type": "string"
},
"exponent": {
"type": "number",
"description": "The exponent (10^x) is the difference between the major and minor units. This is usually 2 for a real currency and 0 for everything else."
}
},
"required": [
"syncId",
"isDeleted",
"id",
"isActive",
"organizerId",
"label",
"name",
"shortName",
"code",
"exponent"
]
}
204
Delete usage unitDELETE/usageUnits/{usageUnitId}
Example URI
- usageUnitId
number
(required) Example: 170
204
Usage Unit Conversion Rates ¶
Get usage unit conversion ratesGET/usageUnits/conversionRates
An multidimensional array of rates indexed by from and to usage unit IDs.
Example URI
200
Headers
Content-Type: application/json
Body
{
"<fromUsageUnitId>": {
"<toUsageUnitId>": 2000
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"<fromUsageUnitId>": {
"type": "object",
"properties": {
"<toUsageUnitId>": {
"type": "number",
"description": "1 fromUsageUnitId equals this toUsageUnitId"
}
},
"required": [
"<toUsageUnitId>"
]
}
},
"required": [
"<fromUsageUnitId>"
]
}
Update usage unit conversion ratesPUT/usageUnits/conversionRates
An multidimensional array of rates indexed by from and to usage unit IDs.
Example URI
Headers
Content-Type: application/json
Body
{
"<fromUsageUnitId>": {
"<toUsageUnitId>": 2000
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"<fromUsageUnitId>": {
"type": "object",
"properties": {
"<toUsageUnitId>": {
"type": "number",
"description": "1 fromUsageUnitId equals this toUsageUnitId"
}
},
"required": [
"<toUsageUnitId>"
]
}
},
"required": [
"<fromUsageUnitId>"
]
}
204
Usage unit status ¶
Get usage units with their statusGET/usageUnits/status{?eventId,zoneId,from,to}
Will group the result by usage units and the used payment type, so a usage unit can exists multiple times in the result.
Example URI
- eventId
number
(optional) Example: 30- zoneId
number
(optional) Example: 40- from
string
(optional) Example: 2019-01-01T05:00:00+02:00The time will be locked to the day start time of the Organizer
- to
string
(optional) Example: 2019-01-01T05:00:00+02:00The time will be locked to the day start time of the Organizer - 1 second
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 170,
"isActive": true,
"organizerId": 10,
"label": "turbandpoint",
"name": "Turbandpoint",
"shortName": "ture",
"code": "XTP",
"exponent": 0,
"usedScans": 10,
"usedCount": 40,
"cancelledScans": 1,
"cancelledCount": 4,
"paymentType": "MobilePay"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get usage units with their status grouped per hourGET/usageUnits/hourStatus{?eventId,zoneId,from,to}
Will group the result by usage units and the used payment type, so a usage unit can exists multiple times in the result. The result will again be grouped by the hour, which is indexed by date+hour.
Example URI
- eventId
number
(optional) Example: 30- zoneId
number
(optional) Example: 40- from
string
(required) Example: 2019-01-01T05:00:00+02:00The time will be locked to the day start time of the Organizer
- to
string
(required) Example: 2019-01-01T05:00:00+02:00The time will be locked to the day start time of the Organizer - 1 second
200
Headers
Content-Type: application/json
Body
[
null
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Usage unit for zones ¶
Get data for usage units for zonesGET/reports/usageUnitsForZones{?eventId,usageUnitId,groupBy,from,to}
Will return an array of usage unit counts indexed by the zone, the grouping, and the payment type. For both date and hour grouping the result is in the organizers time zone.
Example URI
- eventId
number
(required) Example: 30- usageUnitId
number
(required) Example: 170- groupBy
enum
(optional)Group the data by either date (default) or hour
Choices:
date
hour
- from
string
(optional) Example: 2019-01-01T05:00:00+02:00- to
string
(optional) Example: 2019-01-01T05:00:00+02:00
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Venues ¶
All events take place at a venue. A venue has a number of zones, eg “Outside”, “Public area” and “Backstage”. The zones are connected via entrances. Each entrance has one or more scanners. For each scanner a device is selected.
Venues ¶
List all venuesGET/venues
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"uuid": "ce57739c-486a-4cfd-a46c-30812a35fd96",
"name": "Bøgeskoven",
"organizerId": 10
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new venuePOST/venues
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"name": "Bøgeskoven",
"organizerId": null
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"organizerId": {
"type": [
"number",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"name"
]
}
201
Headers
Content-Type: application/json
Location: /venues/{venueId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"uuid": "ce57739c-486a-4cfd-a46c-30812a35fd96",
"name": "Bøgeskoven",
"organizerId": 10,
"msgType": "Venue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"name": {
"type": "string"
},
"organizerId": {
"type": "number"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"name",
"organizerId",
"msgType"
]
}
Venue ¶
Get venueGET/venues/{venueId}{?allowDeleted}
Example URI
- venueId
number
(required) Example: 10- allowDeleted
boolean
(optional) Example: 1Find the venue, even if it is deleted
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"uuid": "ce57739c-486a-4cfd-a46c-30812a35fd96",
"name": "Bøgeskoven",
"organizerId": 10
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"name": {
"type": "string"
},
"organizerId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"name",
"organizerId"
]
}
Update venuePUT/venues/{venueId}
The ID in the URL and the body must match.
Example URI
- venueId
number
(required) Example: 10
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"uuid": "ce57739c-486a-4cfd-a46c-30812a35fd96",
"name": "Bøgeskoven",
"organizerId": 10
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"name": {
"type": "string"
},
"organizerId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"name",
"organizerId"
]
}
204
Delete venueDELETE/venues/{venueId}
Example URI
- venueId
number
(required) Example: 10
204
Get venue with its statusGET/venues/{venueId}/status
Example URI
- venueId
number
(required) Example: 10
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"uuid": "ce57739c-486a-4cfd-a46c-30812a35fd96",
"name": "Bøgeskoven",
"organizerId": 10,
"zones": [
{
"id": 40,
"name": "Backstage",
"zoneGroupId": 190,
"population": 874,
"resetAtDayStart": false,
"resetAmount": 0
}
],
"entrances": [
{
"id": 50,
"name": "Hollændersvinget",
"countIn": 461,
"countOut": 0,
"countInEvent": 1325,
"countOutEvent": 0,
"scanners": [
{
"id": 60,
"name": "Hollændersvinget mølle 1",
"countIn": 461,
"countOut": 0,
"countInEvent": 1325,
"countOutEvent": 0,
"deviceId": 70,
"connection": {
"status": "connected",
"lastSeen": "2017-08-05T12:30:00+02:00",
"queueUser": "VM_0109",
"appVersion": "1.0.9",
"event": {
"deviceId": 70,
"eventId": 30,
"lastSyncId": 12345,
"updated": "2017-08-05T12:30:00+02:00"
},
"lanes": [
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 0,
"selectedMode": 0,
"lastSeen": "2017-08-05T12:30:00+02:00",
"status": "connected"
}
]
}
}
]
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"name": {
"type": "string"
},
"organizerId": {
"type": "number"
},
"zones": {
"type": "array"
},
"entrances": {
"type": "array"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"name",
"organizerId",
"zones",
"entrances"
]
}
Venue log entriesGET/venues/{venueId}/log
Example URI
- venueId
number
(required) Example: 10
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"venueId": 10
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Zones ¶
List all zonesGET/zones{?venueId,usageUnitCode,allowDeleted}
Example URI
- venueId
number
(optional) Example: 10- usageUnitCode
string
(optional) Example: DKKOnly zones with a cost in this usage unit
- allowDeleted
boolean
(optional) Example: 1Find the zones, even if they are deleted
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"uuid": "22496567-bd39-11eb-9e95-0242c0a83002",
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new zonePOST/zones
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": [
"string",
"null"
]
},
"venueId": {
"type": "number"
},
"zoneGroupId": {
"type": "number"
},
"name": {
"type": "string"
},
"imageUrl": {
"type": "string",
"description": "URL to a zone image"
},
"listImageUrl": {
"type": "string",
"description": "URL to a zone list image"
}
},
"required": [
"syncId",
"isDeleted",
"venueId",
"zoneGroupId",
"name"
]
}
201
Headers
Content-Type: application/json
Location: /zones/{zoneId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"uuid": "22496567-bd39-11eb-9e95-0242c0a83002",
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640",
"msgType": "Zone"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"venueId": {
"type": "number"
},
"zoneGroupId": {
"type": "number"
},
"name": {
"type": "string"
},
"imageUrl": {
"type": "string",
"description": "URL to a zone image"
},
"listImageUrl": {
"type": "string",
"description": "URL to a zone list image"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"venueId",
"zoneGroupId",
"name",
"msgType"
]
}
List all zones with entrancesGET/zones/withEntrances{?venueId}
Example URI
- venueId
number
(required) Example: 10
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"uuid": "22496567-bd39-11eb-9e95-0242c0a83002",
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640",
"entrances": [
{
"syncId": 999,
"isDeleted": false,
"id": 50,
"venueId": 10,
"name": "Hollændersvinget",
"type": "entrance",
"innerZoneId": 40,
"outerZoneId": 41,
"note": "Personaleindgang",
"pin": "1111",
"adjustPopulationForInnerZone": true,
"adjustPopulationForOuterZone": true,
"scanners": [
{
"syncId": 999,
"isDeleted": false,
"id": 60,
"uuid": "0c669ae0-247d-4170-af18-7cb650589e8b",
"entranceId": 50,
"name": "Hollændersvinget mølle 1",
"deviceId": 70
}
]
}
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Deletable zone IDsGET/zones/deletableIds
Get the IDs of all zones that can be deleted. This does not validate if the user can actually delete the zone.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Zone ¶
Get zoneGET/zones/{zoneId}{?allowDeleted}
Example URI
- zoneId
number
(required) Example: 40- allowDeleted
boolean
(optional) Example: 1Find the zone, even if it is deleted
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"uuid": "22496567-bd39-11eb-9e95-0242c0a83002",
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"venueId": {
"type": "number"
},
"zoneGroupId": {
"type": "number"
},
"name": {
"type": "string"
},
"imageUrl": {
"type": "string",
"description": "URL to a zone image"
},
"listImageUrl": {
"type": "string",
"description": "URL to a zone list image"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"venueId",
"zoneGroupId",
"name"
]
}
Update zonePUT/zones/{zoneId}
The ID in the URL and the body must match.
Example URI
- zoneId
number
(required) Example: 40
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"uuid": "22496567-bd39-11eb-9e95-0242c0a83002",
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"venueId": {
"type": "number"
},
"zoneGroupId": {
"type": "number"
},
"name": {
"type": "string"
},
"imageUrl": {
"type": "string",
"description": "URL to a zone image"
},
"listImageUrl": {
"type": "string",
"description": "URL to a zone list image"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"venueId",
"zoneGroupId",
"name"
]
}
204
Delete zoneDELETE/zones/{zoneId}
Example URI
- zoneId
number
(required) Example: 40
204
Zone log entriesGET/zones/{zoneId}/log
Example URI
- zoneId
number
(required) Example: 40
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"zoneId": 40
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Zone status ¶
Get zone statusGET/zones/{zoneId}/status{?eventId}
Example URI
- zoneId
number
(required) Example: 40- eventId
number
(required) Example: 30
200
Headers
Content-Type: application/json
Body
{
"id": 40,
"name": "Backstage",
"zoneGroupId": 190,
"population": 874
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"zoneGroupId": {
"type": [
"number",
"null"
]
},
"population": {
"type": "number"
}
},
"required": [
"id",
"name",
"zoneGroupId",
"population"
]
}
Zone access types ¶
Get access types for this zoneGET/zones/{zoneId}/accessTypes{?eventId}
Example URI
- zoneId
number
(required) Example: 40- eventId
number
(optional) Example: 30
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Zone entrances ¶
Get entrances for this zoneGET/zones/{zoneId}/entrances
Example URI
- zoneId
number
(required) Example: 40
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 50,
"venueId": 10,
"name": "Hollændersvinget",
"type": "entrance",
"innerZoneId": 40,
"outerZoneId": 41,
"note": "Personaleindgang",
"pin": "1111",
"adjustPopulationForInnerZone": true,
"adjustPopulationForOuterZone": true
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Zone costs ¶
Zone costs are used to specify how many usage units an entry into the zone costs. A default zone cost of 1 [usage unit] is used if no cost is defined for the zone/usage unit tuple.
Get costs for this zoneGET/zones/{zoneId}/zoneCosts
Example URI
- zoneId
number
(required) Example: 40
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 45,
"zoneId": 40,
"usageUnitId": 170,
"count": 1,
"allowDirectUsage": false
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new cost for this zonePOST/zones/{zoneId}/zoneCosts
Example URI
- zoneId
number
(required) Example: 40
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"zoneId": 40,
"usageUnitId": 170,
"count": 1,
"allowDirectUsage": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"zoneId": {
"type": "number"
},
"usageUnitId": {
"type": "number"
},
"count": {
"type": "number"
},
"allowDirectUsage": {
"type": "boolean",
"description": "Allow this ZoneCost to be used without scanning of a token"
}
},
"required": [
"syncId",
"isDeleted",
"zoneId",
"usageUnitId",
"count",
"allowDirectUsage"
]
}
201
Headers
Content-Type: application/json
Location: /zones/{zoneId}/zoneCosts/{zoneCostId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 45,
"zoneId": 40,
"usageUnitId": 170,
"count": 1,
"allowDirectUsage": false,
"msgType": "ZoneCost"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"usageUnitId": {
"type": "number"
},
"count": {
"type": "number"
},
"allowDirectUsage": {
"type": "boolean",
"description": "Allow this ZoneCost to be used without scanning of a token"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"usageUnitId",
"count",
"allowDirectUsage",
"msgType"
]
}
Zone cost ¶
Get zone costGET/zones/{zoneId}/zoneCosts/{zoneCostId}
Example URI
- zoneId
number
(required) Example: 40- zoneCostId
number
(required) Example: 45
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 45,
"zoneId": 40,
"usageUnitId": 170,
"count": 1,
"allowDirectUsage": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"usageUnitId": {
"type": "number"
},
"count": {
"type": "number"
},
"allowDirectUsage": {
"type": "boolean",
"description": "Allow this ZoneCost to be used without scanning of a token"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"usageUnitId",
"count",
"allowDirectUsage"
]
}
Update zone costPUT/zones/{zoneId}/zoneCosts/{zoneCostId}
The IDs in the URL and the body must match.
Example URI
- zoneId
number
(required) Example: 40- zoneCostId
number
(required) Example: 45
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 45,
"zoneId": 40,
"usageUnitId": 170,
"count": 1,
"allowDirectUsage": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"usageUnitId": {
"type": "number"
},
"count": {
"type": "number"
},
"allowDirectUsage": {
"type": "boolean",
"description": "Allow this ZoneCost to be used without scanning of a token"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"usageUnitId",
"count",
"allowDirectUsage"
]
}
204
Delete zone costDELETE/zones/{zoneId}/zoneCosts/{zoneCostId}
Example URI
- zoneId
number
(required) Example: 40- zoneCostId
number
(required) Example: 45
204
Zone Populations ¶
Get Zone PopulationGET/zones/{zoneId}/population{?eventId}
Example URI
- zoneId
number
(required) Example: 40- eventId
number
(required) Example: 30If not specified then the current event is used
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 47,
"zoneId": 40,
"eventId": 30,
"current": 109,
"max": 150,
"reopenThreshold": 5,
"resetAtDayStart": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"current": {
"type": "number"
},
"max": {
"type": "number",
"description": "Set to 0 to not have any limits"
},
"reopenThreshold": {
"type": "number",
"description": "How much below the max should \"current\" be before the entrances will open again."
},
"resetAtDayStart": {
"type": "boolean",
"description": "Reset current to 0 when the day starts"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"eventId",
"current",
"max",
"reopenThreshold",
"resetAtDayStart"
]
}
Get Zone Population (public)GET/zones/{zoneUuid}/population{?eventUuid}
Example URI
- zoneUuid
string
(required) Example: 22496567-bd39-11eb-9e95-0242c0a83002- eventUuid
string
(required) Example: 8e305cde-c75a-11eb-a0a9-0242c0a83002
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 47,
"zoneId": 40,
"eventId": 30,
"current": 109,
"max": 150,
"reopenThreshold": 5,
"resetAtDayStart": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"current": {
"type": "number"
},
"max": {
"type": "number",
"description": "Set to 0 to not have any limits"
},
"reopenThreshold": {
"type": "number",
"description": "How much below the max should \"current\" be before the entrances will open again."
},
"resetAtDayStart": {
"type": "boolean",
"description": "Reset current to 0 when the day starts"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"eventId",
"current",
"max",
"reopenThreshold",
"resetAtDayStart"
]
}
Update Zone PopulationPUT/zones/{zoneId}/population{?eventId}
Example URI
- zoneId
number
(required) Example: 40- eventId
number
(required) Example: 30If not specified then the current event is used
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 47,
"zoneId": 40,
"eventId": 30,
"current": 109,
"max": 150,
"reopenThreshold": 5,
"resetAtDayStart": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"current": {
"type": "number"
},
"max": {
"type": "number",
"description": "Set to 0 to not have any limits"
},
"reopenThreshold": {
"type": "number",
"description": "How much below the max should \"current\" be before the entrances will open again."
},
"resetAtDayStart": {
"type": "boolean",
"description": "Reset current to 0 when the day starts"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"eventId",
"current",
"max",
"reopenThreshold",
"resetAtDayStart"
]
}
204
Set Current Zone PopulationPUT/zones/{zoneId}/population/{eventId}
Change the current zone population. Use the “set” action to set it to the value. Use the “adjust” action to adjust the it with the value (set value to a negative number to subtract from the current population).
Example URI
- zoneId
number
(required) Example: 40- eventId
number
(required) Example: 30
Headers
Content-Type: application/json
Body
{
"value": 200,
"action": "set"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"value": {
"type": "number"
},
"action": {
"type": "string",
"enum": [
"set",
"adjust"
]
}
},
"required": [
"value",
"action"
]
}
204
Reset Current Populations For All ZonesPUT/zones/population/{eventId}
Reset the population for all zones in an event to 0.
Example URI
- eventId
number
(required) Example: 30
204
Zone Populations Info ¶
Get Zone PopulationGET/zones/{zoneId}/population/info{?eventId,from,to}
Example URI
- zoneId
number
(required) Example: 40- eventId
number
(required) Example: 30If not specified then the current event is used
- from
string
(optional) Example: 2019-01-01T05:00:00+02:00- to
string
(optional) Example: 2019-01-02T05:00:00+02:00
200
Headers
Content-Type: application/json
Body
{
"population": {
"syncId": 999,
"isDeleted": false,
"id": 47,
"zoneId": 40,
"eventId": 30,
"current": 109,
"max": 150,
"reopenThreshold": 5,
"resetAtDayStart": true
},
"changeHistory": [
{
"id": 48,
"zoneId": 40,
"eventId": 30,
"quantity": 1,
"currentBeforeChange": 108,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"deviceId": 70,
"scanningId": 111,
"ticketId": 100
}
],
"to": "2018-08-05T12:30:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"population": {
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"current": {
"type": "number"
},
"max": {
"type": "number",
"description": "Set to 0 to not have any limits"
},
"reopenThreshold": {
"type": "number",
"description": "How much below the max should \"current\" be before the entrances will open again."
},
"resetAtDayStart": {
"type": "boolean",
"description": "Reset current to 0 when the day starts"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"eventId",
"current",
"max",
"reopenThreshold",
"resetAtDayStart"
]
},
"changeHistory": {
"type": "array"
},
"to": {
"type": "string"
}
},
"required": [
"population",
"changeHistory",
"to"
]
}
Get Zone Population (public)GET/zones/{zoneUuid}/population/info{?eventUuid,from,to}
Example URI
- zoneUuid
string
(required) Example: 22496567-bd39-11eb-9e95-0242c0a83002- eventUuid
string
(required) Example: 8e305cde-c75a-11eb-a0a9-0242c0a83002- from
string
(optional) Example: 2019-01-01T05:00:00+02:00- to
string
(optional) Example: 2019-01-02T05:00:00+02:00
200
Headers
Content-Type: application/json
Body
{
"population": {
"syncId": 999,
"isDeleted": false,
"id": 47,
"zoneId": 40,
"eventId": 30,
"current": 109,
"max": 150,
"reopenThreshold": 5,
"resetAtDayStart": true
},
"changeHistory": [
{
"id": 48,
"zoneId": 40,
"eventId": 30,
"quantity": 1,
"currentBeforeChange": 108,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"deviceId": 70,
"scanningId": 111,
"ticketId": 100
}
],
"to": "2018-08-05T12:30:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"population": {
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"current": {
"type": "number"
},
"max": {
"type": "number",
"description": "Set to 0 to not have any limits"
},
"reopenThreshold": {
"type": "number",
"description": "How much below the max should \"current\" be before the entrances will open again."
},
"resetAtDayStart": {
"type": "boolean",
"description": "Reset current to 0 when the day starts"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"eventId",
"current",
"max",
"reopenThreshold",
"resetAtDayStart"
]
},
"changeHistory": {
"type": "array"
},
"to": {
"type": "string"
}
},
"required": [
"population",
"changeHistory",
"to"
]
}
Zone Population Changes ¶
Get Zone Population ChangesGET/zones/{zoneId}/population/changes{?eventId,from,to,offset,limit}
Example URI
- zoneId
number
(required) Example: 40- eventId
number
(required) Example: 30If not specified then the current event is used
- from
string
(optional) Example: 2019-01-01T05:00:00+02:00- to
string
(optional) Example: 2019-01-02T05:00:00+02:00- offset
number
(optional) Example: 0- limit
number
(optional) Example: 100
200
Headers
Content-Type: application/json
Body
{
"populationChanges": [
{
"id": 48,
"zoneId": 40,
"eventId": 30,
"quantity": 1,
"currentBeforeChange": 108,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"deviceId": 70,
"scanningId": 111,
"ticketId": 100
}
],
"totalCount": 123
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"populationChanges": {
"type": "array"
},
"totalCount": {
"type": "number",
"description": "The total number of population changes matching the search."
}
}
}
Get Zone Population Changes (public)GET/zones/{zoneUuid}/population/changes{?eventId,eventUuid,from,to,offset,limit}
If neither eventId or eventUuid is specified then the current event is used.
Example URI
- zoneUuid
string
(required) Example: 22496567-bd39-11eb-9e95-0242c0a83002- eventId
number
(optional) Example: 30- eventUuid
string
(optional) Example: 8e305cde-c75a-11eb-a0a9-0242c0a83002- from
string
(optional) Example: 2019-01-01T05:00:00+02:00- to
string
(optional) Example: 2019-01-02T05:00:00+02:00- offset
number
(optional) Example: 0- limit
number
(optional) Example: 100
200
Headers
Content-Type: application/json
Body
{
"populationChanges": [
{
"id": 48,
"zoneId": 40,
"eventId": 30,
"quantity": 1,
"currentBeforeChange": 108,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"deviceId": 70,
"scanningId": 111,
"ticketId": 100
}
],
"totalCount": 123
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"populationChanges": {
"type": "array"
},
"totalCount": {
"type": "number",
"description": "The total number of population changes matching the search."
}
}
}
Get Nearest Zone Population Change Before A Given TimeGET/zones/{zoneId}/population/nearestChange{?eventId,time}
Example URI
- zoneId
number
(required) Example: 40- eventId
number
(required) Example: 30- time
string
(required) Example: 2019-01-01T05:00:00+02:00
200
Headers
Content-Type: application/json
Body
{
"id": 48,
"zoneId": 40,
"eventId": 30,
"quantity": 1,
"currentBeforeChange": 108,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"deviceId": 70,
"scanningId": 111,
"ticketId": 100
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"quantity": {
"type": "number"
},
"currentBeforeChange": {
"type": "number"
},
"insertTime": {
"type": "string"
},
"userId": {
"type": [
"number",
"null"
],
"description": "Set if change done by a user"
},
"deviceId": {
"type": [
"number",
"null"
],
"description": "Set if change done by a scanning"
},
"scanningId": {
"type": [
"number",
"null"
],
"description": "Set if change done by a scanning"
},
"ticketId": {
"type": [
"number",
"null"
],
"description": "Can be set if change done by a scanning"
}
},
"required": [
"id",
"zoneId",
"eventId",
"quantity",
"currentBeforeChange",
"insertTime",
"userId",
"deviceId",
"scanningId",
"ticketId"
]
}
Zone Groups ¶
Zone groups are used to group zones into areas. These are used for reporting.
List all zone groupsGET/zoneGroups
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"organizerId": 10,
"name": "Backstage",
"externalId": "9991234"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new zone groupPOST/zoneGroups
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"organizerId": null,
"name": "Backstage",
"externalId": "9991234"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"organizerId": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"externalId": {
"type": [
"string",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"name",
"externalId"
]
}
201
Headers
Content-Type: application/json
Location: /zoneGroups/{zoneGroupId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"organizerId": 10,
"name": "Backstage",
"externalId": "9991234",
"msgType": "ZoneGroup"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"externalId": {
"type": [
"string",
"null"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"name",
"externalId",
"msgType"
]
}
Deletable zone group IDsGET/zoneGroups/deletableIds
Get the IDs of all zone groups that can be deleted. This does not validate if the user can actually delete the zone group.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Zone group ¶
Get zone groupGET/zoneGroups/{zoneGroupId}
Example URI
- zoneGroupId
number
(required) Example: 190
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"organizerId": 10,
"name": "Backstage",
"externalId": "9991234"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"externalId": {
"type": [
"string",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"name",
"externalId"
]
}
Update zone groupPUT/zoneGroups/{zoneGroupId}
The ID in the URL and the body must match.
Example URI
- zoneGroupId
number
(required) Example: 190
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"organizerId": 10,
"name": "Backstage",
"externalId": "9991234"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"externalId": {
"type": [
"string",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"name",
"externalId"
]
}
204
Delete zone groupDELETE/zoneGroups/{zoneGroupId}
Example URI
- zoneGroupId
number
(required) Example: 190
204
Entrances ¶
List all entrancesGET/entrances{?venueId,allowDeleted}
Example URI
- venueId
number
(required) Example: 10- allowDeleted
boolean
(optional) Example: 1Find the entrances, even if they are deleted
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 50,
"venueId": 10,
"name": "Hollændersvinget",
"type": "entrance",
"innerZoneId": 40,
"outerZoneId": 41,
"note": "Personaleindgang",
"pin": "1111",
"adjustPopulationForInnerZone": true,
"adjustPopulationForOuterZone": true
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new entrancePOST/entrances
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"venueId": 10,
"name": "Hollændersvinget",
"type": "entrance",
"innerZoneId": 40,
"outerZoneId": 41,
"note": "Personaleindgang",
"pin": "1111",
"adjustPopulationForInnerZone": true,
"adjustPopulationForOuterZone": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"venueId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"entrance",
"lockers"
]
},
"innerZoneId": {
"type": "number"
},
"outerZoneId": {
"type": "number"
},
"note": {
"type": [
"string",
"null"
]
},
"pin": {
"type": "string"
},
"adjustPopulationForInnerZone": {
"type": "boolean"
},
"adjustPopulationForOuterZone": {
"type": "boolean"
}
},
"required": [
"syncId",
"isDeleted",
"venueId",
"name",
"type",
"innerZoneId",
"outerZoneId",
"note",
"adjustPopulationForInnerZone",
"adjustPopulationForOuterZone"
]
}
201
Headers
Content-Type: application/json
Location: /entrances/{entranceId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 50,
"venueId": 10,
"name": "Hollændersvinget",
"type": "entrance",
"innerZoneId": 40,
"outerZoneId": 41,
"note": "Personaleindgang",
"pin": "1111",
"adjustPopulationForInnerZone": true,
"adjustPopulationForOuterZone": true,
"msgType": "Entrance"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"venueId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"entrance",
"lockers"
]
},
"innerZoneId": {
"type": "number"
},
"outerZoneId": {
"type": "number"
},
"note": {
"type": [
"string",
"null"
]
},
"pin": {
"type": "string"
},
"adjustPopulationForInnerZone": {
"type": "boolean"
},
"adjustPopulationForOuterZone": {
"type": "boolean"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"venueId",
"name",
"type",
"innerZoneId",
"outerZoneId",
"note",
"adjustPopulationForInnerZone",
"adjustPopulationForOuterZone",
"msgType"
]
}
Reset entrance countsPUT/entrances/resetCounts{?eventId}
Will reset the in and out counters for all entrances for an event.
Example URI
- eventId
number
(required) Example: 30
204
Entrance ¶
Get entranceGET/entrances/{entranceId}{?allowDeleted}
Example URI
- entranceId
number
(required) Example: 50- allowDeleted
boolean
(optional) Example: 1Find the entrance, even if it is deleted
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 50,
"venueId": 10,
"name": "Hollændersvinget",
"type": "entrance",
"innerZoneId": 40,
"outerZoneId": 41,
"note": "Personaleindgang",
"pin": "1111",
"adjustPopulationForInnerZone": true,
"adjustPopulationForOuterZone": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"venueId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"entrance",
"lockers"
]
},
"innerZoneId": {
"type": "number"
},
"outerZoneId": {
"type": "number"
},
"note": {
"type": [
"string",
"null"
]
},
"pin": {
"type": "string"
},
"adjustPopulationForInnerZone": {
"type": "boolean"
},
"adjustPopulationForOuterZone": {
"type": "boolean"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"venueId",
"name",
"type",
"innerZoneId",
"outerZoneId",
"note",
"adjustPopulationForInnerZone",
"adjustPopulationForOuterZone"
]
}
Update entrancePUT/entrances/{entranceId}
The ID in the URL and the body must match.
Example URI
- entranceId
number
(required) Example: 50
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 50,
"venueId": 10,
"name": "Hollændersvinget",
"type": "entrance",
"innerZoneId": 40,
"outerZoneId": 41,
"note": "Personaleindgang",
"pin": "1111",
"adjustPopulationForInnerZone": true,
"adjustPopulationForOuterZone": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"venueId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"entrance",
"lockers"
]
},
"innerZoneId": {
"type": "number"
},
"outerZoneId": {
"type": "number"
},
"note": {
"type": [
"string",
"null"
]
},
"pin": {
"type": "string"
},
"adjustPopulationForInnerZone": {
"type": "boolean"
},
"adjustPopulationForOuterZone": {
"type": "boolean"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"venueId",
"name",
"type",
"innerZoneId",
"outerZoneId",
"note",
"adjustPopulationForInnerZone",
"adjustPopulationForOuterZone"
]
}
204
Delete entranceDELETE/entrances/{entranceId}
Example URI
- entranceId
number
(required) Example: 50
204
Entrance log entriesGET/entrances/{entranceId}/log
Example URI
- entranceId
number
(required) Example: 50
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"entranceId": 50
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Entrance status ¶
Get entrance statusGET/entrances/{entranceId}/status{?eventId}
Example URI
- entranceId
number
(required) Example: 50- eventId
number
(required) Example: 30
200
Headers
Content-Type: application/json
Body
{
"id": 50,
"name": "Hollændersvinget",
"countIn": 461,
"countOut": 0,
"countInEvent": 1325,
"countOutEvent": 0,
"scanners": [
{
"id": 60,
"name": "Hollændersvinget mølle 1",
"countIn": 461,
"countOut": 0,
"countInEvent": 1325,
"countOutEvent": 0,
"deviceId": 70,
"connection": {
"status": "connected",
"lastSeen": "2017-08-05T12:30:00+02:00",
"queueUser": "VM_0109",
"appVersion": "1.0.9",
"event": {
"deviceId": 70,
"eventId": 30,
"lastSyncId": 12345,
"updated": "2017-08-05T12:30:00+02:00"
},
"lanes": [
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 0,
"selectedMode": 0,
"lastSeen": "2017-08-05T12:30:00+02:00",
"status": "connected"
}
]
}
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"countIn": {
"type": "number",
"description": "Allowed entrance scannings since counters were reset."
},
"countOut": {
"type": "number",
"description": "Allowed exit scannings since counters were reset."
},
"countInEvent": {
"type": "number",
"description": "Allowed entrance scannings since event start."
},
"countOutEvent": {
"type": "number",
"description": "Allowed exit scannings since event start."
},
"scanners": {
"type": "array"
}
},
"required": [
"id",
"name",
"countIn",
"countOut",
"countInEvent",
"countOutEvent",
"scanners"
]
}
Entrance devices ¶
Get devices for this entranceGET/entrances/{entranceId}/devices
Example URI
- entranceId
number
(required) Example: 50
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 70,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Scanner Configurations ¶
List all scanner configurationsGET/scannerConfigurations
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 80,
"organizerId": 10,
"name": "VAC+Gotschlich Compact 3-Arm",
"description": "Venue Access Controller monteret på Gotschlich Compact 3-arm mølle",
"value": "{ \"example\": \"Needs a lot of work\" }"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new scanner configurationPOST/scannerConfigurations
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"organizerId": null,
"name": "VAC+Gotschlich Compact 3-Arm",
"description": "Venue Access Controller monteret på Gotschlich Compact 3-arm mølle",
"value": "{ \"example\": \"Needs a lot of work\" }"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"organizerId": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"value": {
"type": "string",
"description": "Configuration as a JSON string"
}
},
"required": [
"syncId",
"isDeleted",
"name",
"description",
"value"
]
}
201
Headers
Content-Type: application/json
Location: /scannerConfigurations/{scannerConfigurationId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 80,
"organizerId": 10,
"name": "VAC+Gotschlich Compact 3-Arm",
"description": "Venue Access Controller monteret på Gotschlich Compact 3-arm mølle",
"value": "{ \"example\": \"Needs a lot of work\" }",
"msgType": "ScannerConfiguration"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"value": {
"type": "string",
"description": "Configuration as a JSON string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"name",
"description",
"value",
"msgType"
]
}
Scanner configuration ¶
Get scanner configurationGET/scannerConfigurations/{scannerConfigurationId}
Example URI
- scannerConfigurationId
number
(required) Example: 80
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 80,
"organizerId": 10,
"name": "VAC+Gotschlich Compact 3-Arm",
"description": "Venue Access Controller monteret på Gotschlich Compact 3-arm mølle",
"value": "{ \"example\": \"Needs a lot of work\" }"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"value": {
"type": "string",
"description": "Configuration as a JSON string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"name",
"description",
"value"
]
}
Update scanner configurationPUT/scannerConfigurations/{scannerConfigurationId}
The ID in the URL and the body must match.
Example URI
- scannerConfigurationId
number
(required) Example: 80
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 60,
"uuid": "0c669ae0-247d-4170-af18-7cb650589e8b",
"entranceId": 50,
"name": "Hollændersvinget mølle 1",
"deviceId": 70
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"entranceId": {
"type": "number"
},
"name": {
"type": "string"
},
"deviceId": {
"type": "number",
"description": "NULL if no device is selected."
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"entranceId",
"name",
"deviceId"
]
}
204
Delete scanner configurationDELETE/scannerConfigurations/{scannerConfigurationId}
Example URI
- scannerConfigurationId
number
(required) Example: 80
204
Scanners ¶
List all scannersGET/scanners{?entranceId,allowDeleted}
Example URI
- entranceId
number
(optional) Example: 50- allowDeleted
boolean
(optional) Example: 1Find the scanners, even if they are deleted
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 60,
"uuid": "0c669ae0-247d-4170-af18-7cb650589e8b",
"entranceId": 50,
"name": "Hollændersvinget mølle 1",
"deviceId": 70
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new scannerPOST/scanners
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"entranceId": 50,
"name": "Hollændersvinget mølle 1",
"deviceId": 70
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": [
"string",
"null"
]
},
"entranceId": {
"type": "number"
},
"name": {
"type": "string"
},
"deviceId": {
"type": "number",
"description": "NULL if no device is selected."
}
},
"required": [
"syncId",
"isDeleted",
"entranceId",
"name",
"deviceId"
]
}
201
Headers
Content-Type: application/json
Location: /scanners/{scannerId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 60,
"uuid": "0c669ae0-247d-4170-af18-7cb650589e8b",
"entranceId": 50,
"name": "Hollændersvinget mølle 1",
"deviceId": 70,
"msgType": "Scanner"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"entranceId": {
"type": "number"
},
"name": {
"type": "string"
},
"deviceId": {
"type": "number",
"description": "NULL if no device is selected."
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"entranceId",
"name",
"deviceId",
"msgType"
]
}
Scanner ¶
Get scannerGET/scanners/{scannerId}{?allowDeleted}
Example URI
- scannerId
number
(required) Example: 60- allowDeleted
boolean
(optional) Example: 1Find the scanner, even if it is deleted
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 60,
"uuid": "0c669ae0-247d-4170-af18-7cb650589e8b",
"entranceId": 50,
"name": "Hollændersvinget mølle 1",
"deviceId": 70
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"entranceId": {
"type": "number"
},
"name": {
"type": "string"
},
"deviceId": {
"type": "number",
"description": "NULL if no device is selected."
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"entranceId",
"name",
"deviceId"
]
}
Update scannerPUT/scanners/{scannerId}
The ID in the URL and the body must match.
Example URI
- scannerId
number
(required) Example: 60
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 60,
"uuid": "0c669ae0-247d-4170-af18-7cb650589e8b",
"entranceId": 50,
"name": "Hollændersvinget mølle 1",
"deviceId": 70
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"entranceId": {
"type": "number"
},
"name": {
"type": "string"
},
"deviceId": {
"type": "number",
"description": "NULL if no device is selected."
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"entranceId",
"name",
"deviceId"
]
}
204
Delete scannerDELETE/scanners/{scannerId}
Example URI
- scannerId
number
(required) Example: 60
204
Scanner log entriesGET/scanners/{scannerId}/log
Example URI
- scannerId
number
(required) Example: 60
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"scannerId": 60
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Scanner status ¶
Get scanner statusGET/scanners/{scannerId}/status{?eventId}
Example URI
- scannerId
number
(required) Example: 60- eventId
number
(required) Example: 30
200
Headers
Content-Type: application/json
Body
{
"id": 60,
"name": "Hollændersvinget mølle 1",
"countIn": 461,
"countOut": 0,
"countInEvent": 1325,
"countOutEvent": 0,
"deviceId": 70,
"connection": {
"status": "connected",
"lastSeen": "2017-08-05T12:30:00+02:00",
"queueUser": "VM_0109",
"appVersion": "1.0.9",
"event": {
"deviceId": 70,
"eventId": 30,
"lastSyncId": 12345,
"updated": "2017-08-05T12:30:00+02:00"
},
"lanes": [
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 0,
"selectedMode": 0,
"lastSeen": "2017-08-05T12:30:00+02:00",
"status": "connected"
}
]
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"countIn": {
"type": "number",
"description": "Allowed entrance scannings since counters were reset."
},
"countOut": {
"type": "number",
"description": "Allowed exit scannings since counters were reset."
},
"countInEvent": {
"type": "number",
"description": "Allowed entrance scannings since event start."
},
"countOutEvent": {
"type": "number",
"description": "Allowed exit scannings since event start."
},
"deviceId": {
"type": "number"
},
"connection": {
"type": [
"object",
"null"
],
"properties": {
"status": {
"type": "string",
"enum": [
"connected",
"disconnected",
"turned off"
]
},
"lastSeen": {
"type": "string"
},
"queueUser": {
"type": [
"string",
"null"
]
},
"appVersion": {
"type": [
"string",
"null"
]
},
"event": {
"type": [
"object",
"null"
],
"properties": {
"deviceId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"lastSyncId": {
"type": "number"
},
"updated": {
"type": "string"
}
},
"required": [
"deviceId",
"eventId",
"lastSyncId",
"updated"
]
},
"lanes": {
"type": "array"
}
},
"required": [
"status",
"lastSeen",
"queueUser",
"appVersion",
"event",
"lanes"
]
}
},
"required": [
"id",
"name",
"countIn",
"countOut",
"countInEvent",
"countOutEvent",
"deviceId",
"connection"
]
}
Lockers ¶
Management of locker groups, sections, boxes, and bookings. Lockers must be enabled in the organizer before usage.
Lockers Groups ¶
Get locker groupsGET/lockers/groups{?entranceId,scannerId,allowDeleted}
Example URI
- entranceId
number
(optional) Example: 50- scannerId
number
(optional) Example: 60- allowDeleted
boolean
(optional) Example: 1Find the locker groups, even if they are deleted
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 360,
"uuid": "4b2d842b-9b07-4730-a44e-d9a9be01a75b",
"scannerId": 60,
"name": "AA",
"mode": "production",
"note": "Er på Smukfest",
"pickupCode": "4242",
"externalEventId": "Hello, world!"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create locker groupPOST/lockers/groups
Either scannerId or entranceId must be specified. If entranceId is specified, then a new scanner is created as well.
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": "4b2d842b-9b07-4730-a44e-d9a9be01a75b",
"scannerId": null,
"name": "AA",
"mode": "production",
"note": "Er på Smukfest",
"pickupCode": "4242",
"externalEventId": null,
"entranceId": null
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": "string"
},
"scannerId": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"production",
"service"
]
},
"note": {
"type": [
"string",
"null"
]
},
"pickupCode": {
"type": "string"
},
"externalEventId": {
"type": [
"string",
"null"
]
},
"entranceId": {
"type": [
"number",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"uuid",
"name",
"mode",
"note",
"pickupCode",
"externalEventId"
]
}
201
Headers
Content-Type: application/json
Location: /lockers/groups/{groupId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 360,
"uuid": "4b2d842b-9b07-4730-a44e-d9a9be01a75b",
"scannerId": 60,
"name": "AA",
"mode": "production",
"note": "Er på Smukfest",
"pickupCode": "4242",
"externalEventId": "Hello, world!",
"msgType": "LockerGroup"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"scannerId": {
"type": "number"
},
"name": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"production",
"service"
]
},
"note": {
"type": [
"string",
"null"
]
},
"pickupCode": {
"type": "string"
},
"externalEventId": {
"type": [
"string",
"null"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"scannerId",
"name",
"mode",
"note",
"pickupCode",
"externalEventId",
"msgType"
]
}
Locker group ¶
Get locker groupGET/lockers/groups/{groupId}{?allowDeleted}
Example URI
- groupId
number
(required) Example: 360- allowDeleted
boolean
(optional) Example: 1Find the locker group, even if it is deleted
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 360,
"uuid": "4b2d842b-9b07-4730-a44e-d9a9be01a75b",
"scannerId": 60,
"name": "AA",
"mode": "production",
"note": "Er på Smukfest",
"pickupCode": "4242",
"externalEventId": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"scannerId": {
"type": "number"
},
"name": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"production",
"service"
]
},
"note": {
"type": [
"string",
"null"
]
},
"pickupCode": {
"type": "string"
},
"externalEventId": {
"type": [
"string",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"scannerId",
"name",
"mode",
"note",
"pickupCode",
"externalEventId"
]
}
Update locker groupPUT/lockers/groups/{groupId}
The ID in the URL and the body must match.
Example URI
- groupId
number
(required) Example: 360
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 360,
"uuid": "4b2d842b-9b07-4730-a44e-d9a9be01a75b",
"scannerId": 60,
"name": "AA",
"mode": "production",
"note": "Er på Smukfest",
"pickupCode": "4242",
"externalEventId": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"scannerId": {
"type": "number"
},
"name": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"production",
"service"
]
},
"note": {
"type": [
"string",
"null"
]
},
"pickupCode": {
"type": "string"
},
"externalEventId": {
"type": [
"string",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"scannerId",
"name",
"mode",
"note",
"pickupCode",
"externalEventId"
]
}
204
Delete locker groupDELETE/lockers/groups/{groupId}
Example URI
- groupId
number
(required) Example: 360
204
Locker group log entriesGET/lockers/groups/{groupId}/log
Example URI
- groupId
number
(required) Example: 360
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"lockerGroupId": 360
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Update locker group modePUT/lockers/groups/{groupId}/mode
Example URI
- groupId
number
(required) Example: 360
Headers
Content-Type: application/json
Body
{
"mode": "production"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"production",
"service"
]
}
},
"required": [
"mode"
]
}
204
Unlock all boxes in a locker groupPOST/lockers/groups/{groupId}/unlock
Example URI
- groupId
number
(required) Example: 360
204
Stop all bookings in a locker groupPOST/lockers/groups/{groupId}/stopBookings
Example URI
- groupId
number
(required) Example: 360
Headers
Content-Type: application/json
Body
{
"clearIsRejected": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"clearIsRejected": {
"type": "boolean",
"description": "Also clear isRejected for all boxes"
}
}
}
204
Clear all rejected boxes in a locker groupPOST/lockers/groups/{groupId}/clearRejected
Example URI
- groupId
number
(required) Example: 360
204
Lockers Sections ¶
Get locker sectionsGET/lockers/sections{?groupId,allowDeleted}
Example URI
- groupId
number
(optional) Example: 360- allowDeleted
boolean
(optional) Example: 1Find the locker sections, even if they are deleted
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 370,
"lockerGroupId": 360,
"name": "A"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get locker sections with boxesGET/lockers/sections/data{?groupId}
Example URI
- groupId
number
(optional) Example: 360
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 370,
"lockerGroupId": 360,
"name": "A",
"boxes": [
{
"syncId": 999,
"isDeleted": false,
"id": 380,
"lockerSectionId": 370,
"number": "12",
"status": "available",
"statusChanged": "2018-08-05T14:00:00+02:00",
"isRejected": false,
"lockerControllerName": "Kerung-CU48",
"lockerDeviceName": "CU48-0",
"lockerChannel": 1,
"rgbControllerName": "Godik 80-kanals RGB-LED-driver",
"rgbIndex": 1,
"positionX": 0,
"positionY": 0,
"width": 300,
"height": 500,
"activeLockerBookingId": 390,
"bookingEnded": "2018-08-05T14:00:00+02:00",
"bookingInformation": "Information about customer",
"bookingExternalEventId": "SomeEvent",
"lockerIsOpen": 0
}
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create locker sectionPOST/lockers/sections
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"lockerGroupId": 360,
"name": "A"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"lockerGroupId": {
"type": "number"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"lockerGroupId",
"name"
]
}
201
Headers
Content-Type: application/json
Location: /lockers/sections/{sectionId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 370,
"lockerGroupId": 360,
"name": "A",
"msgType": "LockerSection"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerGroupId": {
"type": "number"
},
"name": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerGroupId",
"name",
"msgType"
]
}
Locker section ¶
Get locker sectionGET/lockers/sections/{sectionId}{?allowDeleted}
Example URI
- sectionId
number
(required) Example: 370- allowDeleted
boolean
(optional) Example: 1Find the locker section, even if it is deleted
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 370,
"lockerGroupId": 360,
"name": "A"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerGroupId": {
"type": "number"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerGroupId",
"name"
]
}
Update locker sectionPUT/lockers/sections/{sectionId}
The ID in the URL and the body must match.
Example URI
- sectionId
number
(required) Example: 370
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 370,
"lockerGroupId": 360,
"name": "A"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerGroupId": {
"type": "number"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerGroupId",
"name"
]
}
204
Delete locker sectionDELETE/lockers/sections/{sectionId}
Example URI
- sectionId
number
(required) Example: 370
204
Locker section log entriesGET/lockers/sections/{sectionId}/log
Example URI
- sectionId
number
(required) Example: 370
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"lockerSectionId": 370
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Lockers Boxes ¶
Get locker boxesGET/lockers/boxes{?allowDeleted}
Example URI
- allowDeleted
boolean
(optional) Example: 1Find the locker boxes, even if they are deleted
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 380,
"lockerSectionId": 370,
"number": "12",
"status": "available",
"statusChanged": "2018-08-05T14:00:00+02:00",
"isRejected": false,
"lockerControllerName": "Kerung-CU48",
"lockerDeviceName": "CU48-0",
"lockerChannel": 1,
"rgbControllerName": "Godik 80-kanals RGB-LED-driver",
"rgbIndex": 1,
"positionX": 0,
"positionY": 0,
"width": 300,
"height": 500,
"activeLockerBookingId": 390
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create locker boxPOST/lockers/boxes
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"lockerSectionId": 370,
"number": "12",
"status": "available",
"statusChanged": "2018-08-05T14:00:00+02:00",
"isRejected": false,
"lockerControllerName": "Kerung-CU48",
"lockerDeviceName": "CU48-0",
"lockerChannel": 1,
"rgbControllerName": "Godik 80-kanals RGB-LED-driver",
"rgbIndex": 1,
"positionX": 0,
"positionY": 0,
"width": 300,
"height": 500,
"activeLockerBookingId": 390
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"lockerSectionId": {
"type": "number"
},
"number": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"available",
"booking",
"blocked",
"occupied"
]
},
"statusChanged": {
"type": [
"string",
"null"
]
},
"isRejected": {
"type": "boolean"
},
"lockerControllerName": {
"type": [
"string",
"null"
]
},
"lockerDeviceName": {
"type": [
"string",
"null"
]
},
"lockerChannel": {
"type": "number"
},
"rgbControllerName": {
"type": [
"string",
"null"
]
},
"rgbIndex": {
"type": "number"
},
"positionX": {
"type": "number",
"description": "Distance from left edge (mm)"
},
"positionY": {
"type": "number",
"description": "Distance from floor (mm)"
},
"width": {
"type": "number",
"description": "Box outer width (mm)"
},
"height": {
"type": "number",
"description": "Box outer height (mm)"
},
"activeLockerBookingId": {
"type": [
"number",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"lockerSectionId",
"number",
"status",
"statusChanged",
"isRejected",
"lockerControllerName",
"lockerDeviceName",
"lockerChannel",
"rgbControllerName",
"rgbIndex",
"positionX",
"positionY",
"width",
"height",
"activeLockerBookingId"
]
}
201
Headers
Content-Type: application/json
Location: /lockers/boxes/{boxId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 380,
"lockerSectionId": 370,
"number": "12",
"status": "available",
"statusChanged": "2018-08-05T14:00:00+02:00",
"isRejected": false,
"lockerControllerName": "Kerung-CU48",
"lockerDeviceName": "CU48-0",
"lockerChannel": 1,
"rgbControllerName": "Godik 80-kanals RGB-LED-driver",
"rgbIndex": 1,
"positionX": 0,
"positionY": 0,
"width": 300,
"height": 500,
"activeLockerBookingId": 390,
"msgType": "LockerBox"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerSectionId": {
"type": "number"
},
"number": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"available",
"booking",
"blocked",
"occupied"
]
},
"statusChanged": {
"type": [
"string",
"null"
]
},
"isRejected": {
"type": "boolean"
},
"lockerControllerName": {
"type": [
"string",
"null"
]
},
"lockerDeviceName": {
"type": [
"string",
"null"
]
},
"lockerChannel": {
"type": "number"
},
"rgbControllerName": {
"type": [
"string",
"null"
]
},
"rgbIndex": {
"type": "number"
},
"positionX": {
"type": "number",
"description": "Distance from left edge (mm)"
},
"positionY": {
"type": "number",
"description": "Distance from floor (mm)"
},
"width": {
"type": "number",
"description": "Box outer width (mm)"
},
"height": {
"type": "number",
"description": "Box outer height (mm)"
},
"activeLockerBookingId": {
"type": [
"number",
"null"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerSectionId",
"number",
"status",
"statusChanged",
"isRejected",
"lockerControllerName",
"lockerDeviceName",
"lockerChannel",
"rgbControllerName",
"rgbIndex",
"positionX",
"positionY",
"width",
"height",
"activeLockerBookingId",
"msgType"
]
}
Locker box ¶
Get locker boxGET/lockers/boxes/{boxId}{?allowDeleted}
Example URI
- boxId
number
(required) Example: 380- allowDeleted
boolean
(optional) Example: 1Find the locker box, even if it is deleted
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 380,
"lockerSectionId": 370,
"number": "12",
"status": "available",
"statusChanged": "2018-08-05T14:00:00+02:00",
"isRejected": false,
"lockerControllerName": "Kerung-CU48",
"lockerDeviceName": "CU48-0",
"lockerChannel": 1,
"rgbControllerName": "Godik 80-kanals RGB-LED-driver",
"rgbIndex": 1,
"positionX": 0,
"positionY": 0,
"width": 300,
"height": 500,
"activeLockerBookingId": 390
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerSectionId": {
"type": "number"
},
"number": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"available",
"booking",
"blocked",
"occupied"
]
},
"statusChanged": {
"type": [
"string",
"null"
]
},
"isRejected": {
"type": "boolean"
},
"lockerControllerName": {
"type": [
"string",
"null"
]
},
"lockerDeviceName": {
"type": [
"string",
"null"
]
},
"lockerChannel": {
"type": "number"
},
"rgbControllerName": {
"type": [
"string",
"null"
]
},
"rgbIndex": {
"type": "number"
},
"positionX": {
"type": "number",
"description": "Distance from left edge (mm)"
},
"positionY": {
"type": "number",
"description": "Distance from floor (mm)"
},
"width": {
"type": "number",
"description": "Box outer width (mm)"
},
"height": {
"type": "number",
"description": "Box outer height (mm)"
},
"activeLockerBookingId": {
"type": [
"number",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerSectionId",
"number",
"status",
"statusChanged",
"isRejected",
"lockerControllerName",
"lockerDeviceName",
"lockerChannel",
"rgbControllerName",
"rgbIndex",
"positionX",
"positionY",
"width",
"height",
"activeLockerBookingId"
]
}
Update locker boxPUT/lockers/boxes/{boxId}
The ID in the URL and the body must match.
Example URI
- boxId
number
(required) Example: 380
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 380,
"lockerSectionId": 370,
"number": "12",
"status": "available",
"statusChanged": "2018-08-05T14:00:00+02:00",
"isRejected": false,
"lockerControllerName": "Kerung-CU48",
"lockerDeviceName": "CU48-0",
"lockerChannel": 1,
"rgbControllerName": "Godik 80-kanals RGB-LED-driver",
"rgbIndex": 1,
"positionX": 0,
"positionY": 0,
"width": 300,
"height": 500,
"activeLockerBookingId": 390
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerSectionId": {
"type": "number"
},
"number": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"available",
"booking",
"blocked",
"occupied"
]
},
"statusChanged": {
"type": [
"string",
"null"
]
},
"isRejected": {
"type": "boolean"
},
"lockerControllerName": {
"type": [
"string",
"null"
]
},
"lockerDeviceName": {
"type": [
"string",
"null"
]
},
"lockerChannel": {
"type": "number"
},
"rgbControllerName": {
"type": [
"string",
"null"
]
},
"rgbIndex": {
"type": "number"
},
"positionX": {
"type": "number",
"description": "Distance from left edge (mm)"
},
"positionY": {
"type": "number",
"description": "Distance from floor (mm)"
},
"width": {
"type": "number",
"description": "Box outer width (mm)"
},
"height": {
"type": "number",
"description": "Box outer height (mm)"
},
"activeLockerBookingId": {
"type": [
"number",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerSectionId",
"number",
"status",
"statusChanged",
"isRejected",
"lockerControllerName",
"lockerDeviceName",
"lockerChannel",
"rgbControllerName",
"rgbIndex",
"positionX",
"positionY",
"width",
"height",
"activeLockerBookingId"
]
}
204
Delete locker boxDELETE/lockers/boxes/{boxId}
Example URI
- boxId
number
(required) Example: 380
204
Locker box log entriesGET/lockers/boxes/{boxId}/log
Example URI
- boxId
number
(required) Example: 380
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"lockerBoxId": 380
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Unlock the boxPOST/lockers/boxes/{boxId}/unlock
Example URI
- boxId
number
(required) Example: 380
204
Set status of the boxPUT/lockers/boxes/{boxId}/status
Example URI
- boxId
number
(required) Example: 380
Headers
Content-Type: application/json
Body
{
"status": "available",
"isRejected": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"available",
"booking",
"blocked",
"occupied"
]
},
"isRejected": {
"type": "boolean"
}
},
"required": [
"status"
]
}
204
Lockers Bookings ¶
Get locker bookingsGET/lockers/bookings{?boxId,offset,limit,allowDeleted}
The bookings are returned in chronological order, newest first.
Example URI
- boxId
number
(optional) Example: 380- offset
number
(optional) Example: 0- limit
number
(optional) Example: 50- allowDeleted
boolean
(optional) Example: 1Find the locker bookings, even if they are deleted
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 390,
"lockerBoxId": 380,
"information": "Hello, world!",
"externalEventId": "Hello, world!"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create locker bookingPOST/lockers/bookings
Will set its box as “booking”.
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"lockerBoxId": 380,
"information": ""
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"lockerBoxId": {
"type": "number"
},
"information": {
"type": "string"
},
"externalEventId": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"lockerBoxId",
"information"
]
}
201
Headers
Content-Type: application/json
Location: /lockers/bookings/{bookingId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 390,
"lockerBoxId": 380,
"information": "Hello, world!",
"externalEventId": "Hello, world!",
"msgType": "LockerBooking"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerBoxId": {
"type": "number"
},
"information": {
"type": "string"
},
"externalEventId": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerBoxId",
"information",
"msgType"
]
}
Locker booking ¶
Get locker bookingGET/lockers/bookings/{bookingId}{?allowDeleted}
Example URI
- bookingId
number
(required) Example: 390- allowDeleted
boolean
(optional) Example: 1Find the locker booking, even if it is deleted
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 390,
"lockerBoxId": 380,
"information": "Hello, world!",
"externalEventId": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerBoxId": {
"type": "number"
},
"information": {
"type": "string"
},
"externalEventId": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerBoxId",
"information"
]
}
Update locker bookingPUT/lockers/bookings/{bookingId}
The ID in the URL and the body must match.
Example URI
- bookingId
number
(required) Example: 390
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 390,
"lockerBoxId": 380,
"information": "Hello, world!",
"externalEventId": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerBoxId": {
"type": "number"
},
"information": {
"type": "string"
},
"externalEventId": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerBoxId",
"information"
]
}
204
Delete locker bookingDELETE/lockers/bookings/{bookingId}
Example URI
- bookingId
number
(required) Example: 390
204
Locker booking log entriesGET/lockers/bookings/{bookingId}/log
Example URI
- bookingId
number
(required) Example: 390
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"lockerBookingId": 390
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Unlock the box for the bookingPOST/lockers/bookings/{bookingId}/unlock
Example URI
- bookingId
number
(required) Example: 390
204
Complete the bookingPOST/lockers/bookings/{bookingId}/complete
Will set its box as “occupied”.
Example URI
- bookingId
number
(required) Example: 390
204
Stop the bookingPOST/lockers/bookings/{bookingId}/stop
Will set its box as “available”.
Example URI
- bookingId
number
(required) Example: 390
204
Events and tickets ¶
Management of events and tickets.
Events ¶
List all eventsGET/events{?venueId,type,name,isActive}
Example URI
- venueId
number
(optional) Example: 10- type
enum
(optional)Choices:
normal
template
- name
string
(optional) Example: Sæson 2020- isActive
boolean
(optional) Example: true
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 30,
"uuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"venueId": 10,
"type": "normal",
"name": "Smukfest 2018",
"startTime": "2018-08-08T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00",
"baseTime": "2018-08-08T10:00:00+02:00",
"imageUrl": "https://placekitten.com/480/640",
"isActive": true,
"requireUniqueTicketNames": false,
"useBlacklist": false
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new eventPOST/events
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"venueId": 10,
"type": "normal",
"name": "Smukfest 2018",
"startTime": "2018-08-08T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00",
"baseTime": "2018-08-08T10:00:00+02:00",
"imageUrl": "https://placekitten.com/480/640",
"isActive": true,
"requireUniqueTicketNames": false,
"useBlacklist": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": [
"string",
"null"
]
},
"venueId": {
"type": "number"
},
"type": {
"type": "string",
"enum": [
"normal",
"template"
]
},
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"baseTime": {
"type": "string"
},
"imageUrl": {
"type": "string",
"description": "URL to an event image"
},
"isActive": {
"type": "boolean"
},
"requireUniqueTicketNames": {
"type": "boolean",
"description": "Require that ticket names, if set, are unique across the event"
},
"useBlacklist": {
"type": "boolean",
"description": "Validate ticket names against the virtual queue ProfanityBlacklist terms"
},
"templateEventId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"venueId",
"type",
"name",
"startTime",
"endTime",
"baseTime",
"isActive",
"requireUniqueTicketNames",
"useBlacklist"
]
}
201
Headers
Content-Type: application/json
Location: /events/{eventId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 30,
"uuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"venueId": 10,
"type": "normal",
"name": "Smukfest 2018",
"startTime": "2018-08-08T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00",
"baseTime": "2018-08-08T10:00:00+02:00",
"imageUrl": "https://placekitten.com/480/640",
"isActive": true,
"requireUniqueTicketNames": false,
"useBlacklist": false,
"msgType": "Event"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"venueId": {
"type": "number"
},
"type": {
"type": "string",
"enum": [
"normal",
"template"
]
},
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"baseTime": {
"type": "string"
},
"imageUrl": {
"type": "string",
"description": "URL to an event image"
},
"isActive": {
"type": "boolean"
},
"requireUniqueTicketNames": {
"type": "boolean",
"description": "Require that ticket names, if set, are unique across the event"
},
"useBlacklist": {
"type": "boolean",
"description": "Validate ticket names against the virtual queue ProfanityBlacklist terms"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"venueId",
"type",
"name",
"startTime",
"endTime",
"baseTime",
"isActive",
"requireUniqueTicketNames",
"useBlacklist",
"msgType"
]
}
Event ¶
Get eventGET/events/{eventId}
Example URI
- eventId
number
(required) Example: 30
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 30,
"uuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"venueId": 10,
"type": "normal",
"name": "Smukfest 2018",
"startTime": "2018-08-08T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00",
"baseTime": "2018-08-08T10:00:00+02:00",
"imageUrl": "https://placekitten.com/480/640",
"isActive": true,
"requireUniqueTicketNames": false,
"useBlacklist": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"venueId": {
"type": "number"
},
"type": {
"type": "string",
"enum": [
"normal",
"template"
]
},
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"baseTime": {
"type": "string"
},
"imageUrl": {
"type": "string",
"description": "URL to an event image"
},
"isActive": {
"type": "boolean"
},
"requireUniqueTicketNames": {
"type": "boolean",
"description": "Require that ticket names, if set, are unique across the event"
},
"useBlacklist": {
"type": "boolean",
"description": "Validate ticket names against the virtual queue ProfanityBlacklist terms"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"venueId",
"type",
"name",
"startTime",
"endTime",
"baseTime",
"isActive",
"requireUniqueTicketNames",
"useBlacklist"
]
}
Update eventPUT/events/{eventId}
The ID in the URL and the body must match.
Example URI
- eventId
number
(required) Example: 30
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 30,
"uuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"venueId": 10,
"type": "normal",
"name": "Smukfest 2018",
"startTime": "2018-08-08T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00",
"baseTime": "2018-08-08T10:00:00+02:00",
"imageUrl": "https://placekitten.com/480/640",
"isActive": true,
"requireUniqueTicketNames": false,
"useBlacklist": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"venueId": {
"type": "number"
},
"type": {
"type": "string",
"enum": [
"normal",
"template"
]
},
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"baseTime": {
"type": "string"
},
"imageUrl": {
"type": "string",
"description": "URL to an event image"
},
"isActive": {
"type": "boolean"
},
"requireUniqueTicketNames": {
"type": "boolean",
"description": "Require that ticket names, if set, are unique across the event"
},
"useBlacklist": {
"type": "boolean",
"description": "Validate ticket names against the virtual queue ProfanityBlacklist terms"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"venueId",
"type",
"name",
"startTime",
"endTime",
"baseTime",
"isActive",
"requireUniqueTicketNames",
"useBlacklist"
]
}
204
Delete eventDELETE/events/{eventId}
Example URI
- eventId
number
(required) Example: 30
204
Reset entrance countsPUT/events/{eventId}/resetCounts
Will reset the in and out counters for the event.
Example URI
- eventId
number
(required) Example: 30
204
Update event timesPUT/events/{eventId}/updateTimes
Update the baseTime of the event, and all other times for the event and its periods relatively.
Example URI
- eventId
number
(required) Example: 30
Headers
Content-Type: application/json
Body
{
"baseTime": "2018-08-08T10:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"baseTime": {
"type": "string"
}
},
"required": [
"baseTime"
]
}
204
Event Entrance Rules ¶
Event entrance rules can be used for forcing an entrance open or closed at certain time periods. These time periods are specified in a calendar. If autoCloseIn and/or autoCloseOut is set then the entrance will be forced closed in the specified direction at the end of each of these time periods. If autoOpenIn and/or autoOpenOut is set the forced closed will be removed in the specified direction at the start of each of the time periods. A forced closed entrance will reject all tickets. Only one rule is allowed for an entrance for each event.
List all event entrance rulesGET/events/{eventId}/entranceRules
Example URI
- eventId
number
(required) Example: 30
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 35,
"eventId": 30,
"name": "Close at end of the day",
"entranceId": 50,
"calendarId": 210,
"autoCloseIn": true,
"autoCloseOut": false,
"autoOpenIn": true,
"autoOpenOut": false
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new event entrance rulePOST/events/{eventId}/entranceRules
Example URI
- eventId
number
(required) Example: 30
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"eventId": 30,
"name": "Close at end of the day",
"entranceId": 50,
"calendarId": 210,
"autoCloseIn": true,
"autoCloseOut": false,
"autoOpenIn": true,
"autoOpenOut": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"entranceId": {
"type": "number"
},
"calendarId": {
"type": [
"number",
"null"
]
},
"autoCloseIn": {
"type": "boolean",
"description": "Force close in-direction at the end of all periods in the calendar"
},
"autoCloseOut": {
"type": "boolean",
"description": "Force close out-direction at the end of all periods in the calendar"
},
"autoOpenIn": {
"type": "boolean",
"description": "Remove forced closed for in-direction at the start of all periods in the calendar"
},
"autoOpenOut": {
"type": "boolean",
"description": "Remove forced closed for out-direction at the start of all periods in the calendar"
}
},
"required": [
"syncId",
"isDeleted",
"eventId",
"name",
"entranceId",
"calendarId",
"autoCloseIn",
"autoCloseOut",
"autoOpenIn",
"autoOpenOut"
]
}
201
Headers
Content-Type: application/json
Location: /events/{eventId}/entranceRules/{eventEntranceRuleId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 35,
"eventId": 30,
"name": "Close at end of the day",
"entranceId": 50,
"calendarId": 210,
"autoCloseIn": true,
"autoCloseOut": false,
"autoOpenIn": true,
"autoOpenOut": false,
"msgType": "EventEntranceRule"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"entranceId": {
"type": "number"
},
"calendarId": {
"type": [
"number",
"null"
]
},
"autoCloseIn": {
"type": "boolean",
"description": "Force close in-direction at the end of all periods in the calendar"
},
"autoCloseOut": {
"type": "boolean",
"description": "Force close out-direction at the end of all periods in the calendar"
},
"autoOpenIn": {
"type": "boolean",
"description": "Remove forced closed for in-direction at the start of all periods in the calendar"
},
"autoOpenOut": {
"type": "boolean",
"description": "Remove forced closed for out-direction at the start of all periods in the calendar"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"entranceId",
"calendarId",
"autoCloseIn",
"autoCloseOut",
"autoOpenIn",
"autoOpenOut",
"msgType"
]
}
Event Entrance Rule ¶
Get event entrance ruleGET/events/{eventId}/entranceRules/{eventEntranceRuleId}
Example URI
- eventId
number
(required) Example: 30- eventEntranceRuleId
number
(required) Example: 35
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 35,
"eventId": 30,
"name": "Close at end of the day",
"entranceId": 50,
"calendarId": 210,
"autoCloseIn": true,
"autoCloseOut": false,
"autoOpenIn": true,
"autoOpenOut": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"entranceId": {
"type": "number"
},
"calendarId": {
"type": [
"number",
"null"
]
},
"autoCloseIn": {
"type": "boolean",
"description": "Force close in-direction at the end of all periods in the calendar"
},
"autoCloseOut": {
"type": "boolean",
"description": "Force close out-direction at the end of all periods in the calendar"
},
"autoOpenIn": {
"type": "boolean",
"description": "Remove forced closed for in-direction at the start of all periods in the calendar"
},
"autoOpenOut": {
"type": "boolean",
"description": "Remove forced closed for out-direction at the start of all periods in the calendar"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"entranceId",
"calendarId",
"autoCloseIn",
"autoCloseOut",
"autoOpenIn",
"autoOpenOut"
]
}
Update event entrance rulePUT/events/{eventId}/entranceRules/{eventEntranceRuleId}
The IDs in the URL and the body must match.
Example URI
- eventId
number
(required) Example: 30- eventEntranceRuleId
number
(required) Example: 35
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 35,
"eventId": 30,
"name": "Close at end of the day",
"entranceId": 50,
"calendarId": 210,
"autoCloseIn": true,
"autoCloseOut": false,
"autoOpenIn": true,
"autoOpenOut": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"entranceId": {
"type": "number"
},
"calendarId": {
"type": [
"number",
"null"
]
},
"autoCloseIn": {
"type": "boolean",
"description": "Force close in-direction at the end of all periods in the calendar"
},
"autoCloseOut": {
"type": "boolean",
"description": "Force close out-direction at the end of all periods in the calendar"
},
"autoOpenIn": {
"type": "boolean",
"description": "Remove forced closed for in-direction at the start of all periods in the calendar"
},
"autoOpenOut": {
"type": "boolean",
"description": "Remove forced closed for out-direction at the start of all periods in the calendar"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"entranceId",
"calendarId",
"autoCloseIn",
"autoCloseOut",
"autoOpenIn",
"autoOpenOut"
]
}
204
Delete event entrance ruleDELETE/events/{eventId}/entranceRules/{eventEntranceRuleId}
Example URI
- eventId
number
(required) Example: 30- eventEntranceRuleId
number
(required) Example: 35
204
Event status ¶
Get event statusGET/events/{eventId}/status
Example URI
- eventId
number
(required) Example: 30
200
Headers
Content-Type: application/json
Body
{
"id": 30,
"name": "Smukfest 2018",
"countIn": 461,
"countOut": 0,
"countInEvent": 1325,
"countOutEvent": 0,
"zones": [
{
"id": 40,
"name": "Backstage",
"zoneGroupId": 190,
"population": 874,
"resetAtDayStart": false,
"resetAmount": 0
}
],
"entrances": [
{
"id": 50,
"name": "Hollændersvinget",
"countIn": 461,
"countOut": 0,
"countInEvent": 1325,
"countOutEvent": 0,
"scanners": [
{
"id": 60,
"name": "Hollændersvinget mølle 1",
"countIn": 461,
"countOut": 0,
"countInEvent": 1325,
"countOutEvent": 0,
"deviceId": 70,
"connection": {
"status": "connected",
"lastSeen": "2017-08-05T12:30:00+02:00",
"queueUser": "VM_0109",
"appVersion": "1.0.9",
"event": {
"deviceId": 70,
"eventId": 30,
"lastSyncId": 12345,
"updated": "2017-08-05T12:30:00+02:00"
},
"lanes": [
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 0,
"selectedMode": 0,
"lastSeen": "2017-08-05T12:30:00+02:00",
"status": "connected"
}
]
}
}
]
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"countIn": {
"type": "number",
"description": "Allowed entrance scannings since counters were reset."
},
"countOut": {
"type": "number",
"description": "Allowed exit scannings since counters were reset."
},
"countInEvent": {
"type": "number",
"description": "Allowed entrance scannings since event start."
},
"countOutEvent": {
"type": "number",
"description": "Allowed exit scannings since event start."
},
"zones": {
"type": "array"
},
"entrances": {
"type": "array"
}
},
"required": [
"id",
"name",
"countIn",
"countOut",
"countInEvent",
"countOutEvent",
"zones",
"entrances"
]
}
Event scans ¶
Get event scanningsGET/events/{eventId}/scans?from={fromDate}&to={toDate}&after={lastId}&limit={limit}
This endpoint returns information about the token scannings that have happened.
Requests should have fromDate + toDate OR lastId + limit. They should not be combined.
Example URI
- eventId
number
(required) Example: 30- fromDate
string
(optional) Example: 2019-01-01T05:00:00+02:00- toDate
string
(optional) Example: 2019-01-02T05:00:00+02:00- lastId
number
(optional) Example: 999Highest ID from earlier results.
- limit
number
(optional) Example: 1000
200
Headers
Content-Type: application/json
Body
[
{
"id": 111,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": null,
"tokenValue": null,
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 0,
"usageUnitCount": 1,
"multiplier": 1,
"paymentData": null,
"insertTime": "2018-08-05T12:30:00+02:00",
"innerZoneId": 82,
"outerZoneId": 83
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Search event scansGET/events/{eventId}/scans/search{?from,to,zoneId,entranceId,scannerId,deviceId,after,offset,limit}
Example URI
- eventId
number
(required) Example: 30- from
string
(optional) Example: 2019-01-01T05:00:00+02:00- to
string
(optional) Example: 2019-01-02T05:00:00+02:00- zoneId
number
(optional) Example: 40- entranceId
number
(optional) Example: 50- scannerId
number
(optional) Example: 60- deviceId
number
(optional) Example: 70- after
number
(optional) Example: 999Find all scannings after this ID
- offset
number
(optional) Example: 0- limit
number
(optional) Example: 100
200
Headers
Content-Type: application/json
Body
{
"scans": [
{
"id": 111,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": null,
"tokenValue": null,
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 0,
"usageUnitCount": 1,
"multiplier": 1,
"paymentData": null,
"insertTime": "2018-08-05T12:30:00+02:00",
"innerZoneId": 82,
"outerZoneId": 83
}
],
"totalCount": 123
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"scans": {
"type": "array"
},
"totalCount": {
"type": "number",
"description": "The total number of scans matching the search."
}
}
}
Get event scans dataGET/events/{eventId}/scans/data{?from,to,zoneId,entranceId,scannerId,deviceId,onlyUnique}
Example URI
- eventId
number
(required) Example: 30- from
string
(optional) Example: 2019-01-01T05:00:00+02:00- to
string
(optional) Example: 2019-01-02T05:00:00+02:00- zoneId
number
(optional) Example: 40- entranceId
number
(optional) Example: 50- scannerId
number
(optional) Example: 60- deviceId
number
(optional) Example: 70- onlyUnique
boolean
(optional) Example: 1Removed duplicated failed scans from result
200
Headers
Content-Type: application/json
Body
{
"granted": [
1
],
"denied": [
1
],
"forwarded": [
1
],
"codes": [
1
],
"totalCodes": [
1
],
"totalGranted": 1,
"totalDenied": 1,
"totalForwarded": 1,
"firstScan": "2019-01-01T05:00:00+02:00",
"lastScan": "2019-01-01T05:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"granted": {
"type": "array",
"description": "Count access granted in timeslots"
},
"denied": {
"type": "array",
"description": "Count access denied in timeslots"
},
"forwarded": {
"type": "array",
"description": "Count token forwarded in timeslots"
},
"codes": {
"type": "array",
"description": "Count for each status code in timeslots"
},
"totalCodes": {
"type": "array",
"description": "Total of each status codes"
},
"totalGranted": {
"type": "number"
},
"totalDenied": {
"type": "number"
},
"totalForwarded": {
"type": "number"
},
"firstScan": {
"type": [
"string",
"null"
],
"description": "Time of the first scan in the result"
},
"lastScan": {
"type": [
"string",
"null"
],
"description": "Time of the last scan in the result"
}
}
}
Event marker ¶
Get event markersGET/events/markers/{?eventId}
Example URI
- eventId
number
(required) Example: 30
200
Headers
Content-Type: application/json
Body
[
{
"id": 340,
"eventId": 30,
"name": "Backstage",
"time": "2018-08-05T12:30:00+02:00",
"color": "#000000"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new event markerPOST/events/markers
Example URI
Headers
Content-Type: application/json
Body
{
"id": null,
"eventId": 30,
"name": "Backstage",
"time": "2018-08-05T12:30:00+02:00",
"color": "#000000"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": [
"number",
"null"
]
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": "string"
},
"color": {
"type": "string",
"description": "CSS color"
}
},
"required": [
"eventId",
"name",
"time",
"color"
]
}
201
Headers
Content-Type: application/json
Location: /events/markers/{eventMarkerId}
Body
{
"id": 340,
"eventId": 30,
"name": "Backstage",
"time": "2018-08-05T12:30:00+02:00",
"color": "#000000",
"msgType": "EventMarker"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": "string"
},
"color": {
"type": "string",
"description": "CSS color"
},
"msgType": {
"type": "string"
}
},
"required": [
"id",
"eventId",
"name",
"time",
"color",
"msgType"
]
}
Event marker ¶
Get event markerGET/events/markers/{eventMarkerId}
Example URI
- eventMarkerId
number
(required) Example: 30
200
Headers
Content-Type: application/json
Body
{
"id": 340,
"eventId": 30,
"name": "Backstage",
"time": "2018-08-05T12:30:00+02:00",
"color": "#000000"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": "string"
},
"color": {
"type": "string",
"description": "CSS color"
}
},
"required": [
"id",
"eventId",
"name",
"time",
"color"
]
}
Update event markerPUT/events/markers/{eventMarkerId}
The IDs in the URL and the body must match.
Example URI
- eventMarkerId
number
(required) Example: 30
Headers
Content-Type: application/json
Body
{
"id": 340,
"eventId": 30,
"name": "Backstage",
"time": "2018-08-05T12:30:00+02:00",
"color": "#000000"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": "string"
},
"color": {
"type": "string",
"description": "CSS color"
}
},
"required": [
"id",
"eventId",
"name",
"time",
"color"
]
}
204
Delete event markerDELETE/events/markers/{eventMarkerId}
Example URI
- eventMarkerId
number
(required) Example: 30
204
Calendars ¶
Calendars can be used to restrict AccessTypes further.
List all calendarsGET/calendars
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 210,
"eventId": 30,
"name": "Backstage"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new calendarPOST/calendars
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"eventId": 30,
"name": "Backstage"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"eventId",
"name"
]
}
201
Headers
Content-Type: application/json
Location: /calendars/{calendarId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 210,
"eventId": 30,
"name": "Backstage",
"msgType": "Calendar"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"msgType"
]
}
Deletable day type IDsGET/calendars/deletableIds
Get the IDs of all day types that can be deleted. This does not validate if the user can actually delete the day type.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Calendar ¶
Get calendarGET/calendars/{calenderId}
Example URI
- calenderId
number
(required) Example: 210
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 210,
"eventId": 30,
"name": "Backstage"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name"
]
}
Update calendarPUT/calendars/{calenderId}
The ID in the URL and the body must match.
Example URI
- calenderId
number
(required) Example: 210
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 210,
"eventId": 30,
"name": "Backstage"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name"
]
}
204
Delete calendarDELETE/calendars/{calenderId}
Example URI
- calenderId
number
(required) Example: 210
204
Copy calendar weekPOST/calendars/{calendarId}/copyWeek
Copy day types from one week to all weeks in a period.
Example URI
- calendarId
number
(required) Example: 200
Headers
Content-Type: application/json
Body
{
"sourceYear": 2023,
"sourceWeek": 42,
"periodStartYear": 2024,
"periodStartWeek": 12,
"periodEndYear": 2024,
"periodEndWeek": 42
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"sourceYear": {
"type": "number"
},
"sourceWeek": {
"type": "number"
},
"periodStartYear": {
"type": "number"
},
"periodStartWeek": {
"type": "number"
},
"periodEndYear": {
"type": "number"
},
"periodEndWeek": {
"type": "number"
}
},
"required": [
"sourceYear",
"sourceWeek",
"periodStartYear",
"periodStartWeek",
"periodEndYear",
"periodEndWeek"
]
}
204
Calendar day ¶
List all calendar daysGET/calendars/{calendarId}/days
Example URI
- calendarId
number
(required) Example: 200
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 215,
"calendarId": 210,
"date": "2020-12-24",
"dayTypeId": 200
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new calendar dayPOST/calendars/{calendarId}/days
Example URI
- calendarId
number
(required) Example: 200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"calendarId": 210,
"date": "2020-12-24",
"dayTypeId": 200
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"calendarId": {
"type": "number"
},
"date": {
"type": "string"
},
"dayTypeId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"calendarId",
"date",
"dayTypeId"
]
}
201
Headers
Content-Type: application/json
Location: /calendars/{calendarId}/days/{calendarDayId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 215,
"calendarId": 210,
"date": "2020-12-24",
"dayTypeId": 200,
"msgType": "CalendarDay"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"calendarId": {
"type": "number"
},
"date": {
"type": "string"
},
"dayTypeId": {
"type": "number"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"calendarId",
"date",
"dayTypeId",
"msgType"
]
}
Set day type on a calendar datePUT/calendars/{calendarId}/days
Set the day type of a calendar day by its date. If the dayTypeId i set to 0, then the calendar day is deleted instead.
Example URI
- calendarId
number
(required) Example: 200
Headers
Content-Type: application/json
Body
{
"date": "2020-12-24",
"dayTypeId": 210
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"date": {
"type": "string"
},
"dayTypeId": {
"type": "number"
}
},
"required": [
"date",
"dayTypeId"
]
}
204
Calendar Day ¶
Get calendar dayGET/calendars/{calendarId}/days/{calendarDayId}
Example URI
- calendarId
number
(required) Example: 200- calendarDayId
number
(required) Example: 205
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 215,
"calendarId": 210,
"date": "2020-12-24",
"dayTypeId": 200
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"calendarId": {
"type": "number"
},
"date": {
"type": "string"
},
"dayTypeId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"calendarId",
"date",
"dayTypeId"
]
}
Update calendar dayPUT/calendars/{calendarId}/days/{calendarDayId}
The IDs in the URL and the body must match.
Example URI
- calendarId
number
(required) Example: 200- calendarDayId
number
(required) Example: 205
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 215,
"calendarId": 210,
"date": "2020-12-24",
"dayTypeId": 200
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"calendarId": {
"type": "number"
},
"date": {
"type": "string"
},
"dayTypeId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"calendarId",
"date",
"dayTypeId"
]
}
204
Delete calendar dayDELETE/calendars/{calendarId}/days/{calendarDayId}
Example URI
- calendarId
number
(required) Example: 200- calendarDayId
number
(required) Example: 205
204
Get day type periods for a calendar dayGET/calendars/{calendarId}/days/{calendarDayId}/periods
Note: This will only include the raw DayTypePeriod objects, and not any overwritten period data.
Example URI
- calendarId
number
(required) Example: 200- calendarDayId
number
(required) Example: 205
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 205,
"dayTypeId": 200,
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get day type periods for a dateGET/calendars/{calendarId}/days/{date}/periods
Note: This will only include the raw DayTypePeriod objects, and not any overwritten period data.
Example URI
- calendarId
number
(required) Example: 200- date
string
(required) Example: 2021-01-31
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 205,
"dayTypeId": 200,
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Set day type period values specific for a calendar dayPUT/calendars/{calendarId}/days/{calendarDayId}/periods/{dayTypePeriodId}
Example URI
- calendarId
number
(required) Example: 200- calendarDayId
number
(required) Example: 205- dayTypePeriodId
number
(required) Example: 215
Headers
Content-Type: application/json
Body
{
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"tags": {
"type": "string",
"description": "Comma-separated string of tags"
}
}
}
204
Set day type period values specific for a datePUT/calendars/{calendarId}/days/{date}/periods/{dayTypePeriodId}
Example URI
- calendarId
number
(required) Example: 200- date
string
(required) Example: 2021-01-31- dayTypePeriodId
number
(required) Example: 215
Headers
Content-Type: application/json
Body
{
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"tags": {
"type": "string",
"description": "Comma-separated string of tags"
}
}
}
204
Cancel a day type period specific for a calendar dayPUT/calendars/{calendarId}/days/{calendarDayId}/periods/{dayTypePeriodId}/cancel
This just adds the tag cancelled
to the day type period specific for the calendar day.
Example URI
- calendarId
number
(required) Example: 200- calendarDayId
number
(required) Example: 205- dayTypePeriodId
number
(required) Example: 215
204
Periods ¶
The periods are simply time intervals. They are used to specify when a ticket is valid for entry into a zone.
List all periodsGET/periods{?eventId,name}
Example URI
- eventId
number
(optional) Example: 30- name
string
(optional)
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 80,
"eventId": 30,
"name": "Torsdag",
"startTime": "2018-08-09T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Search for periodsGET/devices/search{?eventId,name,offset,limit}
Search for periods for pagination.
Example URI
- eventId
number
(optional) Example: 10Only find periods for this event
- name
string
(required) Example: 12- (string, optional) - Can do a wildcard search with *. To search for * escape it with *.
- offset
number
(optional) Example: 0- limit
number
(optional) Example: 100
200
Headers
Content-Type: application/json
Body
{
"entities": [
{
"syncId": 999,
"isDeleted": false,
"id": 80,
"eventId": 30,
"name": "Torsdag",
"startTime": "2018-08-09T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00"
}
],
"totalCount": 123
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"entities": {
"type": "array"
},
"totalCount": {
"type": "number",
"description": "The total number of periods matching the search."
}
}
}
Create a new periodPOST/periods
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"eventId": 30,
"name": "Torsdag",
"startTime": "2018-08-09T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"eventId",
"startTime",
"endTime"
]
}
201
Headers
Content-Type: application/json
Location: /periods/{periodId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 80,
"eventId": 30,
"name": "Torsdag",
"startTime": "2018-08-09T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00",
"msgType": "Period"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"startTime",
"endTime",
"msgType"
]
}
Deletable period IDsGET/periods/deletableIds
Get the IDs of all periods that can be deleted. This does not validate if the user can actually delete the period.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Period ¶
Get periodGET/periods/{periodId}
Example URI
- periodId
number
(required) Example: 80
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 80,
"eventId": 30,
"name": "Torsdag",
"startTime": "2018-08-09T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"startTime",
"endTime"
]
}
Update periodPUT/periods/{periodId}
The ID in the URL and the body must match.
Example URI
- periodId
number
(required) Example: 80
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 80,
"eventId": 30,
"name": "Torsdag",
"startTime": "2018-08-09T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"startTime",
"endTime"
]
}
204
Delete periodDELETE/periods/{periodId}
Example URI
- periodId
number
(required) Example: 80
204
Access types ¶
The access types are the different types of access that the tickets have. Often there is a strict relation between the tickets sold to an event and the access types.
The name is not parsed in any way. Zone access for specifik periods are explicitely added to each access type.
Examples:
-
“VIP - all days”
The access type for a VIP ticket valid all days.
-
“Artist - Saturday”
The access type for an artist performing Saturday.
-
“Backstage pass upgrade”
An extra access that the customer has bought or been given.
List all access typesGET/accessTypes{?eventId,name,allowDeleted}
Example URI
- eventId
number
(optional) Example: 30- name
string
(optional)- allowDeleted
boolean
(optional) Example: 1Find the access types, even if they are deleted
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210,
"stockUsed": 109,
"stockFree": 84,
"zonePeriods": {
"syncId": 999,
"isDeleted": false,
"id": 160,
"zoneId": 40,
"periodId": 80,
"accessTypeId": 90,
"grantedTime": "2019-01-01T05:00:00+02:00",
"revokedTime": "Hello, world!"
}
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Search for access typesGET/accessTypes/search{?eventId,name,offset,limit}
Search for access types for pagination.
Example URI
- eventId
number
(optional) Example: 10Only find access types for this event
- name
string
(required) Example: 12- (string, optional) - Can do a wildcard search with *. To search for * escape it with *.
- offset
number
(optional) Example: 0- limit
number
(optional) Example: 100
200
Headers
Content-Type: application/json
Body
{
"entities": [
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210,
"stockUsed": 109,
"stockFree": 84,
"zonePeriods": {
"syncId": 999,
"isDeleted": false,
"id": 160,
"zoneId": 40,
"periodId": 80,
"accessTypeId": 90,
"grantedTime": "2019-01-01T05:00:00+02:00",
"revokedTime": "Hello, world!"
}
}
],
"totalCount": 123
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"entities": {
"type": "array"
},
"totalCount": {
"type": "number",
"description": "The total number of access types matching the search."
}
}
}
Create a new access typePOST/accessTypes
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"feedbackId": {
"type": "number",
"description": "The type of feedback given when access is granted."
},
"priority": {
"type": "number",
"description": "Priority of access types if multiple give access (higher means more important)."
},
"addOnTicketCreation": {
"type": "boolean",
"description": "Should this access type be added to all tickets when they are created?"
},
"requireProfileImage": {
"type": "boolean",
"description": "Does this access type require tickets to have a profile image URL?"
},
"updateZonePopulations": {
"type": "boolean",
"description": "Should the zone populations be updated when access has been granted? Default is true."
},
"ignoreMaxPopulation": {
"type": "boolean",
"description": "Can this access type enter a zone even if its max population has been reached?"
},
"forceDirection": {
"type": "string",
"enum": [
"in",
"out",
"reverse"
],
"description": "Force open turnstiles in this direction, instead of their current direction."
},
"stock": {
"type": "number",
"description": "How many tickets can have this access type? -1 for unlimited."
},
"maxMultiplier": {
"type": "number",
"description": "The max of the multiplier on a scan when this access type is used. 0 for unlimited."
},
"maxUsages": {
"type": "number",
"description": "The number of times the ticket is valid for this access. 0 for no limit. See maxUsagesType."
},
"maxUsagesType": {
"type": "string",
"enum": [
"event",
"period",
"zone",
"day",
"week",
"month"
],
"description": "If maxUsages is set, this value defines the interval for which the limit is enforced."
},
"usageUnitId": {
"type": "number"
},
"waitingPeriod": {
"type": "number",
"description": "Seconds after a successful scanning before a ticket can be scanned again (by the same device)."
},
"allowMultiplePendingScannings": {
"type": "boolean",
"description": "Allow multiple skannings of this access before an entry is registered, e.g. for tour pass that can be used for multiple people."
},
"calendarId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"eventId",
"name",
"feedbackId",
"priority",
"maxMultiplier",
"maxUsages",
"maxUsagesType"
]
}
201
Headers
Content-Type: application/json
Location: /accessTypes/{accessTypeId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210,
"msgType": "AccessType"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"feedbackId": {
"type": "number",
"description": "The type of feedback given when access is granted."
},
"priority": {
"type": "number",
"description": "Priority of access types if multiple give access (higher means more important)."
},
"addOnTicketCreation": {
"type": "boolean",
"description": "Should this access type be added to all tickets when they are created?"
},
"requireProfileImage": {
"type": "boolean",
"description": "Does this access type require tickets to have a profile image URL?"
},
"updateZonePopulations": {
"type": "boolean",
"description": "Should the zone populations be updated when access has been granted? Default is true."
},
"ignoreMaxPopulation": {
"type": "boolean",
"description": "Can this access type enter a zone even if its max population has been reached?"
},
"forceDirection": {
"type": "string",
"enum": [
"in",
"out",
"reverse"
],
"description": "Force open turnstiles in this direction, instead of their current direction."
},
"stock": {
"type": "number",
"description": "How many tickets can have this access type? -1 for unlimited."
},
"maxMultiplier": {
"type": "number",
"description": "The max of the multiplier on a scan when this access type is used. 0 for unlimited."
},
"maxUsages": {
"type": "number",
"description": "The number of times the ticket is valid for this access. 0 for no limit. See maxUsagesType."
},
"maxUsagesType": {
"type": "string",
"enum": [
"event",
"period",
"zone",
"day",
"week",
"month"
],
"description": "If maxUsages is set, this value defines the interval for which the limit is enforced."
},
"usageUnitId": {
"type": "number"
},
"waitingPeriod": {
"type": "number",
"description": "Seconds after a successful scanning before a ticket can be scanned again (by the same device)."
},
"allowMultiplePendingScannings": {
"type": "boolean",
"description": "Allow multiple skannings of this access before an entry is registered, e.g. for tour pass that can be used for multiple people."
},
"calendarId": {
"type": "number"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"feedbackId",
"priority",
"maxMultiplier",
"maxUsages",
"maxUsagesType",
"msgType"
]
}
Deletable access type IDsGET/accessTypes/deletableIds
Get the IDs of all access types that can be deleted. This does not validate if the user can actually delete the access type.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Access type ¶
Get access typeGET/accessTypes/{accessTypeId}
Example URI
- accessTypeId
number
(required) Example: 90
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"feedbackId": {
"type": "number",
"description": "The type of feedback given when access is granted."
},
"priority": {
"type": "number",
"description": "Priority of access types if multiple give access (higher means more important)."
},
"addOnTicketCreation": {
"type": "boolean",
"description": "Should this access type be added to all tickets when they are created?"
},
"requireProfileImage": {
"type": "boolean",
"description": "Does this access type require tickets to have a profile image URL?"
},
"updateZonePopulations": {
"type": "boolean",
"description": "Should the zone populations be updated when access has been granted? Default is true."
},
"ignoreMaxPopulation": {
"type": "boolean",
"description": "Can this access type enter a zone even if its max population has been reached?"
},
"forceDirection": {
"type": "string",
"enum": [
"in",
"out",
"reverse"
],
"description": "Force open turnstiles in this direction, instead of their current direction."
},
"stock": {
"type": "number",
"description": "How many tickets can have this access type? -1 for unlimited."
},
"maxMultiplier": {
"type": "number",
"description": "The max of the multiplier on a scan when this access type is used. 0 for unlimited."
},
"maxUsages": {
"type": "number",
"description": "The number of times the ticket is valid for this access. 0 for no limit. See maxUsagesType."
},
"maxUsagesType": {
"type": "string",
"enum": [
"event",
"period",
"zone",
"day",
"week",
"month"
],
"description": "If maxUsages is set, this value defines the interval for which the limit is enforced."
},
"usageUnitId": {
"type": "number"
},
"waitingPeriod": {
"type": "number",
"description": "Seconds after a successful scanning before a ticket can be scanned again (by the same device)."
},
"allowMultiplePendingScannings": {
"type": "boolean",
"description": "Allow multiple skannings of this access before an entry is registered, e.g. for tour pass that can be used for multiple people."
},
"calendarId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"feedbackId",
"priority",
"maxMultiplier",
"maxUsages",
"maxUsagesType"
]
}
Update access typePUT/accessTypes/{accessTypeId}
The ID in the URL and the body must match.
Example URI
- accessTypeId
number
(required) Example: 90
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"feedbackId": {
"type": "number",
"description": "The type of feedback given when access is granted."
},
"priority": {
"type": "number",
"description": "Priority of access types if multiple give access (higher means more important)."
},
"addOnTicketCreation": {
"type": "boolean",
"description": "Should this access type be added to all tickets when they are created?"
},
"requireProfileImage": {
"type": "boolean",
"description": "Does this access type require tickets to have a profile image URL?"
},
"updateZonePopulations": {
"type": "boolean",
"description": "Should the zone populations be updated when access has been granted? Default is true."
},
"ignoreMaxPopulation": {
"type": "boolean",
"description": "Can this access type enter a zone even if its max population has been reached?"
},
"forceDirection": {
"type": "string",
"enum": [
"in",
"out",
"reverse"
],
"description": "Force open turnstiles in this direction, instead of their current direction."
},
"stock": {
"type": "number",
"description": "How many tickets can have this access type? -1 for unlimited."
},
"maxMultiplier": {
"type": "number",
"description": "The max of the multiplier on a scan when this access type is used. 0 for unlimited."
},
"maxUsages": {
"type": "number",
"description": "The number of times the ticket is valid for this access. 0 for no limit. See maxUsagesType."
},
"maxUsagesType": {
"type": "string",
"enum": [
"event",
"period",
"zone",
"day",
"week",
"month"
],
"description": "If maxUsages is set, this value defines the interval for which the limit is enforced."
},
"usageUnitId": {
"type": "number"
},
"waitingPeriod": {
"type": "number",
"description": "Seconds after a successful scanning before a ticket can be scanned again (by the same device)."
},
"allowMultiplePendingScannings": {
"type": "boolean",
"description": "Allow multiple skannings of this access before an entry is registered, e.g. for tour pass that can be used for multiple people."
},
"calendarId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"feedbackId",
"priority",
"maxMultiplier",
"maxUsages",
"maxUsagesType"
]
}
204
Delete access typeDELETE/accessTypes/{accessTypeId}
Example URI
- accessTypeId
number
(required) Example: 90
204
Access type zone periods ¶
Defines which zone/period combinations the access type is valid for.
List all zone/period relationsGET/accessTypes/{accessTypeId}/zonePeriods
Example URI
- accessTypeId
number
(required) Example: 90
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 160,
"zoneId": 40,
"periodId": 80,
"accessTypeId": 90,
"grantedTime": "2019-01-01T05:00:00+02:00",
"revokedTime": "Hello, world!"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Add a new zone/period relationPOST/accessTypes/{accessTypeId}/zonePeriods
Example URI
- accessTypeId
number
(required) Example: 90
Headers
Content-Type: application/json
Body
{
"zoneId": 40,
"periodId": 80,
"id": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"zoneId": {
"type": "number"
},
"periodId": {
"type": "number"
},
"id": {
"type": [
"number",
"null"
]
}
},
"required": [
"zoneId",
"periodId"
]
}
201
Headers
Content-Type: application/json
Location: /accessTypes/{accessTypeId}/zonePeriods/{zonePeriodId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 160,
"zoneId": 40,
"periodId": 80,
"accessTypeId": 90,
"grantedTime": "2019-01-01T05:00:00+02:00",
"revokedTime": "Hello, world!",
"msgType": "Zone2Period2AccessType"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"periodId": {
"type": [
"number",
"null"
]
},
"accessTypeId": {
"type": "number"
},
"grantedTime": {
"type": "string"
},
"revokedTime": {
"type": [
"string",
"null"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"accessTypeId",
"grantedTime",
"msgType"
]
}
Access type zone period ¶
Get zone/period relationGET/accessTypes/{accessTypeId}/zonePeriods/{zonePeriodId}
Example URI
- accessTypeId
number
(required) Example: 90- zonePeriodId
number
(required) Example: 130
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 160,
"zoneId": 40,
"periodId": 80,
"accessTypeId": 90,
"grantedTime": "2019-01-01T05:00:00+02:00",
"revokedTime": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"periodId": {
"type": [
"number",
"null"
]
},
"accessTypeId": {
"type": "number"
},
"grantedTime": {
"type": "string"
},
"revokedTime": {
"type": [
"string",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"accessTypeId",
"grantedTime"
]
}
Delete zone/period relationDELETE/accessTypes/{accessTypeId}/zonePeriods/{zonePeriodId}
Example URI
- accessTypeId
number
(required) Example: 90- zonePeriodId
number
(required) Example: 130
204
Tickets ¶
This endpoint represent the tickets bought by the customers or perhaps a privilege granted to an employee or volunteer.
The actual token values that are scanned (barcodes, RFID tag UIDs etc) are not part of the ticket record, but added as tokens to the ticket.
Adding a ticket with token(s) to the system only makes the ticket known. To actually grant access, one or more access types must be added to the ticket.
List all ticketsGET/tickets{?eventId,offset,limit}
Example URI
- eventId
number
(required) Example: 30- offset
number
(optional) Example: 0Not implemented
- limit
number
(optional) Example: 100Not implemented
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"currentZoneId": 40,
"accessTypes": [
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
],
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create new ticket(s) (public)POST/tickets
To create multiple tickets in one call you should pass an array of NewTicketWithAccessTypes.
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
In this case the eventUuid property should be used instead of eventId.
When eventUuid is used then a NewTicketWithTokens object should be used instead, meaning the accessTypeIds property is not allowed.
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"eventUuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": null,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
],
"accessTypeIds": []
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": [
"string",
"null"
]
},
"eventId": {
"type": [
"number",
"null"
]
},
"source": {
"type": "string",
"description": "Required if externalId is given."
},
"externalId": {
"type": "string",
"description": "Eg digital_product_id if a ticket from shop.smukfest.dk."
},
"externalGroup": {
"type": "string"
},
"externalData": {
"type": "string",
"description": "JSON is recommended"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"languageCode": {
"type": "string",
"description": "The preferred language to show when this ticket is used (currently only da, en, and de is available."
},
"profileImageUrl": {
"type": "string",
"description": "URL to a profile image"
},
"name": {
"type": "string",
"description": "Name on the ticket"
},
"productName": {
"type": "string",
"description": "Name of the product that generated the ticket"
},
"eventUuid": {
"type": [
"string",
"null"
]
},
"tokens": {
"type": [
"array",
"null"
]
},
"accessTypeIds": {
"type": [
"array",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"eventId",
"isValid",
"eventUuid"
]
}
201
Headers
Content-Type: application/json
Location: /tickets/{ticketId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"source": {
"type": "string",
"description": "Required if externalId is given."
},
"externalId": {
"type": "string",
"description": "Eg digital_product_id if a ticket from shop.smukfest.dk."
},
"externalGroup": {
"type": "string"
},
"externalData": {
"type": "string",
"description": "JSON is recommended"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"languageCode": {
"type": "string",
"description": "The preferred language to show when this ticket is used (currently only da, en, and de is available."
},
"profileImageUrl": {
"type": "string",
"description": "URL to a profile image"
},
"name": {
"type": "string",
"description": "Name on the ticket"
},
"productName": {
"type": "string",
"description": "Name of the product that generated the ticket"
},
"tokens": {
"type": "array"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"isValid"
]
}
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"eventUuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": null,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": [
"string",
"null"
]
},
"eventId": {
"type": [
"number",
"null"
]
},
"source": {
"type": "string",
"description": "Required if externalId is given."
},
"externalId": {
"type": "string",
"description": "Eg digital_product_id if a ticket from shop.smukfest.dk."
},
"externalGroup": {
"type": "string"
},
"externalData": {
"type": "string",
"description": "JSON is recommended"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"languageCode": {
"type": "string",
"description": "The preferred language to show when this ticket is used (currently only da, en, and de is available."
},
"profileImageUrl": {
"type": "string",
"description": "URL to a profile image"
},
"name": {
"type": "string",
"description": "Name on the ticket"
},
"productName": {
"type": "string",
"description": "Name of the product that generated the ticket"
},
"eventUuid": {
"type": [
"string",
"null"
]
},
"tokens": {
"type": [
"array",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"eventId",
"isValid",
"eventUuid"
]
}
201
Headers
Content-Type: application/json
Location: /tickets/{ticketId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"source": {
"type": "string",
"description": "Required if externalId is given."
},
"externalId": {
"type": "string",
"description": "Eg digital_product_id if a ticket from shop.smukfest.dk."
},
"externalGroup": {
"type": "string"
},
"externalData": {
"type": "string",
"description": "JSON is recommended"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"languageCode": {
"type": "string",
"description": "The preferred language to show when this ticket is used (currently only da, en, and de is available."
},
"profileImageUrl": {
"type": "string",
"description": "URL to a profile image"
},
"name": {
"type": "string",
"description": "Name on the ticket"
},
"productName": {
"type": "string",
"description": "Name of the product that generated the ticket"
},
"tokens": {
"type": "array"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"isValid"
]
}
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"eventUuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": null,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
],
"accessTypeIds": []
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Headers
Content-Type: application/json
Body
{
"tickets": [
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"eventUuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": null,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
],
"accessTypeIds": []
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"tickets": {
"type": "array"
},
"ignoreIfExists": {
"type": "boolean",
"description": "If set to true and token already exists, the token is excluded from the import. If ticket has no tokens for update, ticket will be ignored as well."
}
},
"required": [
"tickets"
]
}
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
with already used name
400
Headers
Content-Type: application/json
Body
{
"error": "The name is already in use",
"errorCode": 1006
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
with invalid name
400
Headers
Content-Type: application/json
Body
{
"error": "The name contains invalid terms",
"errorCode": 1007
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
Search for ticketsGET/tickets/search{?eventId,ticketSource,ticketExternalId,ticketExternalIdTo,ticketStatus,tokenValue,tokenStatus,oneOfATIds,allOfATIds,offset,limit}
Search for tickets for a single event.
Example URI
- eventId
number
(required) Example: 30- ticketSource
string
(optional) Example: 'shop.smukfest.dk'- ticketExternalId
string
(optional) Example: '12345'Can do a wildcard search with *, unless ticketExternalIdTo is given. To search for * escape it with *.
- ticketExternalIdTo
string
(optional) Example: ''If given a range search ticketExternalId…ticketExternalIdTo is performed.
- ticketStatus
bool
(optional) Example: 11 for active tickets only, 0 for inactive tickets only, not specified for all tickets.
- tokenValue
string
(optional) Example: 04E56FFAE65380Can do a wildcard search with *. To search for * escape it with *.
- tokenStatus
enum
(optional) Example: blockedChoices:
known
active
blocked
- oneOfATIds
array[number]
(optional) Example: [90,91]AccessType IDs - tickets must have at least one of these.
- allOfATIds
array[number]
(optional) Example: [92,93]AccessType IDs - tickets must have all these.
- offset
number
(optional) Example: 0- limit
number
(optional) Example: 100
200
Headers
Content-Type: application/json
Body
{
"entities": [
{
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"currentZoneId": 40,
"accessTypes": [
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
],
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
],
"totalCount": 123
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"entities": {
"type": "array"
},
"totalCount": {
"type": "number",
"description": "The total number of tickets matching the search."
}
}
}
Update multiple ticketsPUT/tickets/multiUpdate
Make updates to multiple tickets at once.
Example URI
Headers
Content-Type: application/json
Body
{
"searchParams": {
"eventId": 1,
"ticketIds": [
1
],
"ticketSource": "Hello, world!",
"ticketExternalId": "Hello, world!",
"ticketExternalIdTo": "Hello, world!",
"tokenValue": "Hello, world!",
"tokenStatus": "known",
"oneOfATIds": [
1
],
"allOfATIds": [
1
]
},
"addAccessTypeIds": [
1
],
"removeAccessTypeIds": [
1
],
"setIsValid": true,
"setValidStartTime": "Hello, world!",
"setValidEndTime": "Hello, world!",
"setTokenStatus": "known"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"searchParams": {
"type": "object",
"properties": {
"eventId": {
"type": "number"
},
"ticketIds": {
"type": [
"array",
"null"
],
"description": "If specified, the rest of the search parameters are ignored."
},
"ticketSource": {
"type": [
"string",
"null"
]
},
"ticketExternalId": {
"type": [
"string",
"null"
]
},
"ticketExternalIdTo": {
"type": [
"string",
"null"
],
"description": "If given a range search ticketExternalId..ticketExternalIdTo is performed."
},
"tokenValue": {
"type": [
"string",
"null"
]
},
"tokenStatus": {
"type": [
"string",
"null"
],
"enum": [
"known",
"active",
"blocked",
null
]
},
"oneOfATIds": {
"type": [
"array",
"null"
],
"description": "AccessType IDs - tickets must have at least one of these."
},
"allOfATIds": {
"type": [
"array",
"null"
],
"description": "AccessType IDs - tickets must have all these."
}
},
"required": [
"eventId"
]
},
"addAccessTypeIds": {
"type": [
"array",
"null"
]
},
"removeAccessTypeIds": {
"type": [
"array",
"null"
]
},
"setIsValid": {
"type": [
"boolean",
"null"
]
},
"setValidStartTime": {
"type": [
"string",
"null"
]
},
"setValidEndTime": {
"type": [
"string",
"null"
]
},
"setTokenStatus": {
"type": [
"string",
"null"
],
"enum": [
"known",
"active",
"blocked",
null
]
}
},
"required": [
"searchParams"
]
}
204
Validate ticket name (public)GET/tickets/validateName{?name,eventId,eventUuid,ticketId,ticketUuid}
If eventId or eventUuid is not specified, then ticketId or ticketUuid must be (so the event can be found from that).
Example URI
- name
string
(required) Example: Malcolm ReynoldsThe name to check
- eventId
number
(optional) Example: 30The event to check inside
- eventUuid
string
(optional) Example: 8e305cde-c75a-11eb-a0a9-0242c0a83002The event to check inside
- ticketId
number
(optional) Example: 100The ticket, that is allowed to already have that name
- ticketUuid
string
(required) Example: 735e3699-c75a-11eb-a0a9-0242c0a83002The ticket, that is allowed to already have that name
204
with empty or missing name
400
Headers
Content-Type: application/json
Body
{
"error": "A property is empty",
"errorCode": 1003
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
without eventId or ticketId
400
Headers
Content-Type: application/json
Body
{
"error": "A property must be specified",
"errorCode": 1002
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
with already used name
400
Headers
Content-Type: application/json
Body
{
"error": "The name is already in use",
"errorCode": 1006
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
with invalid name
400
Headers
Content-Type: application/json
Body
{
"error": "The name contains invalid terms",
"errorCode": 1007
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
Ticket ¶
Get ticketGET/tickets/{ticketId}{?allowDeleted}
Example URI
- ticketId
number
(required) Example: 100- allowDeleted
boolean
(optional) Example: 1Find the ticket, even if it is deleted
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"currentZoneId": 40,
"accessTypes": [
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
],
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"source": {
"type": "string",
"description": "Required if externalId is given."
},
"externalId": {
"type": "string",
"description": "Eg digital_product_id if a ticket from shop.smukfest.dk."
},
"externalGroup": {
"type": "string"
},
"externalData": {
"type": "string",
"description": "JSON is recommended"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"languageCode": {
"type": "string",
"description": "The preferred language to show when this ticket is used (currently only da, en, and de is available."
},
"profileImageUrl": {
"type": "string",
"description": "URL to a profile image"
},
"name": {
"type": "string",
"description": "Name on the ticket"
},
"productName": {
"type": "string",
"description": "Name of the product that generated the ticket"
},
"currentZoneId": {
"type": "number",
"description": "NULL if unknown. Which zone was the ticket last seen in?"
},
"accessTypes": {
"type": [
"array",
"null"
]
},
"tokens": {
"type": [
"array",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"isValid"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Ticket not found.",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Update ticketPUT/tickets/{ticketId}
The ID in the URL and the body must match.
If tokens is NULL, the ticket’s tokens are left unchanged. Otherwise the ticket’s list of tokens are updated to match the supplied array. This includes the special case “empty array” where all the ticket’s existing tokens are deleted. Same goes for the tickets access types.
Example URI
- ticketId
number
(required) Example: 100
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"eventUuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": null,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
],
"accessTypeIds": []
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": [
"string",
"null"
]
},
"eventId": {
"type": [
"number",
"null"
]
},
"source": {
"type": "string",
"description": "Required if externalId is given."
},
"externalId": {
"type": "string",
"description": "Eg digital_product_id if a ticket from shop.smukfest.dk."
},
"externalGroup": {
"type": "string"
},
"externalData": {
"type": "string",
"description": "JSON is recommended"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"languageCode": {
"type": "string",
"description": "The preferred language to show when this ticket is used (currently only da, en, and de is available."
},
"profileImageUrl": {
"type": "string",
"description": "URL to a profile image"
},
"name": {
"type": "string",
"description": "Name on the ticket"
},
"productName": {
"type": "string",
"description": "Name of the product that generated the ticket"
},
"eventUuid": {
"type": [
"string",
"null"
]
},
"tokens": {
"type": [
"array",
"null"
]
},
"accessTypeIds": {
"type": [
"array",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"eventId",
"isValid",
"eventUuid"
]
}
204
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
with already used name
400
Headers
Content-Type: application/json
Body
{
"error": "The name is already in use",
"errorCode": 1006
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
with invalid name
400
Headers
Content-Type: application/json
Body
{
"error": "The name contains invalid terms",
"errorCode": 1007
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
Update ticketPUT/tickets/{ticketUuid}
If tokens is NULL, the ticket’s tokens are left unchanged. Otherwise the ticket’s list of tokens are updated to match the supplied array. This includes the special case “empty array” where all the ticket’s existing tokens are deleted.
Example URI
- ticketUuid
string
(required) Example: 735e3699-c75a-11eb-a0a9-0242c0a83002
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"eventUuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": null,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": [
"string",
"null"
]
},
"eventId": {
"type": [
"number",
"null"
]
},
"source": {
"type": "string",
"description": "Required if externalId is given."
},
"externalId": {
"type": "string",
"description": "Eg digital_product_id if a ticket from shop.smukfest.dk."
},
"externalGroup": {
"type": "string"
},
"externalData": {
"type": "string",
"description": "JSON is recommended"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"languageCode": {
"type": "string",
"description": "The preferred language to show when this ticket is used (currently only da, en, and de is available."
},
"profileImageUrl": {
"type": "string",
"description": "URL to a profile image"
},
"name": {
"type": "string",
"description": "Name on the ticket"
},
"productName": {
"type": "string",
"description": "Name of the product that generated the ticket"
},
"eventUuid": {
"type": [
"string",
"null"
]
},
"tokens": {
"type": [
"array",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"eventId",
"isValid",
"eventUuid"
]
}
204
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
with already used name
400
Headers
Content-Type: application/json
Body
{
"error": "The name is already in use",
"errorCode": 1006
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
with invalid name
400
Headers
Content-Type: application/json
Body
{
"error": "The name contains invalid terms",
"errorCode": 1007
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
Delete ticketDELETE/tickets/{ticketId}
Example URI
- ticketId
number
(required) Example: 100
204
Ticket log entriesGET/tickets/{ticketId}/log
Example URI
- ticketId
number
(required) Example: 100
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"ticketId": 100
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Ticket access types ¶
Get acccess types for ticketGET/tickets/{ticketId}/accessTypes
Example URI
- ticketId
number
(required) Example: 100
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
404
Headers
Content-Type: application/json
Body
{
"error": "Ticket not found.",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Set access types for ticketPUT/tickets/{ticketId}/accessTypes
The ticket’s list of access types are updated to match the supplied array of ids. This includes the special case “empty array” where all the ticket’s existing access types are deleted.
Example URI
- ticketId
number
(required) Example: 100
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
204
Ticket access type ¶
Remove access type from ticketDELETE/tickets/{ticketId}/accessTypes/{accessTypeId}
Remove single access type from ticket.
Example URI
- ticketId
number
(required) Example: 100- accessTypeId
number
(required) Example: 90
204
Add access type to ticketPOST/tickets/{ticketId}/accessTypes/{accessTypeId}
Add single access type to ticket.
Example URI
- ticketId
number
(required) Example: 100- accessTypeId
number
(required) Example: 90
204
Tokens ¶
List all tokensGET/tokens{?eventId,tokenTypeId,ticketId}
At least one of the parameters eventId
or ticketId
must be supplied.
Example URI
- eventId
number
(optional) Example: 30- ticketId
number
(optional) Example: 100- tokenTypeId
number
(optional) Example: 110
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
400
Headers
Content-Type: application/json
Body
{
"error": "Neither eventId nor ticketId specified.",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Create a new tokenPOST/tokens
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"tokenTypeId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"externalId": {
"type": "string",
"description": "Eg card_number_id for a season card from VM shop."
},
"externalType": {
"type": "string"
},
"value": {
"type": "string"
},
"class": {
"type": "string",
"enum": [
"normal",
"issue"
],
"description": "If not specified a 'normal' token is created."
},
"status": {
"type": "string",
"enum": [
"known",
"active",
"blocked"
]
},
"validStartTime": {
"type": "string",
"description": "The token is valid from this time. Null means since the beginning of time."
},
"validEndTime": {
"type": "string",
"description": "The token is valid until this time. Null means forever."
},
"blockAfterUseCount": {
"type": "number",
"description": "Change status to blocked after the token has been granted access this many times. 0 to never automatically block token"
}
},
"required": [
"syncId",
"isDeleted",
"tokenTypeId",
"ticketId",
"value",
"status",
"blockAfterUseCount"
]
}
201
Headers
Content-Type: application/json
Location: /tokens/{tokenId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1,
"msgType": "Token"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"tokenTypeId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"externalId": {
"type": "string",
"description": "Eg card_number_id for a season card from VM shop."
},
"externalType": {
"type": "string"
},
"value": {
"type": "string"
},
"class": {
"type": "string",
"enum": [
"normal",
"issue"
]
},
"status": {
"type": "string",
"enum": [
"known",
"active",
"blocked"
]
},
"validStartTime": {
"type": "string",
"description": "The token is valid from this time. Null means since the beginning of time."
},
"validEndTime": {
"type": "string",
"description": "The token is valid until this time. Null means forever."
},
"blockAfterUseCount": {
"type": "number",
"description": "Change status to blocked after the token has been granted access this many times. 0 to never automatically block token"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"tokenTypeId",
"ticketId",
"value",
"class",
"status",
"blockAfterUseCount",
"msgType"
]
}
Token ¶
Get tokenGET/tokens/{tokenId}{?allowDeleted}
Example URI
- tokenId
number
(required) Example: 120- allowDeleted
boolean
(optional) Example: 1Find the token, even if it is deleted
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"tokenTypeId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"externalId": {
"type": "string",
"description": "Eg card_number_id for a season card from VM shop."
},
"externalType": {
"type": "string"
},
"value": {
"type": "string"
},
"class": {
"type": "string",
"enum": [
"normal",
"issue"
]
},
"status": {
"type": "string",
"enum": [
"known",
"active",
"blocked"
]
},
"validStartTime": {
"type": "string",
"description": "The token is valid from this time. Null means since the beginning of time."
},
"validEndTime": {
"type": "string",
"description": "The token is valid until this time. Null means forever."
},
"blockAfterUseCount": {
"type": "number",
"description": "Change status to blocked after the token has been granted access this many times. 0 to never automatically block token"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"tokenTypeId",
"ticketId",
"value",
"class",
"status",
"blockAfterUseCount"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Token not found.",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Update tokenPUT/tokens/{tokenId}
The ID in the URL and the body must match.
Example URI
- tokenId
number
(required) Example: 120
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"tokenTypeId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"externalId": {
"type": "string",
"description": "Eg card_number_id for a season card from VM shop."
},
"externalType": {
"type": "string"
},
"value": {
"type": "string"
},
"class": {
"type": "string",
"enum": [
"normal",
"issue"
]
},
"status": {
"type": "string",
"enum": [
"known",
"active",
"blocked"
]
},
"validStartTime": {
"type": "string",
"description": "The token is valid from this time. Null means since the beginning of time."
},
"validEndTime": {
"type": "string",
"description": "The token is valid until this time. Null means forever."
},
"blockAfterUseCount": {
"type": "number",
"description": "Change status to blocked after the token has been granted access this many times. 0 to never automatically block token"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"tokenTypeId",
"ticketId",
"value",
"class",
"status",
"blockAfterUseCount"
]
}
204
Delete tokenDELETE/tokens/{tokenId}
Example URI
- tokenId
number
(required) Example: 120
204
Token log entriesGET/tokens/{tokenId}/log
Example URI
- tokenId
number
(required) Example: 120
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"tokenId": 120
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Token by value ¶
This endpoint allows access to a token where you know the type and value, but not the token ID.
NOTE: If the token contains any “/” then it has to be base 64 encoded and base64/
must be prepended, e.g. /tokens/values/QR+Code/base64/aHR0cHM6Ly9zbXVrc2hvcC5kay90b2tlbi8xMjM0NTY3OA==
This is the case for all /tokens/value/
end-points.
Get token by valueGET/tokens/value/{tokenTypeName}/{tokenValue}
Example URI
- tokenTypeName
string
(required) Example: NFC UID- tokenValue
string
(required) Example: 04E56FFAE65380
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"tokenTypeId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"externalId": {
"type": "string",
"description": "Eg card_number_id for a season card from VM shop."
},
"externalType": {
"type": "string"
},
"value": {
"type": "string"
},
"class": {
"type": "string",
"enum": [
"normal",
"issue"
]
},
"status": {
"type": "string",
"enum": [
"known",
"active",
"blocked"
]
},
"validStartTime": {
"type": "string",
"description": "The token is valid from this time. Null means since the beginning of time."
},
"validEndTime": {
"type": "string",
"description": "The token is valid until this time. Null means forever."
},
"blockAfterUseCount": {
"type": "number",
"description": "Change status to blocked after the token has been granted access this many times. 0 to never automatically block token"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"tokenTypeId",
"ticketId",
"value",
"class",
"status",
"blockAfterUseCount"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Token not found.",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Token by value access types ¶
Get access types for tokenGET/tokens/value/{tokenTypeName}/{tokenValue}/accessTypes
Returns the access types for the token’s ticket.
Example URI
- tokenTypeName
string
(required) Example: NFC UID- tokenValue
string
(required) Example: 04E56FFAE65380
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
404
Headers
Content-Type: application/json
Body
{
"error": "Token not found by type and value.",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Set access types for tokenPUT/tokens/value/{tokenTypeName}/{tokenValue}/accessTypes
The list of access types of the token’s ticket is updated to match the supplied array of ids. This includes the special case “empty array” where all the ticket’s existing access types are deleted.
Example URI
- tokenTypeName
string
(required) Example: NFC UID- tokenValue
string
(required) Example: 04E56FFAE65380
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
204
404
Headers
Content-Type: application/json
Body
{
"error": "Token not found by type and value.",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Token by value access type ¶
Remove access type from ticketDELETE/tokens/value/{tokenTypeName}/{tokenValue}/accessTypes/{accessTypeId}
Remove single access type from ticket.
Example URI
- tokenTypeName
string
(required) Example: NFC UID- tokenValue
string
(required) Example: 04E56FFAE65380- accessTypeId
number
(required) Example: 90
204
Add access type to ticketPOST/tokens/value/{tokenTypeName}/{tokenValue}/accessTypes/{accessTypeId}
Add single access type to ticket.
Example URI
- tokenTypeName
string
(required) Example: NFC UID- tokenValue
string
(required) Example: 04E56FFAE65380- accessTypeId
number
(required) Example: 90
204
Token scans ¶
Get scannings for token within periodGET/tokens/value/{tokenTypeName}/{tokenValue}/scans?from={fromDate}&to={toDate}
Example URI
- tokenTypeName
string
(required) Example: NFC UID- tokenValue
string
(required) Example: 04E56FFAE65380- fromDate
string
(required) Example: 2019-01-01T05:00:00+02:00- toDate
string
(optional) Example: 2019-01-01T05:00:00+02:00
200
Headers
Content-Type: application/json
Body
[
{
"id": 111,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": null,
"tokenValue": null,
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 0,
"usageUnitCount": 1,
"multiplier": 1,
"paymentData": null,
"insertTime": "2018-08-05T12:30:00+02:00",
"innerZoneId": 82,
"outerZoneId": 83
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
404
Headers
Content-Type: application/json
Body
{
"error": "Token not found by type and value.",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Token status ¶
Update token statusPUT/tokens/value/{tokenTypeName}/{tokenValue}/setStatus/{status}
Example URI
- tokenTypeName
string
(required) Example: NFC UID- tokenValue
string
(required) Example: 04E56FFAE65380- status
enum
(required)Choices:
known
active
blocked
204
Virtual Queues ¶
Virtual Queue Groups ¶
Virtual queue groups are used for setting rules on a group of virtual queues.
List all virtual queue groupsGET/virtualQueueGroups
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 220,
"name": "Attractions",
"ticketMaxActiveCoupons": 1
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new virtual queue groupPOST/virtualQueueGroups
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"name": "Attractions",
"ticketMaxActiveCoupons": 1,
"uuid": null
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"ticketMaxActiveCoupons": {
"type": "number",
"description": "How many active coupons a ticket can be in for all virtual queues in this group"
},
"uuid": {
"type": [
"string",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"name",
"ticketMaxActiveCoupons"
]
}
201
Headers
Content-Type: application/json
Location: /virtualQueueGroups/{virtualQueueGroupId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 220,
"name": "Attractions",
"ticketMaxActiveCoupons": 1,
"msgType": "VirtualQueueGroup"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"ticketMaxActiveCoupons": {
"type": "number",
"description": "How many active coupons a ticket can be in for all virtual queues in this group"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name",
"ticketMaxActiveCoupons",
"msgType"
]
}
Deletable virtual queue group IDsGET/virtualQueueGroups/deletableIds
Get the IDs of all virtual queue groups that can be deleted. This does not validate if the user can actually delete the virtual queue group.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Virtual queue group ¶
Get virtual queue groupGET/virtualQueueGroups/{virtualQueueGroupId}
Example URI
- virtualQueueGroupId
number
(required) Example: 90
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 220,
"name": "Attractions",
"ticketMaxActiveCoupons": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"ticketMaxActiveCoupons": {
"type": "number",
"description": "How many active coupons a ticket can be in for all virtual queues in this group"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name",
"ticketMaxActiveCoupons"
]
}
Update virtual queue groupPUT/virtualQueueGroups/{virtualQueueGroupId}
The ID in the URL and the body must match.
Example URI
- virtualQueueGroupId
number
(required) Example: 90
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 220,
"name": "Attractions",
"ticketMaxActiveCoupons": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"ticketMaxActiveCoupons": {
"type": "number",
"description": "How many active coupons a ticket can be in for all virtual queues in this group"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name",
"ticketMaxActiveCoupons"
]
}
204
Delete virtual queue groupDELETE/virtualQueueGroups/{virtualQueueGroupId}
Example URI
- virtualQueueGroupId
number
(required) Example: 90
204
Virtual Queues ¶
Virtual queues are the core of the virtual queue system and belongs to an event and a zone.
List all virtual queuesGET/virtualQueues{?eventId}
Example URI
- eventId
number
(optional) Example: 30
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
List all virtual queues with status (public)GET/virtualQueues/status{?eventId,eventUuid}
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
If neither eventId or eventUuid is specified, then the “current event” will be used.
Example URI
- eventId
number
(optional) Example: 30- eventUuid
string
(optional) Example: 8e305cde-c75a-11eb-a0a9-0242c0a83002
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"status": "open",
"flowPerHour": 10,
"expectedWaitTimeMinutes": 14,
"externalExpectedWaitTimeMinutes": 14,
"virtualQueueStatusMessageId": 300,
"until": "2019-01-01T05:00:00+02:00",
"zoneName": "Backstage",
"organizerId": 10
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
List all virtual queues with info (public)GET/virtualQueues/info{?eventId,eventUuid}
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
If neither eventId or eventUuid is specified, then the “current event” will be used.
Example URI
- eventId
number
(optional) Example: 30- eventUuid
string
(optional) Example: 8e305cde-c75a-11eb-a0a9-0242c0a83002
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"status": "open",
"flowPerHour": 10,
"expectedWaitTimeMinutes": 14,
"externalExpectedWaitTimeMinutes": 14,
"virtualQueueStatusMessageId": 300,
"until": "2019-01-01T05:00:00+02:00",
"zoneName": "Backstage",
"organizerId": 10,
"virtualQueueStatusMessage": {
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed",
"message": [
"Hello, world!"
]
},
"waitTimeInterval": "2018-08-08T12:00:00+02:00"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
List all virtual queues with infoGET/virtualQueues/info/uuids{?uuids}
Example URI
- uuids
array
(required)
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"status": "open",
"flowPerHour": 10,
"expectedWaitTimeMinutes": 14,
"externalExpectedWaitTimeMinutes": 14,
"virtualQueueStatusMessageId": 300,
"until": "2019-01-01T05:00:00+02:00",
"zoneName": "Backstage",
"organizerId": 10,
"virtualQueueStatusMessage": {
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed",
"message": [
"Hello, world!"
]
},
"waitTimeInterval": "2018-08-08T12:00:00+02:00"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Virtual queue ticket info (public)GET/virtualQueues/ticketInfo{?ticketId,ticketUuid,tokenId,tokenValue,tokenTypeName,eventId}
Example URI
- ticketId
number
(optional) Example: 100- ticketUuid
string
(optional) Example: 735e3699-c75a-11eb-a0a9-0242c0a83002- tokenId
number
(optional) Example: 120- tokenValue
string
(optional) Example: 04E56FFAE65380- tokenTypeName
string
(optional) Example: NFC UIDIs required for tokenValue
- eventId
number
(optional) Example: 30Is recommended for tokenValue
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"activeCoupons": [
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"isSpectator": true,
"couponTicketStatus": "in queue",
"queueUuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"zoneName": "Backstage",
"parentVirtualQueueId": 231,
"queueType": "calendar",
"couponTimeout": 900,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"queueFlowPerHour": 0,
"expectedWaitTimeMinutes": 14,
"waitTimeInterval": "2018-08-08T12:00:00+02:00",
"expectedEnterTime": "2018-08-05T12:00:00+02:00",
"expectedExitTime": "2018-08-05T12:30:00+02:00"
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"ticketId": {
"type": "number"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"tokenId": {
"type": "number"
},
"tokenValue": {
"type": "string"
},
"tokenTypeName": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
],
"description": "Name of the ticket"
},
"activeCoupons": {
"type": "array"
}
},
"required": [
"ticketId",
"isValid",
"tokenId",
"tokenValue",
"tokenTypeName",
"name",
"activeCoupons"
]
}
400
Headers
Content-Type: application/json
Body
{
"error": "A property must be specified",
"errorCode": 1002
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Create a new virtual queuePOST/virtualQueues
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"uuid": null,
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": [
"string",
"null"
]
},
"eventId": {
"type": "number"
},
"zoneId": {
"type": "number",
"description": "The buffer zone (name is taken from this)"
},
"attractionZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"physicalQueueZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"parkZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow and type==max_population"
},
"virtualQueueGroupId": {
"type": "number"
},
"parentVirtualQueueId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"type": {
"type": "string",
"enum": [
"flow",
"max_population",
"calendar"
]
},
"maxPopulation": {
"type": "number",
"description": "Only for type==max_population and type==calendar"
},
"couponGroupMaxSize": {
"type": "number"
},
"couponGroupNamePattern": {
"type": "string"
},
"couponMaxSize": {
"type": "number"
},
"couponTimeout": {
"type": "number"
},
"openCalendarId": {
"type": "number"
},
"openingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"closingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"allowSpectators": {
"type": "boolean",
"description": "Allow coupons with spectators that can only enter the parent queue. Only for type==flow and type==max_population"
},
"hasExternalCalculations": {
"type": "boolean",
"description": "Can the expected wait time be calculated externally. Only for type==flow and type==max_population"
},
"flowWindowSize": {
"type": "number",
"description": "Seconds to look back to calculate the flow. Only for type==flow and type==max_population"
},
"minFlowPerHour": {
"type": "number",
"description": "The minimal flow to use. Only for type==flow and type==max_population"
},
"minWelcomed": {
"type": "number",
"description": "Always has at least this many welcomed. Only for type==flow"
},
"minBoarded": {
"type": "number",
"description": "Always has at least this many boarded (in the physical queue). Only for type==flow"
},
"estimatedNoShowBeforeWelcome": {
"type": "number",
"description": "Percentage of join tickets that dequeues before being welcomed"
},
"estimatedNoShowAfterWelcome": {
"type": "number",
"description": "Percentage of welcomed tickets that does not board"
},
"estimatedArrivalTime": {
"type": "number",
"description": "Number of seconds after being welcomed guests are estimated to board"
},
"insideDuration": {
"type": [
"number",
"null"
],
"description": "How long, in seconds, is each ticket expected to be inside the zone"
},
"calendarWelcomeDuration": {
"type": [
"number",
"null"
],
"description": "How long before the booking time, in seconds, is a coupon welcomed to the queue. Only for type==calendar"
},
"childCouponAlsoBoardedAtChild": {
"type": "boolean",
"description": "When a coupon from a child queue is scanned should it also be marked as boarded at the child queue?"
},
"minAdjustedWelcomedTime": {
"type": "number",
"description": "How much adjustment, in seconds, is needed before coupon groups are marked as having an adjusted welcomed time"
},
"warningPreBuffer": {
"type": [
"number",
"null"
],
"description": "Pre-buffer, in seconds, for double-booking warning calculations"
},
"warningPostBuffer": {
"type": [
"number",
"null"
],
"description": "Post-buffer, in seconds, for double-booking warning calculations"
}
},
"required": [
"syncId",
"isDeleted",
"eventId",
"zoneId",
"attractionZoneId",
"physicalQueueZoneId",
"parkZoneId",
"isActive",
"type",
"maxPopulation",
"couponGroupMaxSize",
"couponGroupNamePattern",
"couponMaxSize",
"couponTimeout",
"openingDuration",
"closingDuration",
"allowSpectators",
"hasExternalCalculations",
"flowWindowSize",
"minFlowPerHour",
"minWelcomed",
"minBoarded",
"estimatedNoShowBeforeWelcome",
"estimatedNoShowAfterWelcome",
"estimatedArrivalTime",
"insideDuration",
"calendarWelcomeDuration",
"childCouponAlsoBoardedAtChild",
"minAdjustedWelcomedTime",
"warningPreBuffer",
"warningPostBuffer"
]
}
201
Headers
Content-Type: application/json
Location: /virtualQueues/{virtualQueueId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"msgType": "VirtualQueue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"zoneId": {
"type": "number",
"description": "The buffer zone (name is taken from this)"
},
"attractionZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"physicalQueueZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"parkZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow and type==max_population"
},
"virtualQueueGroupId": {
"type": "number"
},
"parentVirtualQueueId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"type": {
"type": "string",
"enum": [
"flow",
"max_population",
"calendar"
]
},
"maxPopulation": {
"type": "number",
"description": "Only for type==max_population and type==calendar"
},
"couponGroupMaxSize": {
"type": "number"
},
"couponGroupNamePattern": {
"type": "string"
},
"couponMaxSize": {
"type": "number"
},
"couponTimeout": {
"type": "number"
},
"openCalendarId": {
"type": "number"
},
"openingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"closingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"allowSpectators": {
"type": "boolean",
"description": "Allow coupons with spectators that can only enter the parent queue. Only for type==flow and type==max_population"
},
"hasExternalCalculations": {
"type": "boolean",
"description": "Can the expected wait time be calculated externally. Only for type==flow and type==max_population"
},
"flowWindowSize": {
"type": "number",
"description": "Seconds to look back to calculate the flow. Only for type==flow and type==max_population"
},
"minFlowPerHour": {
"type": "number",
"description": "The minimal flow to use. Only for type==flow and type==max_population"
},
"minWelcomed": {
"type": "number",
"description": "Always has at least this many welcomed. Only for type==flow"
},
"minBoarded": {
"type": "number",
"description": "Always has at least this many boarded (in the physical queue). Only for type==flow"
},
"estimatedNoShowBeforeWelcome": {
"type": "number",
"description": "Percentage of join tickets that dequeues before being welcomed"
},
"estimatedNoShowAfterWelcome": {
"type": "number",
"description": "Percentage of welcomed tickets that does not board"
},
"estimatedArrivalTime": {
"type": "number",
"description": "Number of seconds after being welcomed guests are estimated to board"
},
"insideDuration": {
"type": [
"number",
"null"
],
"description": "How long, in seconds, is each ticket expected to be inside the zone"
},
"calendarWelcomeDuration": {
"type": [
"number",
"null"
],
"description": "How long before the booking time, in seconds, is a coupon welcomed to the queue. Only for type==calendar"
},
"childCouponAlsoBoardedAtChild": {
"type": "boolean",
"description": "When a coupon from a child queue is scanned should it also be marked as boarded at the child queue?"
},
"minAdjustedWelcomedTime": {
"type": "number",
"description": "How much adjustment, in seconds, is needed before coupon groups are marked as having an adjusted welcomed time"
},
"warningPreBuffer": {
"type": [
"number",
"null"
],
"description": "Pre-buffer, in seconds, for double-booking warning calculations"
},
"warningPostBuffer": {
"type": [
"number",
"null"
],
"description": "Post-buffer, in seconds, for double-booking warning calculations"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"zoneId",
"attractionZoneId",
"physicalQueueZoneId",
"parkZoneId",
"isActive",
"type",
"maxPopulation",
"couponGroupMaxSize",
"couponGroupNamePattern",
"couponMaxSize",
"couponTimeout",
"openingDuration",
"closingDuration",
"allowSpectators",
"hasExternalCalculations",
"flowWindowSize",
"minFlowPerHour",
"minWelcomed",
"minBoarded",
"estimatedNoShowBeforeWelcome",
"estimatedNoShowAfterWelcome",
"estimatedArrivalTime",
"insideDuration",
"calendarWelcomeDuration",
"childCouponAlsoBoardedAtChild",
"minAdjustedWelcomedTime",
"warningPreBuffer",
"warningPostBuffer",
"msgType"
]
}
Deletable virtual queue IDsGET/virtualQueues/deletableIds
Get the IDs of all virtual queues that can be deleted. This does not validate if the user can actually delete the virtual queue.
Example URI
200
Headers
Content-Type: application/json
Body
[
1
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Virtual queue ¶
Get virtual queueGET/virtualQueues/{virtualQueueId}
Example URI
- virtualQueueId
number
(required) Example: 230
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"zoneId": {
"type": "number",
"description": "The buffer zone (name is taken from this)"
},
"attractionZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"physicalQueueZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"parkZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow and type==max_population"
},
"virtualQueueGroupId": {
"type": "number"
},
"parentVirtualQueueId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"type": {
"type": "string",
"enum": [
"flow",
"max_population",
"calendar"
]
},
"maxPopulation": {
"type": "number",
"description": "Only for type==max_population and type==calendar"
},
"couponGroupMaxSize": {
"type": "number"
},
"couponGroupNamePattern": {
"type": "string"
},
"couponMaxSize": {
"type": "number"
},
"couponTimeout": {
"type": "number"
},
"openCalendarId": {
"type": "number"
},
"openingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"closingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"allowSpectators": {
"type": "boolean",
"description": "Allow coupons with spectators that can only enter the parent queue. Only for type==flow and type==max_population"
},
"hasExternalCalculations": {
"type": "boolean",
"description": "Can the expected wait time be calculated externally. Only for type==flow and type==max_population"
},
"flowWindowSize": {
"type": "number",
"description": "Seconds to look back to calculate the flow. Only for type==flow and type==max_population"
},
"minFlowPerHour": {
"type": "number",
"description": "The minimal flow to use. Only for type==flow and type==max_population"
},
"minWelcomed": {
"type": "number",
"description": "Always has at least this many welcomed. Only for type==flow"
},
"minBoarded": {
"type": "number",
"description": "Always has at least this many boarded (in the physical queue). Only for type==flow"
},
"estimatedNoShowBeforeWelcome": {
"type": "number",
"description": "Percentage of join tickets that dequeues before being welcomed"
},
"estimatedNoShowAfterWelcome": {
"type": "number",
"description": "Percentage of welcomed tickets that does not board"
},
"estimatedArrivalTime": {
"type": "number",
"description": "Number of seconds after being welcomed guests are estimated to board"
},
"insideDuration": {
"type": [
"number",
"null"
],
"description": "How long, in seconds, is each ticket expected to be inside the zone"
},
"calendarWelcomeDuration": {
"type": [
"number",
"null"
],
"description": "How long before the booking time, in seconds, is a coupon welcomed to the queue. Only for type==calendar"
},
"childCouponAlsoBoardedAtChild": {
"type": "boolean",
"description": "When a coupon from a child queue is scanned should it also be marked as boarded at the child queue?"
},
"minAdjustedWelcomedTime": {
"type": "number",
"description": "How much adjustment, in seconds, is needed before coupon groups are marked as having an adjusted welcomed time"
},
"warningPreBuffer": {
"type": [
"number",
"null"
],
"description": "Pre-buffer, in seconds, for double-booking warning calculations"
},
"warningPostBuffer": {
"type": [
"number",
"null"
],
"description": "Post-buffer, in seconds, for double-booking warning calculations"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"zoneId",
"attractionZoneId",
"physicalQueueZoneId",
"parkZoneId",
"isActive",
"type",
"maxPopulation",
"couponGroupMaxSize",
"couponGroupNamePattern",
"couponMaxSize",
"couponTimeout",
"openingDuration",
"closingDuration",
"allowSpectators",
"hasExternalCalculations",
"flowWindowSize",
"minFlowPerHour",
"minWelcomed",
"minBoarded",
"estimatedNoShowBeforeWelcome",
"estimatedNoShowAfterWelcome",
"estimatedArrivalTime",
"insideDuration",
"calendarWelcomeDuration",
"childCouponAlsoBoardedAtChild",
"minAdjustedWelcomedTime",
"warningPreBuffer",
"warningPostBuffer"
]
}
Get virtual queue with statusGET/virtualQueues/{virtualQueueId}/status
Example URI
- virtualQueueId
number
(required) Example: 230
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"status": "open",
"flowPerHour": 10,
"expectedWaitTimeMinutes": 14,
"externalExpectedWaitTimeMinutes": 14,
"virtualQueueStatusMessageId": 300,
"until": "2019-01-01T05:00:00+02:00",
"zoneName": "Backstage",
"organizerId": 10
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"zoneId": {
"type": "number",
"description": "The buffer zone (name is taken from this)"
},
"attractionZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"physicalQueueZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"parkZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow and type==max_population"
},
"virtualQueueGroupId": {
"type": "number"
},
"parentVirtualQueueId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"type": {
"type": "string",
"enum": [
"flow",
"max_population",
"calendar"
]
},
"maxPopulation": {
"type": "number",
"description": "Only for type==max_population and type==calendar"
},
"couponGroupMaxSize": {
"type": "number"
},
"couponGroupNamePattern": {
"type": "string"
},
"couponMaxSize": {
"type": "number"
},
"couponTimeout": {
"type": "number"
},
"openCalendarId": {
"type": "number"
},
"openingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"closingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"allowSpectators": {
"type": "boolean",
"description": "Allow coupons with spectators that can only enter the parent queue. Only for type==flow and type==max_population"
},
"hasExternalCalculations": {
"type": "boolean",
"description": "Can the expected wait time be calculated externally. Only for type==flow and type==max_population"
},
"flowWindowSize": {
"type": "number",
"description": "Seconds to look back to calculate the flow. Only for type==flow and type==max_population"
},
"minFlowPerHour": {
"type": "number",
"description": "The minimal flow to use. Only for type==flow and type==max_population"
},
"minWelcomed": {
"type": "number",
"description": "Always has at least this many welcomed. Only for type==flow"
},
"minBoarded": {
"type": "number",
"description": "Always has at least this many boarded (in the physical queue). Only for type==flow"
},
"estimatedNoShowBeforeWelcome": {
"type": "number",
"description": "Percentage of join tickets that dequeues before being welcomed"
},
"estimatedNoShowAfterWelcome": {
"type": "number",
"description": "Percentage of welcomed tickets that does not board"
},
"estimatedArrivalTime": {
"type": "number",
"description": "Number of seconds after being welcomed guests are estimated to board"
},
"insideDuration": {
"type": [
"number",
"null"
],
"description": "How long, in seconds, is each ticket expected to be inside the zone"
},
"calendarWelcomeDuration": {
"type": [
"number",
"null"
],
"description": "How long before the booking time, in seconds, is a coupon welcomed to the queue. Only for type==calendar"
},
"childCouponAlsoBoardedAtChild": {
"type": "boolean",
"description": "When a coupon from a child queue is scanned should it also be marked as boarded at the child queue?"
},
"minAdjustedWelcomedTime": {
"type": "number",
"description": "How much adjustment, in seconds, is needed before coupon groups are marked as having an adjusted welcomed time"
},
"warningPreBuffer": {
"type": [
"number",
"null"
],
"description": "Pre-buffer, in seconds, for double-booking warning calculations"
},
"warningPostBuffer": {
"type": [
"number",
"null"
],
"description": "Post-buffer, in seconds, for double-booking warning calculations"
},
"status": {
"type": "string",
"enum": [
"open",
"welcoming",
"paused",
"closing",
"closed"
]
},
"flowPerHour": {
"type": "number"
},
"expectedWaitTimeMinutes": {
"type": "number",
"description": "Expected wait time in minutes"
},
"externalExpectedWaitTimeMinutes": {
"type": [
"number",
"null"
],
"description": "Expected wait time in minutes calculated by an external service"
},
"virtualQueueStatusMessageId": {
"type": [
"number",
"null"
]
},
"until": {
"type": [
"string",
"null"
],
"description": "The time at which the status is expected to change"
},
"zoneName": {
"type": "string"
},
"organizerId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"zoneId",
"attractionZoneId",
"physicalQueueZoneId",
"parkZoneId",
"isActive",
"type",
"maxPopulation",
"couponGroupMaxSize",
"couponGroupNamePattern",
"couponMaxSize",
"couponTimeout",
"openingDuration",
"closingDuration",
"allowSpectators",
"hasExternalCalculations",
"flowWindowSize",
"minFlowPerHour",
"minWelcomed",
"minBoarded",
"estimatedNoShowBeforeWelcome",
"estimatedNoShowAfterWelcome",
"estimatedArrivalTime",
"insideDuration",
"calendarWelcomeDuration",
"childCouponAlsoBoardedAtChild",
"minAdjustedWelcomedTime",
"warningPreBuffer",
"warningPostBuffer",
"status",
"flowPerHour",
"expectedWaitTimeMinutes",
"externalExpectedWaitTimeMinutes",
"virtualQueueStatusMessageId",
"until",
"zoneName",
"organizerId"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Get virtual queue with status (public)GET/virtualQueues/{virtualQueueUuid}/status
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- virtualQueueUuid
string
(required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57UUID
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"status": "open",
"flowPerHour": 10,
"expectedWaitTimeMinutes": 14,
"externalExpectedWaitTimeMinutes": 14,
"virtualQueueStatusMessageId": 300,
"until": "2019-01-01T05:00:00+02:00",
"zoneName": "Backstage",
"organizerId": 10
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"zoneId": {
"type": "number",
"description": "The buffer zone (name is taken from this)"
},
"attractionZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"physicalQueueZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"parkZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow and type==max_population"
},
"virtualQueueGroupId": {
"type": "number"
},
"parentVirtualQueueId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"type": {
"type": "string",
"enum": [
"flow",
"max_population",
"calendar"
]
},
"maxPopulation": {
"type": "number",
"description": "Only for type==max_population and type==calendar"
},
"couponGroupMaxSize": {
"type": "number"
},
"couponGroupNamePattern": {
"type": "string"
},
"couponMaxSize": {
"type": "number"
},
"couponTimeout": {
"type": "number"
},
"openCalendarId": {
"type": "number"
},
"openingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"closingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"allowSpectators": {
"type": "boolean",
"description": "Allow coupons with spectators that can only enter the parent queue. Only for type==flow and type==max_population"
},
"hasExternalCalculations": {
"type": "boolean",
"description": "Can the expected wait time be calculated externally. Only for type==flow and type==max_population"
},
"flowWindowSize": {
"type": "number",
"description": "Seconds to look back to calculate the flow. Only for type==flow and type==max_population"
},
"minFlowPerHour": {
"type": "number",
"description": "The minimal flow to use. Only for type==flow and type==max_population"
},
"minWelcomed": {
"type": "number",
"description": "Always has at least this many welcomed. Only for type==flow"
},
"minBoarded": {
"type": "number",
"description": "Always has at least this many boarded (in the physical queue). Only for type==flow"
},
"estimatedNoShowBeforeWelcome": {
"type": "number",
"description": "Percentage of join tickets that dequeues before being welcomed"
},
"estimatedNoShowAfterWelcome": {
"type": "number",
"description": "Percentage of welcomed tickets that does not board"
},
"estimatedArrivalTime": {
"type": "number",
"description": "Number of seconds after being welcomed guests are estimated to board"
},
"insideDuration": {
"type": [
"number",
"null"
],
"description": "How long, in seconds, is each ticket expected to be inside the zone"
},
"calendarWelcomeDuration": {
"type": [
"number",
"null"
],
"description": "How long before the booking time, in seconds, is a coupon welcomed to the queue. Only for type==calendar"
},
"childCouponAlsoBoardedAtChild": {
"type": "boolean",
"description": "When a coupon from a child queue is scanned should it also be marked as boarded at the child queue?"
},
"minAdjustedWelcomedTime": {
"type": "number",
"description": "How much adjustment, in seconds, is needed before coupon groups are marked as having an adjusted welcomed time"
},
"warningPreBuffer": {
"type": [
"number",
"null"
],
"description": "Pre-buffer, in seconds, for double-booking warning calculations"
},
"warningPostBuffer": {
"type": [
"number",
"null"
],
"description": "Post-buffer, in seconds, for double-booking warning calculations"
},
"status": {
"type": "string",
"enum": [
"open",
"welcoming",
"paused",
"closing",
"closed"
]
},
"flowPerHour": {
"type": "number"
},
"expectedWaitTimeMinutes": {
"type": "number",
"description": "Expected wait time in minutes"
},
"externalExpectedWaitTimeMinutes": {
"type": [
"number",
"null"
],
"description": "Expected wait time in minutes calculated by an external service"
},
"virtualQueueStatusMessageId": {
"type": [
"number",
"null"
]
},
"until": {
"type": [
"string",
"null"
],
"description": "The time at which the status is expected to change"
},
"zoneName": {
"type": "string"
},
"organizerId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"zoneId",
"attractionZoneId",
"physicalQueueZoneId",
"parkZoneId",
"isActive",
"type",
"maxPopulation",
"couponGroupMaxSize",
"couponGroupNamePattern",
"couponMaxSize",
"couponTimeout",
"openingDuration",
"closingDuration",
"allowSpectators",
"hasExternalCalculations",
"flowWindowSize",
"minFlowPerHour",
"minWelcomed",
"minBoarded",
"estimatedNoShowBeforeWelcome",
"estimatedNoShowAfterWelcome",
"estimatedArrivalTime",
"insideDuration",
"calendarWelcomeDuration",
"childCouponAlsoBoardedAtChild",
"minAdjustedWelcomedTime",
"warningPreBuffer",
"warningPostBuffer",
"status",
"flowPerHour",
"expectedWaitTimeMinutes",
"externalExpectedWaitTimeMinutes",
"virtualQueueStatusMessageId",
"until",
"zoneName",
"organizerId"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Get virtual queue with infoGET/virtualQueues/{virtualQueueId}/info
Example URI
- virtualQueueId
number
(required) Example: 230
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"status": "open",
"flowPerHour": 10,
"expectedWaitTimeMinutes": 14,
"externalExpectedWaitTimeMinutes": 14,
"virtualQueueStatusMessageId": 300,
"until": "2019-01-01T05:00:00+02:00",
"zoneName": "Backstage",
"organizerId": 10,
"virtualQueueStatusMessage": {
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed",
"message": [
"Hello, world!"
]
},
"waitTimeInterval": "2018-08-08T12:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"zoneId": {
"type": "number",
"description": "The buffer zone (name is taken from this)"
},
"attractionZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"physicalQueueZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"parkZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow and type==max_population"
},
"virtualQueueGroupId": {
"type": "number"
},
"parentVirtualQueueId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"type": {
"type": "string",
"enum": [
"flow",
"max_population",
"calendar"
]
},
"maxPopulation": {
"type": "number",
"description": "Only for type==max_population and type==calendar"
},
"couponGroupMaxSize": {
"type": "number"
},
"couponGroupNamePattern": {
"type": "string"
},
"couponMaxSize": {
"type": "number"
},
"couponTimeout": {
"type": "number"
},
"openCalendarId": {
"type": "number"
},
"openingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"closingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"allowSpectators": {
"type": "boolean",
"description": "Allow coupons with spectators that can only enter the parent queue. Only for type==flow and type==max_population"
},
"hasExternalCalculations": {
"type": "boolean",
"description": "Can the expected wait time be calculated externally. Only for type==flow and type==max_population"
},
"flowWindowSize": {
"type": "number",
"description": "Seconds to look back to calculate the flow. Only for type==flow and type==max_population"
},
"minFlowPerHour": {
"type": "number",
"description": "The minimal flow to use. Only for type==flow and type==max_population"
},
"minWelcomed": {
"type": "number",
"description": "Always has at least this many welcomed. Only for type==flow"
},
"minBoarded": {
"type": "number",
"description": "Always has at least this many boarded (in the physical queue). Only for type==flow"
},
"estimatedNoShowBeforeWelcome": {
"type": "number",
"description": "Percentage of join tickets that dequeues before being welcomed"
},
"estimatedNoShowAfterWelcome": {
"type": "number",
"description": "Percentage of welcomed tickets that does not board"
},
"estimatedArrivalTime": {
"type": "number",
"description": "Number of seconds after being welcomed guests are estimated to board"
},
"insideDuration": {
"type": [
"number",
"null"
],
"description": "How long, in seconds, is each ticket expected to be inside the zone"
},
"calendarWelcomeDuration": {
"type": [
"number",
"null"
],
"description": "How long before the booking time, in seconds, is a coupon welcomed to the queue. Only for type==calendar"
},
"childCouponAlsoBoardedAtChild": {
"type": "boolean",
"description": "When a coupon from a child queue is scanned should it also be marked as boarded at the child queue?"
},
"minAdjustedWelcomedTime": {
"type": "number",
"description": "How much adjustment, in seconds, is needed before coupon groups are marked as having an adjusted welcomed time"
},
"warningPreBuffer": {
"type": [
"number",
"null"
],
"description": "Pre-buffer, in seconds, for double-booking warning calculations"
},
"warningPostBuffer": {
"type": [
"number",
"null"
],
"description": "Post-buffer, in seconds, for double-booking warning calculations"
},
"status": {
"type": "string",
"enum": [
"open",
"welcoming",
"paused",
"closing",
"closed"
]
},
"flowPerHour": {
"type": "number"
},
"expectedWaitTimeMinutes": {
"type": "number",
"description": "Expected wait time in minutes"
},
"externalExpectedWaitTimeMinutes": {
"type": [
"number",
"null"
],
"description": "Expected wait time in minutes calculated by an external service"
},
"virtualQueueStatusMessageId": {
"type": [
"number",
"null"
]
},
"until": {
"type": [
"string",
"null"
],
"description": "The time at which the status is expected to change"
},
"zoneName": {
"type": "string"
},
"organizerId": {
"type": "number"
},
"virtualQueueStatusMessage": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"closed",
"paused"
]
},
"message": {
"type": "array",
"description": "Indexed by language code"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"message"
]
},
"waitTimeInterval": {
"type": "string",
"description": "The wait time interval that fits with the expected wait time"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"zoneId",
"attractionZoneId",
"physicalQueueZoneId",
"parkZoneId",
"isActive",
"type",
"maxPopulation",
"couponGroupMaxSize",
"couponGroupNamePattern",
"couponMaxSize",
"couponTimeout",
"openingDuration",
"closingDuration",
"allowSpectators",
"hasExternalCalculations",
"flowWindowSize",
"minFlowPerHour",
"minWelcomed",
"minBoarded",
"estimatedNoShowBeforeWelcome",
"estimatedNoShowAfterWelcome",
"estimatedArrivalTime",
"insideDuration",
"calendarWelcomeDuration",
"childCouponAlsoBoardedAtChild",
"minAdjustedWelcomedTime",
"warningPreBuffer",
"warningPostBuffer",
"status",
"flowPerHour",
"expectedWaitTimeMinutes",
"externalExpectedWaitTimeMinutes",
"virtualQueueStatusMessageId",
"until",
"zoneName",
"organizerId",
"virtualQueueStatusMessage",
"waitTimeInterval"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Get virtual queue with info (public)GET/virtualQueues/{virtualQueueUuid}/info
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- virtualQueueUuid
string
(required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57UUID
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"status": "open",
"flowPerHour": 10,
"expectedWaitTimeMinutes": 14,
"externalExpectedWaitTimeMinutes": 14,
"virtualQueueStatusMessageId": 300,
"until": "2019-01-01T05:00:00+02:00",
"zoneName": "Backstage",
"organizerId": 10,
"virtualQueueStatusMessage": {
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed",
"message": [
"Hello, world!"
]
},
"waitTimeInterval": "2018-08-08T12:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"zoneId": {
"type": "number",
"description": "The buffer zone (name is taken from this)"
},
"attractionZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"physicalQueueZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"parkZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow and type==max_population"
},
"virtualQueueGroupId": {
"type": "number"
},
"parentVirtualQueueId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"type": {
"type": "string",
"enum": [
"flow",
"max_population",
"calendar"
]
},
"maxPopulation": {
"type": "number",
"description": "Only for type==max_population and type==calendar"
},
"couponGroupMaxSize": {
"type": "number"
},
"couponGroupNamePattern": {
"type": "string"
},
"couponMaxSize": {
"type": "number"
},
"couponTimeout": {
"type": "number"
},
"openCalendarId": {
"type": "number"
},
"openingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"closingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"allowSpectators": {
"type": "boolean",
"description": "Allow coupons with spectators that can only enter the parent queue. Only for type==flow and type==max_population"
},
"hasExternalCalculations": {
"type": "boolean",
"description": "Can the expected wait time be calculated externally. Only for type==flow and type==max_population"
},
"flowWindowSize": {
"type": "number",
"description": "Seconds to look back to calculate the flow. Only for type==flow and type==max_population"
},
"minFlowPerHour": {
"type": "number",
"description": "The minimal flow to use. Only for type==flow and type==max_population"
},
"minWelcomed": {
"type": "number",
"description": "Always has at least this many welcomed. Only for type==flow"
},
"minBoarded": {
"type": "number",
"description": "Always has at least this many boarded (in the physical queue). Only for type==flow"
},
"estimatedNoShowBeforeWelcome": {
"type": "number",
"description": "Percentage of join tickets that dequeues before being welcomed"
},
"estimatedNoShowAfterWelcome": {
"type": "number",
"description": "Percentage of welcomed tickets that does not board"
},
"estimatedArrivalTime": {
"type": "number",
"description": "Number of seconds after being welcomed guests are estimated to board"
},
"insideDuration": {
"type": [
"number",
"null"
],
"description": "How long, in seconds, is each ticket expected to be inside the zone"
},
"calendarWelcomeDuration": {
"type": [
"number",
"null"
],
"description": "How long before the booking time, in seconds, is a coupon welcomed to the queue. Only for type==calendar"
},
"childCouponAlsoBoardedAtChild": {
"type": "boolean",
"description": "When a coupon from a child queue is scanned should it also be marked as boarded at the child queue?"
},
"minAdjustedWelcomedTime": {
"type": "number",
"description": "How much adjustment, in seconds, is needed before coupon groups are marked as having an adjusted welcomed time"
},
"warningPreBuffer": {
"type": [
"number",
"null"
],
"description": "Pre-buffer, in seconds, for double-booking warning calculations"
},
"warningPostBuffer": {
"type": [
"number",
"null"
],
"description": "Post-buffer, in seconds, for double-booking warning calculations"
},
"status": {
"type": "string",
"enum": [
"open",
"welcoming",
"paused",
"closing",
"closed"
]
},
"flowPerHour": {
"type": "number"
},
"expectedWaitTimeMinutes": {
"type": "number",
"description": "Expected wait time in minutes"
},
"externalExpectedWaitTimeMinutes": {
"type": [
"number",
"null"
],
"description": "Expected wait time in minutes calculated by an external service"
},
"virtualQueueStatusMessageId": {
"type": [
"number",
"null"
]
},
"until": {
"type": [
"string",
"null"
],
"description": "The time at which the status is expected to change"
},
"zoneName": {
"type": "string"
},
"organizerId": {
"type": "number"
},
"virtualQueueStatusMessage": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"closed",
"paused"
]
},
"message": {
"type": "array",
"description": "Indexed by language code"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"message"
]
},
"waitTimeInterval": {
"type": "string",
"description": "The wait time interval that fits with the expected wait time"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"zoneId",
"attractionZoneId",
"physicalQueueZoneId",
"parkZoneId",
"isActive",
"type",
"maxPopulation",
"couponGroupMaxSize",
"couponGroupNamePattern",
"couponMaxSize",
"couponTimeout",
"openingDuration",
"closingDuration",
"allowSpectators",
"hasExternalCalculations",
"flowWindowSize",
"minFlowPerHour",
"minWelcomed",
"minBoarded",
"estimatedNoShowBeforeWelcome",
"estimatedNoShowAfterWelcome",
"estimatedArrivalTime",
"insideDuration",
"calendarWelcomeDuration",
"childCouponAlsoBoardedAtChild",
"minAdjustedWelcomedTime",
"warningPreBuffer",
"warningPostBuffer",
"status",
"flowPerHour",
"expectedWaitTimeMinutes",
"externalExpectedWaitTimeMinutes",
"virtualQueueStatusMessageId",
"until",
"zoneName",
"organizerId",
"virtualQueueStatusMessage",
"waitTimeInterval"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Get virtual queue population statisticsGET/virtualQueues/{virtualQueueId}/population
Example URI
- virtualQueueId
number
(required) Example: 230
200
Headers
Content-Type: application/json
Body
{
"queueMaxPopulation": 100,
"zoneMaxPopulation": 100,
"attractionZoneMaxPopulation": 100,
"physicalQueueZoneMaxPopulation": 100,
"currentPopulation": 84,
"attractionZoneCurrentPopulation": 84,
"physicalQueueZoneCurrentPopulation": 84,
"welcomedTicketsCount": 11,
"parentQueueMaxPopulation": 200,
"parentZoneMaxPopulation": 200,
"parentCurrentPopulation": 109,
"parentWelcomedTicketsCount": 25
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"queueMaxPopulation": {
"type": [
"number",
"null"
],
"description": "Max population set on the queue"
},
"zoneMaxPopulation": {
"type": [
"number",
"null"
],
"description": "Max population set on the zone"
},
"attractionZoneMaxPopulation": {
"type": [
"number",
"null"
],
"description": "Max population set on attraction zone"
},
"physicalQueueZoneMaxPopulation": {
"type": [
"number",
"null"
],
"description": "Max population set on physical queue zone"
},
"currentPopulation": {
"type": "number",
"description": "Current population on the zone"
},
"attractionZoneCurrentPopulation": {
"type": "number",
"description": "Current population in the attraction zone"
},
"physicalQueueZoneCurrentPopulation": {
"type": "number",
"description": "Current population in the physical queue zone"
},
"welcomedTicketsCount": {
"type": "number",
"description": "Count of currently welcomed coupon tickets for the queue"
},
"parentQueueMaxPopulation": {
"type": [
"number",
"null"
],
"description": "Max population set on the parent queue"
},
"parentZoneMaxPopulation": {
"type": [
"number",
"null"
],
"description": "Max population set on the parent queue zone"
},
"parentCurrentPopulation": {
"type": "number",
"description": "Current population on the parent queue zone"
},
"parentWelcomedTicketsCount": {
"type": "number",
"description": "Count of currently welcomed coupon tickets for the parent queue and all its child queues (including the one requested)"
}
},
"required": [
"queueMaxPopulation",
"zoneMaxPopulation",
"attractionZoneMaxPopulation",
"physicalQueueZoneMaxPopulation",
"currentPopulation",
"attractionZoneCurrentPopulation",
"physicalQueueZoneCurrentPopulation",
"welcomedTicketsCount",
"parentQueueMaxPopulation",
"parentZoneMaxPopulation",
"parentCurrentPopulation",
"parentWelcomedTicketsCount"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Update virtual queuePUT/virtualQueues/{virtualQueueId}
The ID in the URL and the body must match.
Example URI
- virtualQueueId
number
(required) Example: 230
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"zoneId": {
"type": "number",
"description": "The buffer zone (name is taken from this)"
},
"attractionZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"physicalQueueZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"parkZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow and type==max_population"
},
"virtualQueueGroupId": {
"type": "number"
},
"parentVirtualQueueId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"type": {
"type": "string",
"enum": [
"flow",
"max_population",
"calendar"
]
},
"maxPopulation": {
"type": "number",
"description": "Only for type==max_population and type==calendar"
},
"couponGroupMaxSize": {
"type": "number"
},
"couponGroupNamePattern": {
"type": "string"
},
"couponMaxSize": {
"type": "number"
},
"couponTimeout": {
"type": "number"
},
"openCalendarId": {
"type": "number"
},
"openingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"closingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"allowSpectators": {
"type": "boolean",
"description": "Allow coupons with spectators that can only enter the parent queue. Only for type==flow and type==max_population"
},
"hasExternalCalculations": {
"type": "boolean",
"description": "Can the expected wait time be calculated externally. Only for type==flow and type==max_population"
},
"flowWindowSize": {
"type": "number",
"description": "Seconds to look back to calculate the flow. Only for type==flow and type==max_population"
},
"minFlowPerHour": {
"type": "number",
"description": "The minimal flow to use. Only for type==flow and type==max_population"
},
"minWelcomed": {
"type": "number",
"description": "Always has at least this many welcomed. Only for type==flow"
},
"minBoarded": {
"type": "number",
"description": "Always has at least this many boarded (in the physical queue). Only for type==flow"
},
"estimatedNoShowBeforeWelcome": {
"type": "number",
"description": "Percentage of join tickets that dequeues before being welcomed"
},
"estimatedNoShowAfterWelcome": {
"type": "number",
"description": "Percentage of welcomed tickets that does not board"
},
"estimatedArrivalTime": {
"type": "number",
"description": "Number of seconds after being welcomed guests are estimated to board"
},
"insideDuration": {
"type": [
"number",
"null"
],
"description": "How long, in seconds, is each ticket expected to be inside the zone"
},
"calendarWelcomeDuration": {
"type": [
"number",
"null"
],
"description": "How long before the booking time, in seconds, is a coupon welcomed to the queue. Only for type==calendar"
},
"childCouponAlsoBoardedAtChild": {
"type": "boolean",
"description": "When a coupon from a child queue is scanned should it also be marked as boarded at the child queue?"
},
"minAdjustedWelcomedTime": {
"type": "number",
"description": "How much adjustment, in seconds, is needed before coupon groups are marked as having an adjusted welcomed time"
},
"warningPreBuffer": {
"type": [
"number",
"null"
],
"description": "Pre-buffer, in seconds, for double-booking warning calculations"
},
"warningPostBuffer": {
"type": [
"number",
"null"
],
"description": "Post-buffer, in seconds, for double-booking warning calculations"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"zoneId",
"attractionZoneId",
"physicalQueueZoneId",
"parkZoneId",
"isActive",
"type",
"maxPopulation",
"couponGroupMaxSize",
"couponGroupNamePattern",
"couponMaxSize",
"couponTimeout",
"openingDuration",
"closingDuration",
"allowSpectators",
"hasExternalCalculations",
"flowWindowSize",
"minFlowPerHour",
"minWelcomed",
"minBoarded",
"estimatedNoShowBeforeWelcome",
"estimatedNoShowAfterWelcome",
"estimatedArrivalTime",
"insideDuration",
"calendarWelcomeDuration",
"childCouponAlsoBoardedAtChild",
"minAdjustedWelcomedTime",
"warningPreBuffer",
"warningPostBuffer"
]
}
204
Get calculations used estimated welcome timeGET/virtualQueues/{virtualQueueId}/calculations{?couponGroupId}
Example URI
- virtualQueueId
number
(required) Example: 230- couponGroupId
string
(optional) Example: nextID of the coupon group to calculate for or one of the keywords “next”, “newest” or “none”
200
Headers
Content-Type: application/json
Body
{
"couponGroup": {
"syncId": 999,
"isDeleted": false,
"id": 250,
"virtualQueueId": 230,
"name": "Crew of Serenity",
"time": "2018-08-05T12:30:00+02:00",
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"adjustedWelcomedTime": "2018-08-05T12:30:00+02:00",
"status": "in queue",
"type": "physical"
},
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"flowPerHour": 0,
"flowWindowSize": 0,
"ticketsExitedInWindowSize": 0,
"currentFlowPerHour": 0,
"minFlowPerHour": 0,
"minWelcomed": 0,
"minBoarded": 0,
"parentMaxPopulation": 0,
"parentCurrentPopulation": 0,
"currentlyInVirtualQueue": 0,
"currentlyInPhysicalQueue": 0,
"currentlyWelcomedVirtual": 0,
"currentlyWelcomedPhysical": 0,
"currentlyInBufferZone": 0,
"currentlyInAttraction": 0,
"noShowBeforeWelcomedPercentage": 0,
"noShowBeforeWelcomed": 0,
"noShowBeforeBoardedPercentage": 0,
"noShowBeforeBoarded": 0,
"welcomedBefore": 0,
"boardedBefore": 0,
"estimatedArrivalTime": 0,
"timeBetweenTickets": 0,
"expectedWaitTimeMinutes": 0,
"externalExpectedWaitTimeMinutes": 0,
"opensAt": "12:15",
"nextStartTimeDifference": 0,
"pausedUntil": "2018-08-05T12:30:00+02:00",
"untilDifference": 0
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"couponGroup": {
"type": [
"object",
"null"
],
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": [
"string",
"null"
],
"description": "Only required for calendar virtual queues"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the group would be welcomed"
},
"adjustedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The adjusted calculated time the group would be welcomed"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"boarded",
"dequeued"
]
},
"type": {
"type": "string",
"enum": [
"physical",
"virtual"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueId",
"name",
"time",
"expectedWelcomedTime",
"adjustedWelcomedTime",
"status",
"type"
]
},
"expectedWelcomedTime": {
"type": "string"
},
"flowPerHour": {
"type": "number"
},
"flowWindowSize": {
"type": "number"
},
"ticketsExitedInWindowSize": {
"type": "number"
},
"currentFlowPerHour": {
"type": "number"
},
"minFlowPerHour": {
"type": "number"
},
"minWelcomed": {
"type": "number"
},
"minBoarded": {
"type": "number"
},
"parentMaxPopulation": {
"type": "number"
},
"parentCurrentPopulation": {
"type": "number"
},
"currentlyInVirtualQueue": {
"type": "number"
},
"currentlyInPhysicalQueue": {
"type": "number"
},
"currentlyWelcomedVirtual": {
"type": "number"
},
"currentlyWelcomedPhysical": {
"type": "number"
},
"currentlyInBufferZone": {
"type": "number"
},
"currentlyInAttraction": {
"type": "number"
},
"noShowBeforeWelcomedPercentage": {
"type": "number"
},
"noShowBeforeWelcomed": {
"type": "number"
},
"noShowBeforeBoardedPercentage": {
"type": "number"
},
"noShowBeforeBoarded": {
"type": "number"
},
"welcomedBefore": {
"type": "number"
},
"boardedBefore": {
"type": "number"
},
"estimatedArrivalTime": {
"type": "number"
},
"timeBetweenTickets": {
"type": "number"
},
"expectedWaitTimeMinutes": {
"type": "number"
},
"externalExpectedWaitTimeMinutes": {
"type": [
"number",
"null"
]
},
"opensAt": {
"type": [
"string",
"null"
]
},
"nextStartTimeDifference": {
"type": "number"
},
"pausedUntil": {
"type": "string"
},
"untilDifference": {
"type": "number"
}
},
"required": [
"couponGroup",
"expectedWelcomedTime",
"flowPerHour",
"flowWindowSize",
"ticketsExitedInWindowSize",
"currentFlowPerHour",
"minFlowPerHour",
"minWelcomed",
"minBoarded",
"parentMaxPopulation",
"parentCurrentPopulation",
"currentlyInVirtualQueue",
"currentlyInPhysicalQueue",
"currentlyWelcomedVirtual",
"currentlyWelcomedPhysical",
"currentlyInBufferZone",
"currentlyInAttraction",
"noShowBeforeWelcomedPercentage",
"noShowBeforeWelcomed",
"noShowBeforeBoardedPercentage",
"noShowBeforeBoarded",
"welcomedBefore",
"boardedBefore",
"estimatedArrivalTime",
"timeBetweenTickets",
"expectedWaitTimeMinutes",
"externalExpectedWaitTimeMinutes",
"opensAt",
"nextStartTimeDifference",
"pausedUntil",
"untilDifference"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Set status for a virtual queuePUT/virtualQueues/{virtualQueueId}/status
Example URI
- virtualQueueId
number
(required) Example: 230
Headers
Content-Type: application/json
Body
{
"status": "open",
"virtualQueueStatusMessageId": 300,
"until": "2019-01-01T05:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"open",
"welcoming",
"paused",
"closing",
"closed"
]
},
"virtualQueueStatusMessageId": {
"type": "number",
"description": "The message to show to users. Only for \"paused\" and \"closed\""
},
"until": {
"type": [
"string",
"null"
],
"description": "The time at which the status is expected to change"
}
},
"required": [
"status",
"until"
]
}
204
Delete virtual queueDELETE/virtualQueues/{virtualQueueId}
Example URI
- virtualQueueId
number
(required) Example: 230
204
Welcome the next coupon group in the virtual queuePOST/virtualQueues/welcomeNextCouponGroup
Example URI
Headers
Content-Type: application/json
Body
{
"count": 1,
"type": "physical"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "How many coupons to welcome"
},
"type": {
"type": "string",
"enum": [
"physical",
"virtual"
]
}
}
}
200
Headers
Content-Type: application/json
Body
{
"count": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "How many coupons were actually welcomed"
}
},
"required": [
"count"
]
}
Get all currently welcomed ticketsGET/virtualQueues/{virtualQueueId}/welcomedTickets
Example URI
- virtualQueueId
number
(required) Example: 230
200
Headers
Content-Type: application/json
Body
[
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get all currently welcomed tickets (public)GET/virtualQueues/{virtualQueueUuid}/welcomedTickets
Example URI
- virtualQueueUuid
string
(required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57UUID
200
Headers
Content-Type: application/json
Body
[
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get the next tickets that will be welcomedGET/virtualQueues/{virtualQueueId}/nextToWelcomeTickets{?count,type}
Example URI
- virtualQueueId
number
(required) Example: 230- count
number
(optional) Example: 10How many tickets to return (default is 10)
- type
enum
(optional)Choices:
physical
virtual
200
Headers
Content-Type: application/json
Body
[
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get the next tickets that will be welcomed (public)GET/virtualQueues/{virtualQueueUuid}/nextToWelcomeTickets{?count,type}
Example URI
- virtualQueueUuid
string
(required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57UUID
- count
number
(optional) Example: 10How many tickets to return (default is 10)
- type
enum
(optional)Choices:
physical
virtual
200
Headers
Content-Type: application/json
Body
[
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get all calendar day periods for a queue for todayGET/virtualQueues/{virtualQueueId}/calendarDayPeriods
Example URI
- virtualQueueId
number
(required) Example: 230
200
Headers
Content-Type: application/json
Body
[
{
"date": "2020-12-24",
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get all calendar day periods for a queue for today (public)GET/virtualQueues/{virtualQueueUuid}/calendarDayPeriods
Example URI
- virtualQueueUuid
string
(required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57UUID
200
Headers
Content-Type: application/json
Body
[
{
"date": "2020-12-24",
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get all calendar day periods with info for a queue for todayGET/virtualQueues/{virtualQueueId}/calendarDayPeriods/info
Example URI
- virtualQueueId
number
(required) Example: 230
200
Headers
Content-Type: application/json
Body
[
{
"date": "2020-12-24",
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled",
"calendarDayId": 215,
"dayTypePeriodId": 205,
"calendarDayPeriodId": 218,
"totalCouponCount": 11,
"totalTicketCount": 25,
"activeCouponCount": 7,
"activeTicketCount": 18,
"usedCouponCount": 2,
"usedTicketCount": 4
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Virtual Queue Coupons ¶
Virtual queue coupons are how tickets are added to a virtual queue.
List all virtual queue couponsGET/virtualQueues/{virtualQueueId}/coupons
Example URI
- virtualQueueId
number
(required) Example: 230
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
List all virtual queue coupons with infoGET/virtualQueues/{virtualQueueId}/coupons/withInfo
Example URI
- virtualQueueId
number
(required) Example: 230
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"expectedWaitTimeMinutes": 14,
"waitTimeInterval": "2018-08-08T12:00:00+02:00",
"tickets": [
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
List virtual queue coupons (public)GET/virtualQueues/{virtualQueueUuid}/coupons/withInfo{?tokenValue,tokenTypeName}
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- virtualQueueUuid
string
(required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57UUID
- tokenValue
string
(required) Example: 04E56FFAE65380Find coupons for this token
- tokenTypeName
string
(required) Example: NFC UID
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"expectedWaitTimeMinutes": 14,
"waitTimeInterval": "2018-08-08T12:00:00+02:00",
"tickets": [
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
400
Headers
Content-Type: application/json
Body
{
"error": "A property must be specified",
"errorCode": 1002
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Create a new virtual queue couponPOST/virtualQueues/{virtualQueueId}/coupons
Example URI
- virtualQueueId
number
(required) Example: 230
Headers
Content-Type: application/json
Body
{
"priority": 100,
"time": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"tickets": [
{
"ticketId": 100,
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeId": 110,
"tokenTypeName": "NFC UID",
"ticketName": "Malcolm Reynolds",
"isSpectator": false
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"time": {
"type": "string",
"description": "Time for a virtual queue with a calendar. Either just the time (HH:MM) or a full timestamp. NOTE: The time zone must match the organizers time zone, or the show time should be shifted accordingly"
},
"notWelcomedBeforeTime": {
"type": "string",
"description": "Do not welcome to the queue until after this time"
},
"tickets": {
"type": "array"
}
},
"required": [
"priority"
]
}
201
Headers
Content-Type: application/json
Location: /virtualQueues/coupons/{virtualQueueCouponId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"waitTimeInterval": "2018-08-08T12:00:00+02:00",
"tickets": [
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
],
"couponGroup": {
"syncId": 999,
"isDeleted": false,
"id": 250,
"virtualQueueId": 230,
"name": "Crew of Serenity",
"time": "2018-08-05T12:30:00+02:00",
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"adjustedWelcomedTime": "2018-08-05T12:30:00+02:00",
"status": "in queue",
"type": "physical"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
},
"waitTimeInterval": {
"type": "string",
"description": "The wait time interval that fits with the expected wait time"
},
"tickets": {
"type": "array"
},
"couponGroup": {
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": [
"string",
"null"
],
"description": "Only required for calendar virtual queues"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the group would be welcomed"
},
"adjustedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The adjusted calculated time the group would be welcomed"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"boarded",
"dequeued"
]
},
"type": {
"type": "string",
"enum": [
"physical",
"virtual"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueId",
"name",
"time",
"expectedWelcomedTime",
"adjustedWelcomedTime",
"status",
"type"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status",
"waitTimeInterval",
"tickets",
"couponGroup"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
400
Headers
Content-Type: application/json
Body
{
"error": "A property must be specified",
"errorCode": 1002
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
with already used name
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"name": "Malcolm Reynolds"
}
Schema
{
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}
400
Headers
Content-Type: application/json
Body
{
"error": "The name is already in use",
"errorCode": 1006
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
with invalid name
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"name": "Shiong mao niao"
}
Schema
{
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}
400
Headers
Content-Type: application/json
Body
{
"error": "The name contains invalid terms",
"errorCode": 1007
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
on closed virtual queue
Headers
Content-Type: application/json
400
Headers
Content-Type: application/json
Body
{
"error": "The virtual queue is closed",
"errorCode": 1009
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
on closing virtual queue
Headers
Content-Type: application/json
400
Headers
Content-Type: application/json
Body
{
"error": "The virtual queue is closing",
"errorCode": 1010
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
Create a new virtual queue coupon (alternative)POST/virtualQueues/coupons
Example URI
Headers
Content-Type: application/json
Body
{
"priority": 100,
"time": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"tickets": [
{
"ticketId": 100,
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeId": 110,
"tokenTypeName": "NFC UID",
"ticketName": "Malcolm Reynolds",
"isSpectator": false
}
],
"virtualQueueId": 230
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"time": {
"type": "string",
"description": "Time for a virtual queue with a calendar. Either just the time (HH:MM) or a full timestamp. NOTE: The time zone must match the organizers time zone, or the show time should be shifted accordingly"
},
"notWelcomedBeforeTime": {
"type": "string",
"description": "Do not welcome to the queue until after this time"
},
"tickets": {
"type": "array"
},
"virtualQueueId": {
"type": "number"
}
},
"required": [
"priority",
"virtualQueueId"
]
}
201
Headers
Content-Type: application/json
Location: /virtualQueues/coupons/{virtualQueueCouponId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"waitTimeInterval": "2018-08-08T12:00:00+02:00",
"tickets": [
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
],
"couponGroup": {
"syncId": 999,
"isDeleted": false,
"id": 250,
"virtualQueueId": 230,
"name": "Crew of Serenity",
"time": "2018-08-05T12:30:00+02:00",
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"adjustedWelcomedTime": "2018-08-05T12:30:00+02:00",
"status": "in queue",
"type": "physical"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
},
"waitTimeInterval": {
"type": "string",
"description": "The wait time interval that fits with the expected wait time"
},
"tickets": {
"type": "array"
},
"couponGroup": {
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": [
"string",
"null"
],
"description": "Only required for calendar virtual queues"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the group would be welcomed"
},
"adjustedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The adjusted calculated time the group would be welcomed"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"boarded",
"dequeued"
]
},
"type": {
"type": "string",
"enum": [
"physical",
"virtual"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueId",
"name",
"time",
"expectedWelcomedTime",
"adjustedWelcomedTime",
"status",
"type"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status",
"waitTimeInterval",
"tickets",
"couponGroup"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
400
Headers
Content-Type: application/json
Body
{
"error": "A property must be specified",
"errorCode": 1002
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
with already used name
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"name": "Malcolm Reynolds"
}
Schema
{
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}
400
Headers
Content-Type: application/json
Body
{
"error": "The name is already in use",
"errorCode": 1006
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
with invalid name
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"name": "Shiong mao niao"
}
Schema
{
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}
400
Headers
Content-Type: application/json
Body
{
"error": "The name contains invalid terms",
"errorCode": 1007
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
on closed virtual queue
Headers
Content-Type: application/json
400
Headers
Content-Type: application/json
Body
{
"error": "The virtual queue is closed",
"errorCode": 1009
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
on closing virtual queue
Headers
Content-Type: application/json
400
Headers
Content-Type: application/json
Body
{
"error": "The virtual queue is closing",
"errorCode": 1010
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
Create a new virtual queue coupon (public)POST/virtualQueues/{virtualQueueUuid}/coupons
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- virtualQueueUuid
string
(required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57UUID
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Body
{
"tickets": [
{
"ticketId": 100,
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeId": 110,
"tokenTypeName": "NFC UID",
"ticketName": "Malcolm Reynolds",
"isSpectator": false
}
],
"virtualQueueCouponGroupId": 250,
"virtualQueueCouponGroupUuid": "95389515-616f-11eb-93d6-0242c0a83003",
"time": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"tickets": {
"type": "array"
},
"virtualQueueCouponGroupId": {
"type": "number",
"description": "Use the tickets array to mark a ticket as a spectator"
},
"virtualQueueCouponGroupUuid": {
"type": "string",
"description": "Use the tickets array to mark a ticket as a spectator"
},
"time": {
"type": "string",
"description": "Time for a virtual queue with a calendar. Either just the time (HH:MM) or a full timestamp. NOTE: The time zone must match the organizers time zone, or the show time should be shifted accordingly"
},
"notWelcomedBeforeTime": {
"type": "string",
"description": "Do not welcome to the queue until after this time"
}
}
}
201
Headers
Content-Type: application/json
Location: /virtualQueues/coupons/{virtualQueueCouponUuid}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"expectedWaitTimeMinutes": 14,
"waitTimeInterval": "2018-08-08T12:00:00+02:00",
"tickets": [
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
},
"expectedWaitTimeMinutes": {
"type": "number",
"description": "Expected wait time in minutes"
},
"waitTimeInterval": {
"type": "string",
"description": "The wait time interval that fits with the expected wait time"
},
"tickets": {
"type": "array"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status",
"expectedWaitTimeMinutes",
"waitTimeInterval",
"tickets"
]
}
400
Headers
Content-Type: application/json
Body
{
"error": "A property must be specified",
"errorCode": 1002
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
on closed virtual queue
Headers
Content-Type: application/json
400
Headers
Content-Type: application/json
Body
{
"error": "The virtual queue is closed",
"errorCode": 1009
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
on closing virtual queue
Headers
Content-Type: application/json
400
Headers
Content-Type: application/json
Body
{
"error": "The virtual queue is closing",
"errorCode": 1010
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
Search for virtual queue couponsGET/virtualQueues/coupons{?status,offset,limit}
Search for access types for pagination.
Example URI
- status
array[string]
(optional)Array of status
- offset
number
(optional) Example: 0- limit
number
(optional) Example: 100
200
Headers
Content-Type: application/json
Body
{
"entities": [
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"expectedWaitTimeMinutes": 14,
"waitTimeInterval": "2018-08-08T12:00:00+02:00",
"tickets": [
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
]
}
],
"totalCount": 123
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"entities": {
"type": "array"
},
"totalCount": {
"type": "number",
"description": "The total number of coupons matching the search."
}
}
}
Virtual queue coupon ¶
Get virtual queue couponGET/virtualQueues/coupons/{virtualQueueCouponId}
Example URI
- virtualQueueCouponId
number
(required) Example: 250
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status"
]
}
Get virtual queue coupon (public)GET/virtualQueues/coupons/{virtualQueueCouponUuid}
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- virtualQueueCouponUuid
string
(required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003UUID
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Get virtual queue coupon with infoGET/virtualQueues/coupons/info
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"expectedWaitTimeMinutes": 14,
"waitTimeInterval": "2018-08-08T12:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
},
"expectedWaitTimeMinutes": {
"type": "number",
"description": "Expected wait time in minutes"
},
"waitTimeInterval": {
"type": "string",
"description": "The wait time interval that fits with the expected wait time"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status",
"expectedWaitTimeMinutes",
"waitTimeInterval"
]
}
Get virtual queue coupon with info (public)GET/virtualQueues/coupons/{virtualQueueCouponUuid}/info
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- virtualQueueCouponUuid
string
(required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003UUID
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"expectedWaitTimeMinutes": 14,
"waitTimeInterval": "2018-08-08T12:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
},
"expectedWaitTimeMinutes": {
"type": "number",
"description": "Expected wait time in minutes"
},
"waitTimeInterval": {
"type": "string",
"description": "The wait time interval that fits with the expected wait time"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status",
"expectedWaitTimeMinutes",
"waitTimeInterval"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Update virtual queue couponPUT/virtualQueues/coupons/{virtualQueueCouponId}
The ID in the URL and the body must match.
Example URI
- virtualQueueCouponId
number
(required) Example: 250
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status"
]
}
204
Welcome a virtual queue couponPUT/virtualQueues/coupons/welcome
Welcome the queue coupon now.
Example URI
204
Postpone a virtual queue couponPUT/virtualQueues/coupons/postpone
Postpone the queue coupon.
Only one of seconds
, minutes
and until
should be specified.
If none is specified the coupon will no longer be postponed.
Example URI
Headers
Content-Type: application/json
Body
{
"seconds": 900,
"minutes": 15,
"until": "2019-01-01T05:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"seconds": {
"type": "number",
"description": "How many seconds to postpone the coupon"
},
"minutes": {
"type": "number",
"description": "How many minutes to postpone the coupon"
},
"until": {
"type": "string",
"description": "The exact time to postpone the coupon to"
}
}
}
204
Postpone a virtual queue coupon (public)PUT/virtualQueues/coupons/{virtualQueueCouponUuid}/postpone
Postpone the queue coupon.
Only one of seconds
, minutes
and until
should be specified.
If none is specified the coupon will no longer be postponed.
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- virtualQueueCouponUuid
string
(required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003UUID
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Body
{
"seconds": 900,
"minutes": 15,
"until": "2019-01-01T05:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"seconds": {
"type": "number",
"description": "How many seconds to postpone the coupon"
},
"minutes": {
"type": "number",
"description": "How many minutes to postpone the coupon"
},
"until": {
"type": "string",
"description": "The exact time to postpone the coupon to"
}
}
}
204
400
Can also give the following errors:
- Cannot postpone a coupon belonging to a calendar queue
Headers
Content-Type: application/json
Body
{
"error": "Cannot change between these states",
"errorCode": 1005
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Delete virtual queue couponDELETE/virtualQueues/coupons/{virtualQueueCouponId}
Example URI
- virtualQueueCouponId
number
(required) Example: 250
204
Dequeue a virtual queue couponPUT/virtualQueues/coupons/dequeue
Example URI
204
Dequeue a virtual queue coupon (public)DELETE/virtualQueues/coupons/{virtualQueueCouponUuid}
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- virtualQueueCouponUuid
string
(required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003UUID
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
204
400
Headers
Content-Type: application/json
Body
{
"error": "Cannot change between these states",
"errorCode": 1005
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Virtual Queue Coupon Ticket ¶
Get all virtual queue coupon ticketsGET/virtualQueues/couponTickets{?virtualQueueCouponId}
Example URI
- virtualQueueCouponId
number
(required) Example: 250
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 270,
"virtualQueueCouponId": 240,
"ticketId": 100,
"isSpectator": false,
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"status": "in queue"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Virtual Queue Coupon Ticket ¶
Virtual queue coupon tickets are the ticket relation to the coupon.
Get virtual queue coupon ticketGET/virtualQueues/couponTickets/{virtualQueueCouponTicketId}
Example URI
- virtualQueueCouponTicketId
number
(required) Example: 260
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 270,
"virtualQueueCouponId": 240,
"ticketId": 100,
"isSpectator": false,
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"status": "in queue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueCouponId": {
"type": "number"
},
"ticketId": {
"type": [
"number",
"null"
]
},
"isSpectator": {
"type": "boolean",
"description": "This ticket is just a spectator"
},
"notWelcomedBeforeTime": {
"type": "string",
"description": "Do not welcome to the queue until after this time"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"dequeued",
"timed out",
"boarded",
"boarded at parent",
"exited"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueCouponId",
"ticketId",
"isSpectator",
"notWelcomedBeforeTime",
"status"
]
}
Update virtual queue coupon ticketPUT/virtualQueues/couponTickets/{virtualQueueCouponTicketId}
The ID in the URL and the body must match.
Example URI
- virtualQueueCouponTicketId
number
(required) Example: 260
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 270,
"virtualQueueCouponId": 240,
"ticketId": 100,
"isSpectator": false,
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"status": "in queue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueCouponId": {
"type": "number"
},
"ticketId": {
"type": [
"number",
"null"
]
},
"isSpectator": {
"type": "boolean",
"description": "This ticket is just a spectator"
},
"notWelcomedBeforeTime": {
"type": "string",
"description": "Do not welcome to the queue until after this time"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"dequeued",
"timed out",
"boarded",
"boarded at parent",
"exited"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueCouponId",
"ticketId",
"isSpectator",
"notWelcomedBeforeTime",
"status"
]
}
204
Remove virtual queue coupon ticketDELETE/virtualQueues/couponTickets/{virtualQueueCouponTicketId}
Remove a ticket from a coupon.
Example URI
- virtualQueueCouponTicketId
number
(required) Example: 260
204
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Welcome virtual queue coupon ticketPUT/virtualQueues/couponTickets/{virtualQueueCouponTicketId}/welcome
Welcome a single ticket in a coupon.
Example URI
- virtualQueueCouponTicketId
number
(required) Example: 260
204
400
Headers
Content-Type: application/json
Body
{
"error": "Cannot change between these states",
"errorCode": 1005
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Postpone virtual queue coupon ticket (public)PUT/virtualQueues/couponTickets/{virtualQueueCouponTicketId}/postpone
Postpone a single ticket in a coupon.
Only one of seconds
, minutes
and until
should be specified.
If none is specified the coupon ticket will no longer be postponed.
Example URI
- virtualQueueCouponTicketId
number
(required) Example: 260
Headers
Content-Type: application/json
Body
{
"seconds": 900,
"minutes": 15,
"until": "2019-01-01T05:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"seconds": {
"type": "number",
"description": "How many seconds to postpone the coupon"
},
"minutes": {
"type": "number",
"description": "How many minutes to postpone the coupon"
},
"until": {
"type": "string",
"description": "The exact time to postpone the coupon to"
}
}
}
204
400
Can also give the following errors:
- Cannot postpone a coupon belonging to a calendar queue
Headers
Content-Type: application/json
Body
{
"error": "Cannot change between these states",
"errorCode": 1005
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Dequeue virtual queue coupon ticketPUT/virtualQueues/couponTickets/{virtualQueueCouponTicketId}/dequeue
Dequeue a single ticket in a coupon.
Example URI
- virtualQueueCouponTicketId
number
(required) Example: 260
204
400
Headers
Content-Type: application/json
Body
{
"error": "Cannot change between these states",
"errorCode": 1005
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Virtual queue coupon ticket log entriesGET/virtualQueues/couponTickets/{virtualQueueCouponTicketId}/log
Example URI
- virtualQueueCouponTicketId
number
(required) Example: 260
200
Headers
Content-Type: application/json
Body
[
{
"id": 272,
"virtualQueueCouponTicketId": 270,
"insertTime": "2018-08-05T12:30:00+02:00",
"action": "added",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"deviceId": 70,
"entranceId": 50
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Virtual Queue Coupon Tickets by coupon ¶
Virtual queue coupon tickets are the ticket relation to the coupon.
List all virtual queue coupon ticketsGET/virtualQueues/coupons/{virtualQueueCouponId}/tickets
Example URI
- virtualQueueCouponId
number
(required) Example: 250
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 270,
"virtualQueueCouponId": 240,
"ticketId": 100,
"isSpectator": false,
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"status": "in queue"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new virtual queue coupon ticketPOST/virtualQueues/coupons/{virtualQueueCouponId}/tickets
Example URI
- virtualQueueCouponId
number
(required) Example: 250
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"virtualQueueCouponId": 240,
"ticketId": 100,
"isSpectator": false,
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"status": "in queue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"virtualQueueCouponId": {
"type": "number"
},
"ticketId": {
"type": [
"number",
"null"
]
},
"isSpectator": {
"type": "boolean",
"description": "This ticket is just a spectator"
},
"notWelcomedBeforeTime": {
"type": "string",
"description": "Do not welcome to the queue until after this time"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"dequeued",
"timed out",
"boarded",
"boarded at parent",
"exited"
]
}
},
"required": [
"syncId",
"isDeleted",
"virtualQueueCouponId",
"ticketId",
"isSpectator",
"notWelcomedBeforeTime",
"status"
]
}
201
Headers
Content-Type: application/json
Location: /virtualQueues/coupons/{virtualQueueCouponId}/tickets/{ticketId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 270,
"virtualQueueCouponId": 240,
"ticketId": 100,
"isSpectator": false,
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"status": "in queue",
"msgType": "VirtualQueueCouponTicket"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueCouponId": {
"type": "number"
},
"ticketId": {
"type": [
"number",
"null"
]
},
"isSpectator": {
"type": "boolean",
"description": "This ticket is just a spectator"
},
"notWelcomedBeforeTime": {
"type": "string",
"description": "Do not welcome to the queue until after this time"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"dequeued",
"timed out",
"boarded",
"boarded at parent",
"exited"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueCouponId",
"ticketId",
"isSpectator",
"notWelcomedBeforeTime",
"status",
"msgType"
]
}
Virtual queue coupon ticket by coupon ¶
Add a ticket from a virtual queue coupon groupPOST/virtualQueues/coupons/{virtualQueueCouponId}/tickets/{ticketId}
Example URI
- virtualQueueCouponId
number
(required) Example: 250- ticketId
number
(required) Example: 100
204
Get virtual queue coupon ticketGET/virtualQueues/coupons/{virtualQueueCouponId}/tickets/{ticketId}
Example URI
- virtualQueueCouponId
number
(required) Example: 250- ticketId
number
(required) Example: 100
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 270,
"virtualQueueCouponId": 240,
"ticketId": 100,
"isSpectator": false,
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"status": "in queue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueCouponId": {
"type": "number"
},
"ticketId": {
"type": [
"number",
"null"
]
},
"isSpectator": {
"type": "boolean",
"description": "This ticket is just a spectator"
},
"notWelcomedBeforeTime": {
"type": "string",
"description": "Do not welcome to the queue until after this time"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"dequeued",
"timed out",
"boarded",
"boarded at parent",
"exited"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueCouponId",
"ticketId",
"isSpectator",
"notWelcomedBeforeTime",
"status"
]
}
Update virtual queue coupon ticketPUT/virtualQueues/coupons/{virtualQueueCouponId}/tickets/{ticketId}
The ID in the URL and the body must match.
Example URI
- virtualQueueCouponId
number
(required) Example: 250- ticketId
number
(required) Example: 100
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 270,
"virtualQueueCouponId": 240,
"ticketId": 100,
"isSpectator": false,
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"status": "in queue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueCouponId": {
"type": "number"
},
"ticketId": {
"type": [
"number",
"null"
]
},
"isSpectator": {
"type": "boolean",
"description": "This ticket is just a spectator"
},
"notWelcomedBeforeTime": {
"type": "string",
"description": "Do not welcome to the queue until after this time"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"dequeued",
"timed out",
"boarded",
"boarded at parent",
"exited"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueCouponId",
"ticketId",
"isSpectator",
"notWelcomedBeforeTime",
"status"
]
}
204
Postpone virtual queue coupon ticket by coupon (public)PUT/virtualQueues/coupons/{virtualQueueCouponUuid}/tickets/{ticketId}/postpone
Postpone a single ticket in a coupon.
Only one of seconds
, minutes
and until
should be specified.
If none is specified the coupon ticket will no longer be postponed.
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- virtualQueueCouponUuid
string
(required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003UUID
- ticketId
number
(required) Example: 100
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Body
{
"seconds": 900,
"minutes": 15,
"until": "2019-01-01T05:00:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"seconds": {
"type": "number",
"description": "How many seconds to postpone the coupon"
},
"minutes": {
"type": "number",
"description": "How many minutes to postpone the coupon"
},
"until": {
"type": "string",
"description": "The exact time to postpone the coupon to"
}
}
}
204
400
Can also give the following errors:
- Cannot postpone a coupon ticket belonging to a calendar queue
Headers
Content-Type: application/json
Body
{
"error": "Cannot change between these states",
"errorCode": 1005
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Delete virtual queue coupon ticketDELETE/virtualQueues/coupons/{virtualQueueCouponId}/tickets/{ticketId}
Example URI
- virtualQueueCouponId
number
(required) Example: 250- ticketId
number
(required) Example: 100
204
Dequeue virtual queue coupon ticket (public)DELETE/virtualQueues/coupons/{virtualQueueCouponUuid}/tickets/{ticketId}
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- virtualQueueCouponUuid
string
(required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003UUID
- ticketId
number
(required) Example: 100
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
204
400
Headers
Content-Type: application/json
Body
{
"error": "Cannot change between these states",
"errorCode": 1005
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Coupon Tickets for Physical Queue ¶
List all coupon tickets for physical queueGET/virtualQueues/physicalCouponTickets{?virtualQueueId,onlyActive}
Example URI
- virtualQueueId
number
(optional) Example: 230- onlyActive
boolean
(optional) Example: true
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 350,
"virtualQueueId": 230,
"ticketId": 100,
"status": "in queue",
"virtualQueueCouponTicketId": 270
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
List all coupon tickets for physical queue with infoGET/virtualQueues/physicalCouponTickets/withInfo
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 350,
"virtualQueueId": 230,
"ticketId": 100,
"status": "in queue",
"virtualQueueCouponTicketId": 270,
"ticket": {
"name": "Malcolm Reynolds",
"tokens": [
{
"tokenTypeId": 110,
"value": "04E56FFAE65380"
}
]
}
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create coupon ticket for physical queuePOST/virtualQueues/physicalCouponTickets{?virtualQueueId,onlyActive}
Either ticketId or tokenTypeId and tokenValue must be specified.
Example URI
- virtualQueueId
number
(optional) Example: 230- onlyActive
boolean
(optional) Example: true
Headers
Content-Type: application/json
Body
{
"virtualQueueId": 230,
"ticketId": 100,
"tokenTypeId": 110,
"tokenValue": "04E56FFAE65380"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"virtualQueueId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"tokenTypeId": {
"type": "number"
},
"tokenValue": {
"type": "string"
}
},
"required": [
"virtualQueueId"
]
}
201
Headers
Content-Type: application/json
Location: /virtualQueues/physicalCouponTickets/{physicalCouponTicketId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 350,
"virtualQueueId": 230,
"ticketId": 100,
"status": "in queue",
"virtualQueueCouponTicketId": 270
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"in queue",
"dequeued",
"boarded"
]
},
"virtualQueueCouponTicketId": {
"type": [
"number",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueId",
"ticketId",
"status",
"virtualQueueCouponTicketId"
]
}
Virtual Queue Coupon Ticket for Physical Queue ¶
Get virtual queue coupon ticket for physical queueGET/virtualQueues/physicalCouponTickets/{physicalCouponTicketId}
Example URI
- physicalCouponTicketId
number
(required) Example: 350
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 350,
"virtualQueueId": 230,
"ticketId": 100,
"status": "in queue",
"virtualQueueCouponTicketId": 270
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"in queue",
"dequeued",
"boarded"
]
},
"virtualQueueCouponTicketId": {
"type": [
"number",
"null"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueId",
"ticketId",
"status",
"virtualQueueCouponTicketId"
]
}
Dequeue virtual queue coupon ticket for physical queuePUT/virtualQueues/physicalCouponTickets/{physicalCouponTicketId}/dequeue
Example URI
- physicalCouponTicketId
number
(required) Example: 350
204
400
Headers
Content-Type: application/json
Body
{
"error": "Cannot change between these states",
"errorCode": 1005
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Virtual queue coupon ticket for physical queue log entriesGET/virtualQueues/physicalCouponTickets/{physicalCouponTicketId}/log
Example URI
- physicalCouponTicketId
number
(required) Example: 350
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"virtualQueuePhysicalCouponTicketId": 350
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Virtual Queue Coupon Groups ¶
Virtual queues coupon groups is used for grouping multiple coupons together and welcome all at once.
List all virtual queue coupon groupsGET/virtualQueues/couponGroups{?virtualQueueId}
Example URI
- virtualQueueId
number
(required) Example: 230
200
Headers
Content-Type: application/json
Body
[
{
"syncId": 999,
"isDeleted": false,
"id": 250,
"virtualQueueId": 230,
"name": "Crew of Serenity",
"time": "2018-08-05T12:30:00+02:00",
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"adjustedWelcomedTime": "2018-08-05T12:30:00+02:00",
"status": "in queue",
"type": "physical"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
List all virtual coupon groups with coupons and tickets ¶
-
Response 200 (application/json)
- Attributes (array[VirtualQueueCouponGroupWithInfo])
-
Response 400 (application/json)
- Attributes (MissingPropertyError)
-
Response 404 (application/json)
- Attributes (NotFoundError)
Create a new virtual queue coupon groupPOST/virtualQueues/couponGroups
These are created automatically when a coupon is created.
Example URI
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": null,
"virtualQueueId": 230,
"name": "Crew of Serenity",
"time": "2018-08-05T12:30:00+02:00",
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"adjustedWelcomedTime": "2018-08-05T12:30:00+02:00",
"status": "in queue",
"type": "physical"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"virtualQueueId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": [
"string",
"null"
],
"description": "Only required for calendar virtual queues"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the group would be welcomed"
},
"adjustedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The adjusted calculated time the group would be welcomed"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"boarded",
"dequeued"
]
},
"type": {
"type": "string",
"enum": [
"physical",
"virtual"
]
}
},
"required": [
"syncId",
"isDeleted",
"virtualQueueId",
"name",
"time",
"expectedWelcomedTime",
"adjustedWelcomedTime",
"status",
"type"
]
}
201
Headers
Content-Type: application/json
Location: /virtualQueues/couponGroups/{virtualQueueCouponGroupId}
Body
{
"syncId": 999,
"isDeleted": false,
"id": 250,
"virtualQueueId": 230,
"name": "Crew of Serenity",
"time": "2018-08-05T12:30:00+02:00",
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"adjustedWelcomedTime": "2018-08-05T12:30:00+02:00",
"status": "in queue",
"type": "physical"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": [
"string",
"null"
],
"description": "Only required for calendar virtual queues"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the group would be welcomed"
},
"adjustedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The adjusted calculated time the group would be welcomed"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"boarded",
"dequeued"
]
},
"type": {
"type": "string",
"enum": [
"physical",
"virtual"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueId",
"name",
"time",
"expectedWelcomedTime",
"adjustedWelcomedTime",
"status",
"type"
]
}
400
Headers
Content-Type: application/json
Body
{
"error": "A property must be specified",
"errorCode": 1002
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error",
"errorCode"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Virtual queue coupon group ¶
Get virtual queue coupon groupGET/virtualQueues/couponGroups/{virtualQueueCouponGroupId}
Example URI
- virtualQueueCouponGroupId
number
(required) Example: 260
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 250,
"virtualQueueId": 230,
"name": "Crew of Serenity",
"time": "2018-08-05T12:30:00+02:00",
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"adjustedWelcomedTime": "2018-08-05T12:30:00+02:00",
"status": "in queue",
"type": "physical"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": [
"string",
"null"
],
"description": "Only required for calendar virtual queues"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the group would be welcomed"
},
"adjustedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The adjusted calculated time the group would be welcomed"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"boarded",
"dequeued"
]
},
"type": {
"type": "string",
"enum": [
"physical",
"virtual"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueId",
"name",
"time",
"expectedWelcomedTime",
"adjustedWelcomedTime",
"status",
"type"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Entity not found",
"errorCode": "404"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "string",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Update virtual queue coupon groupPUT/virtualQueues/couponGroups/{virtualQueueCouponGroupId}
The ID in the URL and the body must match.
Example URI
- virtualQueueCouponGroupId
number
(required) Example: 260
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 250,
"virtualQueueId": 230,
"name": "Crew of Serenity",
"time": "2018-08-05T12:30:00+02:00",
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"adjustedWelcomedTime": "2018-08-05T12:30:00+02:00",
"status": "in queue",
"type": "physical"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueId": {
"type": "number"
},
"name": {
"type": "string"
},
"time": {
"type": [
"string",
"null"
],
"description": "Only required for calendar virtual queues"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the group would be welcomed"
},
"adjustedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The adjusted calculated time the group would be welcomed"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"boarded",
"dequeued"
]
},
"type": {
"type": "string",
"enum": [
"physical",
"virtual"
]
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueId",
"name",
"time",
"expectedWelcomedTime",
"adjustedWelcomedTime",
"status",
"type"
]
}
204
Delete virtual queue coupon groupDELETE/virtualQueues/couponGroups/{virtualQueueCouponGroupId}
Example URI
- virtualQueueCouponGroupId
number
(required) Example: 260
204
Virtual Queue Status Messages ¶
List all virtual queue status messagesGET/virtualQueues/statusMessages
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
List all virtual queue status messages with their translationsGET/virtualQueues/statusMessages/translations
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed",
"message": [
"Hello, world!"
]
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a virtual queue status messagePOST/virtualQueues/statusMessages
Example URI
Headers
Content-Type: application/json
Body
{
"id": null,
"organizerId": null,
"name": "Bad weather",
"type": "closed",
"message": []
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": [
"number",
"null"
]
},
"organizerId": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"closed",
"paused"
]
},
"message": {
"type": "array",
"description": "Indexed by language code"
}
},
"required": [
"name",
"type",
"message"
]
}
201
Headers
Content-Type: application/json
Location: /virtualQueues/statusMessages/{statusMessageId}
Body
{
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed",
"message": [
"Hello, world!"
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"closed",
"paused"
]
},
"message": {
"type": "array",
"description": "Indexed by language code"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"message"
]
}
Virtual Queue Status Message ¶
Get virtual queue status messageGET/virtualQueues/statusMessages/{statusMessageId}
Example URI
- statusMessageId
number
(required) Example: 300
200
Headers
Content-Type: application/json
Body
{
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"closed",
"paused"
]
}
},
"required": [
"id",
"organizerId",
"name",
"type"
]
}
Get virtual queue status message with translationsGET/virtualQueues/statusMessages/translations
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed",
"message": [
"Hello, world!"
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"closed",
"paused"
]
},
"message": {
"type": "array",
"description": "Indexed by language code"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"message"
]
}
Update virtual queue status messagePUT/virtualQueues/statusMessages/{statusMessageId}
The ID in the URL and the body must match.
Example URI
- statusMessageId
number
(required) Example: 300
Headers
Content-Type: application/json
Body
{
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed",
"message": [
"Hello, world!"
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"closed",
"paused"
]
},
"message": {
"type": "array",
"description": "Indexed by language code"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"message"
]
}
204
Delete virtual queue status messageDELETE/virtualQueues/statusMessages/{statusMessageId}
Example URI
- statusMessageId
number
(required) Example: 300
204
Blacklist Profanity Terms ¶
Profanity Blacklist ¶
Blacklist profanity terms that are not allowed for use in virtual queue names.
List all profanity termsGET/profanityBlacklist
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"id": 290,
"organizerId": 10,
"term": "Shit"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new profanity termPOST/profanityBlacklist
Example URI
Headers
Content-Type: application/json
Body
{
"id": null,
"organizerId": null,
"term": "Shit"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": [
"number",
"null"
]
},
"organizerId": {
"type": [
"number",
"null"
]
},
"term": {
"type": "string"
}
},
"required": [
"term"
]
}
201
Headers
Content-Type: application/json
Location: /profanityBlacklist/{profanityId}
Body
{
"id": 290,
"organizerId": 10,
"term": "Shit"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"term": {
"type": "string"
}
},
"required": [
"id",
"organizerId",
"term"
]
}
Set multiple termsPOST/profanityBlacklist/multiple
Add, remove, or replace multiple profanity terms at once.
-
add
: Will add the specified terms to the list -
remove
: Will remove the specified terms from the list -
replace
: Will add the specified terms to the list, and remove any terms from the list that are not specified
Example URI
Headers
Content-Type: application/json
Body
{
"terms": [
"Hello, world!"
],
"mode": "add"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"terms": {
"type": "array"
},
"mode": {
"type": "string",
"enum": [
"add",
"remove",
"replace"
]
}
},
"required": [
"terms",
"mode"
]
}
204
Profanity Blacklist ¶
Get profanity termGET/profanityBlacklist/{profanityId}
Example URI
- profanityId
number
(required) Example: 290
200
Headers
Content-Type: application/json
Body
{
"id": 290,
"organizerId": 10,
"term": "Shit"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"term": {
"type": "string"
}
},
"required": [
"id",
"organizerId",
"term"
]
}
Update profanity termPUT/profanityBlacklist/{profanityId}
The ID in the URL and the body must match.
Example URI
- profanityId
number
(required) Example: 290
Headers
Content-Type: application/json
Body
{
"id": 290,
"organizerId": 10,
"term": "Shit"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"term": {
"type": "string"
}
},
"required": [
"id",
"organizerId",
"term"
]
}
204
Delete profanity termDELETE/profanityBlacklist/{profanityId}
Example URI
- profanityId
number
(required) Example: 290
204
Screens ¶
Screens ¶
Configuration of info screens used for displaying various information.
List all screensGET/screens
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"id": 320,
"organizerId": 10,
"name": "Currently inside",
"type": "scanning_feedback",
"data": {
"scannerIds": [
1
],
"showDuration": true,
"showZonePopulation": true,
"zoneId": 1,
"virtualQueueIds": [
1
],
"imageZoneId": 1,
"zoneIds": [
1
],
"eventId": 1
}
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new screenPOST/screens
Example URI
Headers
Content-Type: application/json
Body
{
"id": null,
"organizerId": null,
"name": "Currently inside",
"type": "scanning_feedback",
"data": {
"scannerIds": [],
"virtualQueueIds": [],
"zoneIds": []
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": [
"number",
"null"
]
},
"organizerId": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"scanning_feedback",
"virtual_queue_callout",
"zone_population"
]
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scannerIds": {
"type": "array",
"description": "Only for type scanning_feedback"
},
"showDuration": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"showZonePopulation": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"zoneId": {
"type": "number",
"description": "Only for type scanning_feedback"
},
"virtualQueueIds": {
"type": "array",
"description": "Only for type virtual_queue_callout"
},
"imageZoneId": {
"type": "number",
"description": "Only for type virtual_queue_callout"
},
"zoneIds": {
"type": "array",
"description": "Only for type zone_population"
},
"eventId": {
"type": "number",
"description": "Only for type zone_population"
}
},
"description": "Extra configurations specific for the type"
}
},
"required": [
"name",
"type",
"data"
]
}
201
Headers
Content-Type: application/json
Location: /screens/{screenId}
Body
{
"id": 320,
"organizerId": 10,
"name": "Currently inside",
"type": "scanning_feedback",
"data": {
"scannerIds": [
1
],
"showDuration": true,
"showZonePopulation": true,
"zoneId": 1,
"virtualQueueIds": [
1
],
"imageZoneId": 1,
"zoneIds": [
1
],
"eventId": 1
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"scanning_feedback",
"virtual_queue_callout",
"zone_population"
]
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scannerIds": {
"type": "array",
"description": "Only for type scanning_feedback"
},
"showDuration": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"showZonePopulation": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"zoneId": {
"type": "number",
"description": "Only for type scanning_feedback"
},
"virtualQueueIds": {
"type": "array",
"description": "Only for type virtual_queue_callout"
},
"imageZoneId": {
"type": "number",
"description": "Only for type virtual_queue_callout"
},
"zoneIds": {
"type": "array",
"description": "Only for type zone_population"
},
"eventId": {
"type": "number",
"description": "Only for type zone_population"
}
},
"description": "Extra configurations specific for the type"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"data"
]
}
Screen ¶
Get screenGET/screens/{screenId}
Example URI
- screenId
number
(required) Example: 320
200
Headers
Content-Type: application/json
Body
{
"id": 320,
"organizerId": 10,
"name": "Currently inside",
"type": "scanning_feedback",
"data": {
"scannerIds": [
1
],
"showDuration": true,
"showZonePopulation": true,
"zoneId": 1,
"virtualQueueIds": [
1
],
"imageZoneId": 1,
"zoneIds": [
1
],
"eventId": 1
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"scanning_feedback",
"virtual_queue_callout",
"zone_population"
]
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scannerIds": {
"type": "array",
"description": "Only for type scanning_feedback"
},
"showDuration": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"showZonePopulation": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"zoneId": {
"type": "number",
"description": "Only for type scanning_feedback"
},
"virtualQueueIds": {
"type": "array",
"description": "Only for type virtual_queue_callout"
},
"imageZoneId": {
"type": "number",
"description": "Only for type virtual_queue_callout"
},
"zoneIds": {
"type": "array",
"description": "Only for type zone_population"
},
"eventId": {
"type": "number",
"description": "Only for type zone_population"
}
},
"description": "Extra configurations specific for the type"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"data"
]
}
Get screen (public)GET/screens/code/{screenCode}
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- screenCode
string
(required) Example: XY12AB
Headers
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
{
"id": 320,
"organizerId": 10,
"name": "Currently inside",
"type": "scanning_feedback",
"data": {
"scannerIds": [
1
],
"showDuration": true,
"showZonePopulation": true,
"zoneId": 1,
"virtualQueueIds": [
1
],
"imageZoneId": 1,
"zoneIds": [
1
],
"eventId": 1
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"scanning_feedback",
"virtual_queue_callout",
"zone_population"
]
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scannerIds": {
"type": "array",
"description": "Only for type scanning_feedback"
},
"showDuration": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"showZonePopulation": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"zoneId": {
"type": "number",
"description": "Only for type scanning_feedback"
},
"virtualQueueIds": {
"type": "array",
"description": "Only for type virtual_queue_callout"
},
"imageZoneId": {
"type": "number",
"description": "Only for type virtual_queue_callout"
},
"zoneIds": {
"type": "array",
"description": "Only for type zone_population"
},
"eventId": {
"type": "number",
"description": "Only for type zone_population"
}
},
"description": "Extra configurations specific for the type"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"data"
]
}
Get screen with infoGET/screens/{screenId}/info
Example URI
- screenId
number
(required) Example: 320
200
Headers
Content-Type: application/json
Body
{
"id": 320,
"organizerId": 10,
"name": "Currently inside",
"type": "scanning_feedback",
"data": {
"scannerIds": [
1
],
"showDuration": true,
"showZonePopulation": true,
"zoneId": 1,
"virtualQueueIds": [
1
],
"imageZoneId": 1,
"zoneIds": [
1
],
"eventId": 1
},
"files": [
{
"id": 330,
"organizerId": 10,
"name": "Christmas colours",
"type": "stylesheet",
"subType": "raw",
"url": "Hello, world!"
}
],
"elements": [
{
"virtualQueues": [
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"status": "open",
"flowPerHour": 10,
"expectedWaitTimeMinutes": 14,
"externalExpectedWaitTimeMinutes": 14,
"virtualQueueStatusMessageId": 300,
"until": "2019-01-01T05:00:00+02:00",
"zoneName": "Backstage",
"organizerId": 10
}
],
"imageZone": {
"syncId": 999,
"isDeleted": false,
"id": 40,
"uuid": "22496567-bd39-11eb-9e95-0242c0a83002",
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640"
},
"zones": [
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"uuid": "22496567-bd39-11eb-9e95-0242c0a83002",
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640"
}
],
"event": {
"syncId": 999,
"isDeleted": false,
"id": 30,
"uuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"venueId": 10,
"type": "normal",
"name": "Smukfest 2018",
"startTime": "2018-08-08T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00",
"baseTime": "2018-08-08T10:00:00+02:00",
"imageUrl": "https://placekitten.com/480/640",
"isActive": true,
"requireUniqueTicketNames": false,
"useBlacklist": false
}
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"scanning_feedback",
"virtual_queue_callout",
"zone_population"
]
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scannerIds": {
"type": "array",
"description": "Only for type scanning_feedback"
},
"showDuration": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"showZonePopulation": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"zoneId": {
"type": "number",
"description": "Only for type scanning_feedback"
},
"virtualQueueIds": {
"type": "array",
"description": "Only for type virtual_queue_callout"
},
"imageZoneId": {
"type": "number",
"description": "Only for type virtual_queue_callout"
},
"zoneIds": {
"type": "array",
"description": "Only for type zone_population"
},
"eventId": {
"type": "number",
"description": "Only for type zone_population"
}
},
"description": "Extra configurations specific for the type"
},
"files": {
"type": "array",
"description": "All files related to the screen"
},
"elements": {
"type": "array",
"description": "Fields depending on the type of screen"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"data",
"files",
"elements"
]
}
Get screen with info (public)GET/screens/code/{screenCode}/info
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- screenCode
string
(required) Example: XY12AB
Headers
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
{
"id": 320,
"organizerId": 10,
"name": "Currently inside",
"type": "scanning_feedback",
"data": {
"scannerIds": [
1
],
"showDuration": true,
"showZonePopulation": true,
"zoneId": 1,
"virtualQueueIds": [
1
],
"imageZoneId": 1,
"zoneIds": [
1
],
"eventId": 1
},
"files": [
{
"id": 330,
"organizerId": 10,
"name": "Christmas colours",
"type": "stylesheet",
"subType": "raw",
"url": "Hello, world!"
}
],
"elements": [
{
"virtualQueues": [
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"status": "open",
"flowPerHour": 10,
"expectedWaitTimeMinutes": 14,
"externalExpectedWaitTimeMinutes": 14,
"virtualQueueStatusMessageId": 300,
"until": "2019-01-01T05:00:00+02:00",
"zoneName": "Backstage",
"organizerId": 10
}
],
"imageZone": {
"syncId": 999,
"isDeleted": false,
"id": 40,
"uuid": "22496567-bd39-11eb-9e95-0242c0a83002",
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640"
},
"zones": [
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"uuid": "22496567-bd39-11eb-9e95-0242c0a83002",
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640"
}
],
"event": {
"syncId": 999,
"isDeleted": false,
"id": 30,
"uuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"venueId": 10,
"type": "normal",
"name": "Smukfest 2018",
"startTime": "2018-08-08T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00",
"baseTime": "2018-08-08T10:00:00+02:00",
"imageUrl": "https://placekitten.com/480/640",
"isActive": true,
"requireUniqueTicketNames": false,
"useBlacklist": false
}
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"scanning_feedback",
"virtual_queue_callout",
"zone_population"
]
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scannerIds": {
"type": "array",
"description": "Only for type scanning_feedback"
},
"showDuration": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"showZonePopulation": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"zoneId": {
"type": "number",
"description": "Only for type scanning_feedback"
},
"virtualQueueIds": {
"type": "array",
"description": "Only for type virtual_queue_callout"
},
"imageZoneId": {
"type": "number",
"description": "Only for type virtual_queue_callout"
},
"zoneIds": {
"type": "array",
"description": "Only for type zone_population"
},
"eventId": {
"type": "number",
"description": "Only for type zone_population"
}
},
"description": "Extra configurations specific for the type"
},
"files": {
"type": "array",
"description": "All files related to the screen"
},
"elements": {
"type": "array",
"description": "Fields depending on the type of screen"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"data",
"files",
"elements"
]
}
Update screenPUT/screens/{screenId}
The ID in the URL and the body must match.
Example URI
- screenId
number
(required) Example: 320
Headers
Content-Type: application/json
Body
{
"id": 320,
"organizerId": 10,
"name": "Currently inside",
"type": "scanning_feedback",
"data": {
"scannerIds": [
1
],
"showDuration": true,
"showZonePopulation": true,
"zoneId": 1,
"virtualQueueIds": [
1
],
"imageZoneId": 1,
"zoneIds": [
1
],
"eventId": 1
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"scanning_feedback",
"virtual_queue_callout",
"zone_population"
]
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scannerIds": {
"type": "array",
"description": "Only for type scanning_feedback"
},
"showDuration": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"showZonePopulation": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"zoneId": {
"type": "number",
"description": "Only for type scanning_feedback"
},
"virtualQueueIds": {
"type": "array",
"description": "Only for type virtual_queue_callout"
},
"imageZoneId": {
"type": "number",
"description": "Only for type virtual_queue_callout"
},
"zoneIds": {
"type": "array",
"description": "Only for type zone_population"
},
"eventId": {
"type": "number",
"description": "Only for type zone_population"
}
},
"description": "Extra configurations specific for the type"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"data"
]
}
204
Delete screenDELETE/screens/{screenId}
Example URI
- screenId
number
(required) Example: 320
204
Screen files ¶
List all files for a screenGET/screens/{screenId}/files
Example URI
- screenId
number
(required) Example: 320
200
Headers
Content-Type: application/json
Body
[
{
"id": 330,
"organizerId": 10,
"name": "Christmas colours",
"type": "stylesheet",
"subType": "raw",
"url": "Hello, world!"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Screen file ¶
Add file to screenPUT/screens/{screenId}/files/{fileId}
Example URI
- screenId
number
(required) Example: 320- fileId
number
(required) Example: 30
204
Remove file from screenDELETE/screens/{screenId}/files/{fileId}
Example URI
- screenId
number
(required) Example: 320- fileId
number
(required) Example: 30
204
Text Groups ¶
Text Groups ¶
Groups of translations.
List all text groupsGET/textGroups
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"id": 400,
"organizerId": 10,
"area": "display_web_app",
"label": "vip_entrance",
"parentTextGroupId": 401
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new text groupPOST/textGroups
Example URI
Headers
Content-Type: application/json
Body
{
"id": null,
"organizerId": null,
"area": "display_web_app",
"label": "vip_entrance",
"parentTextGroupId": 401
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": [
"number",
"null"
]
},
"organizerId": {
"type": [
"number",
"null"
]
},
"area": {
"type": "string",
"description": "Area the text group has translations for. Currently only \"display_web_app\""
},
"label": {
"type": "string"
},
"parentTextGroupId": {
"type": [
"number",
"null"
]
}
},
"required": [
"area",
"label",
"parentTextGroupId"
]
}
201
Headers
Content-Type: application/json
Location: /textGroups/{textGroupId}
Body
{
"id": 400,
"organizerId": 10,
"area": "display_web_app",
"label": "vip_entrance",
"parentTextGroupId": 401
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"area": {
"type": "string",
"description": "Area the text group has translations for. Currently only \"display_web_app\""
},
"label": {
"type": "string"
},
"parentTextGroupId": {
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"organizerId",
"area",
"label",
"parentTextGroupId"
]
}
Text group ¶
Get text groupGET/textGroups/{textGroupId}{?area}
Example URI
- textGroupId
number
(required) Example: 400- area
string
(optional) Example: display_web_appOnly text groups with this area
200
Headers
Content-Type: application/json
Body
{
"id": 400,
"organizerId": 10,
"area": "display_web_app",
"label": "vip_entrance",
"parentTextGroupId": 401
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"area": {
"type": "string",
"description": "Area the text group has translations for. Currently only \"display_web_app\""
},
"label": {
"type": "string"
},
"parentTextGroupId": {
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"organizerId",
"area",
"label",
"parentTextGroupId"
]
}
Update text groupPUT/textGroups/{textGroupId}
The ID in the URL and the body must match.
Example URI
- textGroupId
number
(required) Example: 400
Headers
Content-Type: application/json
Body
{
"id": 400,
"organizerId": 10,
"area": "display_web_app",
"label": "vip_entrance",
"parentTextGroupId": 401
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"area": {
"type": "string",
"description": "Area the text group has translations for. Currently only \"display_web_app\""
},
"label": {
"type": "string"
},
"parentTextGroupId": {
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"organizerId",
"area",
"label",
"parentTextGroupId"
]
}
204
Delete text groupDELETE/textGroups/{textGroupId}
Example URI
- textGroupId
number
(required) Example: 400
204
Text group log entriesGET/textGroups/{textGroupId}/log
Example URI
- textGroupId
number
(required) Example: 400
200
Headers
Content-Type: application/json
Body
[
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"textGroupId": 400
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Get text group labelsGET/textGroups/{textGroupId}/labelsWithParent
Example URI
- textGroupId
number
(required) Example: 400
200
Headers
Content-Type: application/json
Body
[
{
"id": 410,
"textGroupId": 400,
"label": "access_granted_description",
"value": {
"da": "Hello, world!",
"de": "Hello, world!",
"en": "Hello, world!"
},
"parentValue": {
"da": "Hello, world!",
"de": "Hello, world!",
"en": "Hello, world!"
}
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Save text group translationsPUT/textGroups/{textGroupId}/labels
Save all translations for the text group. The request body should be an object of translations with labels as keys. Any translation not specified will be removed. Translations that are empty strings will be saved as empty strings.
Example URI
- textGroupId
number
(required) Example: 400
Headers
Content-Type: application/json
Body
{
"any label": {
"da": "Hello, world!",
"de": "Hello, world!",
"en": "Hello, world!"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"$ref": "#/definitions/any label",
"definitions": {
"any label": {
"type": "object",
"patternProperties": {
"": {
"type": "object",
"properties": {
"da": {
"type": "string"
},
"de": {
"type": "string"
},
"en": {
"type": "string"
}
}
}
}
}
}
}
204
Get text group translations (public)GET/textGroups/translations/{textGroupLabel}
Returns an object with languages as keys. Each language is an object with labels as keys.
Example URI
- textGroupLabel
string
(required) Example: vip_entrance
200
Headers
Content-Type: application/json
Body
{
"da": {
"any label": "Hello, world!"
},
"de": {
"any label": "Hello, world!"
},
"en": {
"any label": "Hello, world!"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"da": {
"$ref": "#/definitions/any label"
},
"de": {
"$ref": "#/definitions/any label"
},
"en": {
"$ref": "#/definitions/any label"
}
},
"definitions": {
"any label": {
"type": "object",
"patternProperties": {
"": {
"type": "string"
}
}
}
}
}
Files ¶
Files ¶
Registration of files. Upload should be handled elsewhere.
List all filesGET/files{?type}
Example URI
- type
enum
(optional)Choices:
stylesheet
200
Headers
Content-Type: application/json
Body
[
{
"id": 330,
"organizerId": 10,
"name": "Christmas colours",
"type": "stylesheet",
"subType": "raw",
"url": "Hello, world!"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Create a new filePOST/files
Example URI
Headers
Content-Type: application/json
Body
{
"id": null,
"organizerId": null,
"name": "Christmas colours",
"type": "stylesheet",
"subType": "raw",
"url": null
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": [
"number",
"null"
]
},
"organizerId": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"type": {
"type": [
"string",
"null"
],
"enum": [
"stylesheet",
null
]
},
"subType": {
"type": "string"
},
"url": {
"type": [
"string",
"null"
]
}
},
"required": [
"name",
"type",
"subType",
"url"
]
}
201
Headers
Content-Type: application/json
Location: /files/{fileId}
Body
{
"id": 330,
"organizerId": 10,
"name": "Christmas colours",
"type": "stylesheet",
"subType": "raw",
"url": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": [
"string",
"null"
],
"enum": [
"stylesheet",
null
]
},
"subType": {
"type": "string"
},
"url": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"subType",
"url"
]
}
File ¶
Get fileGET/files/{fileId}
Example URI
- fileId
number
(required) Example: 330
200
Headers
Content-Type: application/json
Body
{
"id": 330,
"organizerId": 10,
"name": "Christmas colours",
"type": "stylesheet",
"subType": "raw",
"url": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": [
"string",
"null"
],
"enum": [
"stylesheet",
null
]
},
"subType": {
"type": "string"
},
"url": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"subType",
"url"
]
}
Get file (public)GET/files/code/{fileCode}
This end-point is public and can be requested with the X-Organizer
and X-Client
headers.
Example URI
- fileCode
string
(required) Example: XY12AB
Headers
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
200
Headers
Content-Type: application/json
Body
{
"id": 330,
"organizerId": 10,
"name": "Christmas colours",
"type": "stylesheet",
"subType": "raw",
"url": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": [
"string",
"null"
],
"enum": [
"stylesheet",
null
]
},
"subType": {
"type": "string"
},
"url": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"subType",
"url"
]
}
Update filePUT/files/{fileId}
The ID in the URL and the body must match.
Example URI
- fileId
number
(required) Example: 330
Headers
Content-Type: application/json
Body
{
"id": 330,
"organizerId": 10,
"name": "Christmas colours",
"type": "stylesheet",
"subType": "raw",
"url": "Hello, world!"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": [
"string",
"null"
],
"enum": [
"stylesheet",
null
]
},
"subType": {
"type": "string"
},
"url": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"subType",
"url"
]
}
204
Delete fileDELETE/files/{fileId}
Example URI
- fileId
number
(required) Example: 330
204
Scannings ¶
Scannings ¶
Get scanningsGET/scannings{?venueId,zoneId,entranceId,scannerId,deviceId,deviceLaneId,eventId,accessTypeId,periodId,usageUnitId,ticketId,tokenId,tokenTypeId,tokenValue,cancelled,cancelledByUserId,statusCode,status,ticketStatus,follow,from,to,limit,offset}
At least one filter is required. To receive all scans, consider using RabbitMQ instead.
Example URI
- venueId
number
(optional) Example: 10- zoneId
number
(optional) Example: 40- entranceId
number
(optional) Example: 50- scannerId
number
(optional) Example: 60- deviceId
number
(optional) Example: 70- deviceLaneId
number
(optional) Example: 70- eventId
number
(optional) Example: 30- accessTypeId
number
(optional) Example: 90- periodId
number
(optional) Example: 80- usageUnitId
number
(optional) Example: 170- ticketId
number
(optional) Example: 100- tokenId
number
(optional) Example: 120- tokenTypeId
number
(optional) Example: 110- tokenValue
string
(optional) Example: 04E56FFAE65380- cancelled
boolean
(optional) Example: true- cancelledByUserId
number
(optional) Example: 10- statusCode
number
(optional) Example: 1- status
enum
(optional)Either positive or negative scans only
Choices:
access granted
granted
access denied
denied
- ticketStatus
enum
(optional)“valid” to only find for currently valid tickets or “exists” to only find for tickets that are not deleted
Choices:
valid
exists
- follow
enum
(optional)Find all scannings related to this (e.g. search for all scannings of the ticket a specified token belongs to)
Choices:
ticket
- from
string
(optional) Example: 2019-01-01T05:00:00+02:00- to
string
(optional) Example: 2019-01-01T05:00:00+02:00- limit
number
(optional) Example: 100- offset
number
(optional) Example: 0
200
Headers
Content-Type: application/json
Body
[
{
"id": 111,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": null,
"tokenValue": null,
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 0,
"usageUnitCount": 1,
"multiplier": 1,
"paymentData": null,
"insertTime": "2018-08-05T12:30:00+02:00",
"innerZoneId": 82,
"outerZoneId": 83
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
400
Headers
Content-Type: application/json
Body
{
"error": "At least one filter must be specified to request a list of scans. Consider using RabbitMQ instead to receive scans.",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Add scanningPOST/scannings
OBS: This is only for development! It should normally be done through RabbitMQ!
See section Report scanning for a description of the possible status codes.
Example URI
Headers
Content-Type: application/json
Body
{
"id": null,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": null,
"tokenValue": null,
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 0,
"usageUnitCount": 1,
"multiplier": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": [
"number",
"null"
]
},
"parentId": {
"type": [
"number",
"null"
]
},
"localId": {
"type": "number",
"description": "The ID of the scanning on the device, to detect double sync"
},
"localParentId": {
"type": [
"number",
"null"
],
"description": "The ID of a parent scanning on the device, if any."
},
"deviceId": {
"type": "number"
},
"deviceLaneId": {
"type": "number"
},
"scannerId": {
"type": [
"number",
"null"
],
"description": "The scanner the device was related to at the time of the scanning."
},
"entranceId": {
"type": [
"number",
"null"
],
"description": "The entrance the device was related to at the time of the scanning."
},
"zoneId": {
"type": [
"number",
"null"
],
"description": "The zone the device scanned \"into\"."
},
"tokenId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was recognized for the event."
},
"accessTypeId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was given access."
},
"usageUnitId": {
"type": [
"number",
"null"
],
"description": "The usage unit this scanning used, if any."
},
"periodId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was given access."
},
"virtualQueueCouponTicketId": {
"type": [
"number",
"null"
],
"description": "If the scanned token used a virtual queue coupon to get access."
},
"virtualQueuePhysicalCouponTicketId": {
"type": [
"number",
"null"
],
"description": "If the scanned token used a coupon ticket for physical queue to get access."
},
"tokenTypeId": {
"type": [
"number",
"null"
],
"description": "For unrecognized tokens: Token type scanned."
},
"tokenValue": {
"type": [
"string",
"null"
],
"description": "For unrecognized tokens: Token value scanned."
},
"eventId": {
"type": [
"number",
"null"
],
"description": "For unrecognized tokens: The event that was active."
},
"when": {
"type": "string"
},
"cancelled": {
"type": [
"string",
"null"
]
},
"cancelledByUserId": {
"type": [
"number",
"null"
]
},
"statusCode": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"OK",
"Unknown token",
"Denied access"
],
"description": "Deprecated, use statusCode instead"
},
"mode": {
"type": "number",
"description": "The selected mode for the lane, usually 1 (scan in) or 2 (scan out)"
},
"usageUnitCount": {
"type": "number",
"description": "The usage unit count this scan takes"
},
"multiplier": {
"type": "number",
"description": "How many scans this scan should be treated as (e.g. if multiple people are scanned in)"
},
"paymentData": {
"type": "string",
"description": "JSON encoded data with info about a relevant payment, if any"
}
},
"required": [
"parentId",
"localId",
"localParentId",
"deviceId",
"scannerId",
"entranceId",
"zoneId",
"tokenId",
"accessTypeId",
"usageUnitId",
"periodId",
"virtualQueueCouponTicketId",
"virtualQueuePhysicalCouponTicketId",
"tokenTypeId",
"tokenValue",
"eventId",
"when",
"cancelled",
"cancelledByUserId",
"statusCode",
"mode"
]
}
201
Headers
Content-Type: application/json
Body
{
"id": 111,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": 1,
"tokenValue": "Hello, world!",
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 1,
"usageUnitCount": 1,
"multiplier": 1,
"paymentData": "Hello, world!",
"insertTime": "2018-08-05T12:30:00+02:00",
"msgType": "MessageScanning"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"parentId": {
"type": [
"number",
"null"
]
},
"localId": {
"type": "number",
"description": "The ID of the scanning on the device, to detect double sync"
},
"localParentId": {
"type": [
"number",
"null"
],
"description": "The ID of a parent scanning on the device, if any."
},
"deviceId": {
"type": "number"
},
"deviceLaneId": {
"type": "number"
},
"scannerId": {
"type": [
"number",
"null"
],
"description": "The scanner the device was related to at the time of the scanning."
},
"entranceId": {
"type": [
"number",
"null"
],
"description": "The entrance the device was related to at the time of the scanning."
},
"zoneId": {
"type": [
"number",
"null"
],
"description": "The zone the device scanned \"into\"."
},
"tokenId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was recognized for the event."
},
"accessTypeId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was given access."
},
"usageUnitId": {
"type": [
"number",
"null"
],
"description": "The usage unit this scanning used, if any."
},
"periodId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was given access."
},
"virtualQueueCouponTicketId": {
"type": [
"number",
"null"
],
"description": "If the scanned token used a virtual queue coupon to get access."
},
"virtualQueuePhysicalCouponTicketId": {
"type": [
"number",
"null"
],
"description": "If the scanned token used a coupon ticket for physical queue to get access."
},
"tokenTypeId": {
"type": [
"number",
"null"
],
"description": "For unrecognized tokens: Token type scanned."
},
"tokenValue": {
"type": [
"string",
"null"
],
"description": "For unrecognized tokens: Token value scanned."
},
"eventId": {
"type": [
"number",
"null"
],
"description": "For unrecognized tokens: The event that was active."
},
"when": {
"type": "string"
},
"cancelled": {
"type": [
"string",
"null"
]
},
"cancelledByUserId": {
"type": [
"number",
"null"
]
},
"statusCode": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"OK",
"Unknown token",
"Denied access"
],
"description": "Deprecated, use statusCode instead"
},
"mode": {
"type": "number",
"description": "The selected mode for the lane, usually 1 (scan in) or 2 (scan out)"
},
"usageUnitCount": {
"type": "number",
"description": "The usage unit count this scan takes"
},
"multiplier": {
"type": "number",
"description": "How many scans this scan should be treated as (e.g. if multiple people are scanned in)"
},
"paymentData": {
"type": "string",
"description": "JSON encoded data with info about a relevant payment, if any"
},
"insertTime": {
"type": "string",
"description": "When the server created the scanning."
},
"msgType": {
"type": "string"
}
},
"required": [
"id",
"parentId",
"localId",
"localParentId",
"deviceId",
"scannerId",
"entranceId",
"zoneId",
"tokenId",
"accessTypeId",
"usageUnitId",
"periodId",
"virtualQueueCouponTicketId",
"virtualQueuePhysicalCouponTicketId",
"tokenTypeId",
"tokenValue",
"eventId",
"when",
"cancelled",
"cancelledByUserId",
"statusCode",
"mode",
"insertTime",
"msgType"
]
}
Validate tokenGET/scannings/validate/{?zoneId,eventId,tokenTypeId,time}
Perform a validation check on the token. This does not actually scan the token.
NOTE: If the token contains any “/” then it has to be base 64 encoded and base64/
must be prepended, e.g. /scannings/validate/base64/aHR0cHM6Ly9zbXVrc2hvcC5kay90b2tlbi8xMjM0NTY3OA==
Example URI
- zoneId
number
(optional) Example: 40- eventId
number
(optional) Example: 30- tokenTypeId
number
(optional) Example: 110- time
string
(optional) Example: 2019-01-01T05:00:00+02:00
200
Headers
Content-Type: application/json
Body
{
"isValid": true,
"tokenFound": true,
"tokenClass": true,
"tokenStatus": "valid",
"ticketValid": true,
"ticketValidPeriod": "valid",
"tokenValidPeriod": "valid",
"accessTypesValid": true,
"accessTypes": [
{
"isValid": true,
"maxUsages": "valid",
"calendarPeriods": "valid",
"profileImage": "valid",
"zonePeriodsValid": true,
"zonePeriods": [
{
"isValid": true,
"maxUsages": "valid",
"correctZone": true,
"inPeriod": true
}
]
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"isValid": {
"type": "boolean",
"description": "Is the whole token valid"
},
"tokenFound": {
"type": "boolean",
"description": "Is the token found"
},
"tokenClass": {
"type": "boolean",
"description": "Does the token have the normal class"
},
"tokenStatus": {
"type": "string",
"enum": [
"valid",
"blocked",
"known"
],
"description": "Is the token active"
},
"ticketValid": {
"type": "boolean",
"description": "Is the ticket valid"
},
"ticketValidPeriod": {
"type": "string",
"enum": [
"valid",
"not_valid",
"not_relevant"
],
"description": "Is the scanning within the tickets valid period"
},
"tokenValidPeriod": {
"type": "string",
"enum": [
"valid",
"not_valid",
"not_relevant"
],
"description": "Is the scanning within the tokens valid period"
},
"accessTypesValid": {
"type": "boolean",
"description": "Is any access type valid"
},
"accessTypes": {
"type": "array"
}
},
"required": [
"isValid",
"tokenFound",
"tokenClass",
"tokenStatus",
"ticketValid",
"ticketValidPeriod",
"tokenValidPeriod",
"accessTypesValid",
"accessTypes"
]
}
Scanning ¶
Get scanningGET/scannings/{scanningId}
Example URI
- scanningId
number
(required) Example: 111
200
Headers
Content-Type: application/json
Body
{
"id": 111,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": 1,
"tokenValue": "Hello, world!",
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 1,
"usageUnitCount": 1,
"multiplier": 1,
"paymentData": "Hello, world!",
"insertTime": "2018-08-05T12:30:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"parentId": {
"type": [
"number",
"null"
]
},
"localId": {
"type": "number",
"description": "The ID of the scanning on the device, to detect double sync"
},
"localParentId": {
"type": [
"number",
"null"
],
"description": "The ID of a parent scanning on the device, if any."
},
"deviceId": {
"type": "number"
},
"deviceLaneId": {
"type": "number"
},
"scannerId": {
"type": [
"number",
"null"
],
"description": "The scanner the device was related to at the time of the scanning."
},
"entranceId": {
"type": [
"number",
"null"
],
"description": "The entrance the device was related to at the time of the scanning."
},
"zoneId": {
"type": [
"number",
"null"
],
"description": "The zone the device scanned \"into\"."
},
"tokenId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was recognized for the event."
},
"accessTypeId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was given access."
},
"usageUnitId": {
"type": [
"number",
"null"
],
"description": "The usage unit this scanning used, if any."
},
"periodId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was given access."
},
"virtualQueueCouponTicketId": {
"type": [
"number",
"null"
],
"description": "If the scanned token used a virtual queue coupon to get access."
},
"virtualQueuePhysicalCouponTicketId": {
"type": [
"number",
"null"
],
"description": "If the scanned token used a coupon ticket for physical queue to get access."
},
"tokenTypeId": {
"type": [
"number",
"null"
],
"description": "For unrecognized tokens: Token type scanned."
},
"tokenValue": {
"type": [
"string",
"null"
],
"description": "For unrecognized tokens: Token value scanned."
},
"eventId": {
"type": [
"number",
"null"
],
"description": "For unrecognized tokens: The event that was active."
},
"when": {
"type": "string"
},
"cancelled": {
"type": [
"string",
"null"
]
},
"cancelledByUserId": {
"type": [
"number",
"null"
]
},
"statusCode": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"OK",
"Unknown token",
"Denied access"
],
"description": "Deprecated, use statusCode instead"
},
"mode": {
"type": "number",
"description": "The selected mode for the lane, usually 1 (scan in) or 2 (scan out)"
},
"usageUnitCount": {
"type": "number",
"description": "The usage unit count this scan takes"
},
"multiplier": {
"type": "number",
"description": "How many scans this scan should be treated as (e.g. if multiple people are scanned in)"
},
"paymentData": {
"type": "string",
"description": "JSON encoded data with info about a relevant payment, if any"
},
"insertTime": {
"type": "string",
"description": "When the server created the scanning."
}
},
"required": [
"id",
"parentId",
"localId",
"localParentId",
"deviceId",
"scannerId",
"entranceId",
"zoneId",
"tokenId",
"accessTypeId",
"usageUnitId",
"periodId",
"virtualQueueCouponTicketId",
"virtualQueuePhysicalCouponTicketId",
"tokenTypeId",
"tokenValue",
"eventId",
"when",
"cancelled",
"cancelledByUserId",
"statusCode",
"mode",
"insertTime"
]
}
404
Headers
Content-Type: application/json
Body
{
"error": "Scanning not found.",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Cancel scanningPUT/scannings/{scanningId}/cancel
Reverse the effects of a previously created scanning.
Example URI
- scanningId
number
(required) Example: 111
204
Headers
Content-Type: application/json
400
Headers
Content-Type: application/json
Body
{
"error": "Can only reverse positive scannings (statusCode 1 and 2).",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
1016
Headers
Content-Type: application/json
Body
{
"error": "The allowed cancellation time for the scanning has expired",
"errorCode": 1984
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Textual description of the error."
},
"errorCode": {
"type": "number",
"description": "A code, often 0."
}
},
"required": [
"error"
]
}
Search ¶
Ticket search
Search for tickets ¶
Search for ticketsGET/search/tickets{?search,eventId}
Search for tickets or their tokens and coupons. This will give a minimum data for each ticket to be used in a search result page.
Example URI
- search
string
(required) Example: 04E56FFAE65380Search in token value, ticket name, external IDs and coupon ID for this string. Can do a wildcard search with *. To search for * escape it with *.
- eventId
number
(optional) Example: 30
200
Headers
Content-Type: application/json
Body
[
{
"type": "ticket",
"ticketId": 100,
"ticketName": "Malcolm Reynolds",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeId": 110,
"tokenTypeName": "NFC UID",
"virtualQueueCouponId": 240,
"zoneName": "Backstage",
"isDeleted": false
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Ticket search data ¶
Ticket search dataGET/search/ticketData/{ticketId}
Get the full data for a ticket used on the search result page.
Example URI
- ticketId
number
(optional) Example: 100
200
Headers
Content-Type: application/json
Body
{
"ticket": {
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)"
},
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
],
"accessTypes": [
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
],
"virtualQueueCoupons": [
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"zoneName": "Backstage",
"logEntries": [
{
"id": 242,
"virtualQueueCouponId": 240,
"insertTime": "2018-08-05T12:30:00+02:00",
"action": "created",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)"
}
],
"ticketLogEntries": [
{
"id": 272,
"virtualQueueCouponTicketId": 270,
"insertTime": "2018-08-05T12:30:00+02:00",
"action": "added",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"deviceId": 70,
"entranceId": 50
}
],
"tickets": [
{
"ticketId": 100,
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"tokenId": 120,
"tokenValue": "04E56FFAE65380",
"tokenTypeName": "NFC UID",
"name": "Malcolm Reynolds",
"status": "in queue",
"isSpectator": false
}
]
}
],
"physicalQueueCoupons": [
{
"syncId": 999,
"isDeleted": false,
"id": 350,
"virtualQueueId": 230,
"ticketId": 100,
"status": "in queue",
"virtualQueueCouponTicketId": 270,
"zoneName": "Backstage",
"logEntries": [
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"virtualQueuePhysicalCouponTicketId": 350
}
]
}
],
"logEntries": [
{
"id": 310,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"client": "ScannerWebApp/1.0 (device #1)",
"action": "created",
"data": "{\"name\": {\"from\": \"Mal\", \"to\": \"Malcolm\"}}",
"ticketId": 100
}
],
"scannings": [
{
"id": 111,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": 1,
"tokenValue": "Hello, world!",
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 1,
"usageUnitCount": 1,
"multiplier": 1,
"paymentData": "Hello, world!",
"insertTime": "2018-08-05T12:30:00+02:00"
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"ticket": {
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"source": {
"type": "string",
"description": "Required if externalId is given."
},
"externalId": {
"type": "string",
"description": "Eg digital_product_id if a ticket from shop.smukfest.dk."
},
"externalGroup": {
"type": "string"
},
"externalData": {
"type": "string",
"description": "JSON is recommended"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"languageCode": {
"type": "string",
"description": "The preferred language to show when this ticket is used (currently only da, en, and de is available."
},
"profileImageUrl": {
"type": "string",
"description": "URL to a profile image"
},
"name": {
"type": "string",
"description": "Name on the ticket"
},
"productName": {
"type": "string",
"description": "Name of the product that generated the ticket"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"isValid"
]
},
"tokens": {
"type": "array"
},
"accessTypes": {
"type": "array"
},
"virtualQueueCoupons": {
"type": "array"
},
"physicalQueueCoupons": {
"type": "array"
},
"logEntries": {
"type": "array"
},
"scannings": {
"type": "array"
}
},
"required": [
"ticket",
"tokens",
"accessTypes",
"virtualQueueCoupons",
"physicalQueueCoupons",
"logEntries",
"scannings"
]
}
RabbitMQ ¶
The VM Access Platform has a RabbitMQ server. All communication between the server and the clients is performed using the AMQP 0-9-1 protocol. The connection to the server is encrypted with TLS, and the clients connect to TCP port 5671 on the server.
Each client has a unique username and password that is used to connect to the RabbitMQ server.
The virtual host is ‘beautifulbjarne’.
The messages passed over RabbitMQ are plain JSON objects. In the following description we abuse the API Blueprint Specification and use POST requests to describe messages the client produces (sends to RabbitMQ) and GET requests for messages the client consumes (receives from RabbitMQ).
Example of production connection string:
amqps://<username>:<password>@beautifulbjarne.amqp.venuemanager.net:5671/beautifulbjarne
Example of stage connection string:
amqps://<username>:<password>@beautifulbjarne.amqp.stage.venuemanager.net:15671/beautifulbjarne_stage
Exchanges and queues
The server creates a number of exchanges and queues on the RabbitMQ server.
Exchange “broadcast”
The broadcast exchange is declared by the server. It is a fanout exchange and is durable.
NOTE This automatic declaration only happens on a few specific changes in the administration, so for development it could be a good idea to create this exchange manually in RabbitMQ.
The exchange is used for messages that are not specific for a venue or an an event, but relevant for one or more devices:
-
Updates to a Device.
-
Updates to a TokenType.
-
Updates to a Feedback.
-
When a device is connected to a new venue.
Exchange “sync_{organizer_label}”
For each organizer the server declares a topic exchange named “sync_{organizer_label}” (e.g. “sync_smukfest”). This exchange is used to transmit updates regarding venues and events (including tickets etc).
All messages sent to the exchange has a routing key:
-
“venue_{venueId}” (e.g. “venue_1”) for messages regarding a venue.
-
“event_{eventId}” (e.g. “event_32”) for messages regarding an event.
Exchange “data_{organizer_label}”
For each organizer the server declares a topic exchange named “data_{organizer_label}” (e.g. “data_smukfest”). This exchange is used to stream various data to interested parties, eg third party “big data” systems.
All messages sent to the exchange has a routing key:
-
“venue_{venueId}” (e.g. “venue_1”) for messages regarding a venue.
-
“event_{eventId}” (e.g. “event_32”) for messages regarding an event.
-
“organizer” for messages not regarding any specific venue or event.
Queue “Beautiful Bjarne”
The server receives messages on a single durable queue named “Beautiful Bjarne”. The queue is created with x-max-priority set to 10. Messages from the client to the server should be published to the default exchange ("") with the routing key set to “Beautiful Bjarne”. This is the only way the clients transmit data to the server.
Client’s CallbackQueue
When connected to RabbitMQ the client must declare a queue. We will refer to this queue as the client’s CallbackQueue. It is used for replies and messages from the server directed to this specific client.
The queue should be exclusive and have a server generated name.
This queue should also be bound (with an empty routing key) to the broadcast exchange described above.
Client’s StreamingQueues
A client must continually be updated with information about its venue and active/near-active events.
For each venue (0-1) and event (0-n) the client must declare a queue. We will refer to these queues as the client’s StreamingQueues. They are used for streaming updates to master data, venues, events, tickets etc to the client.
The queues should be exclusive and have server generated names.
These queues should be bound (with a proper routing key) to the “sync_{organizer_label}” exchange described above.
Device to server communication ¶
The devices connect to the RabbitMQ server when they boot (or when the application is started). The connection is kept alive as long a the device is running. Should the connection be broken the device will reconnect as soon as possible.
Connect ¶
ConnectPOST/RabbitMQ-has-no-such-URL/MessageConnect{?exchangeName,routingKey,priority,replyTo,userId}
When the client has established a connection to the RabbitMQ server, it must start by sending a Connect message.
Set the reply-to property of the request message to the client’s CallbackQueue.
Set the user-id property of the request message to the username used for RabbitMQ connection. If it is not specified the server will try to guess it from the consumer of the client’s CallbackQueue but this is unreliable, as the information might not yet be available when the server processes the connect message.
The server will automatically register the device and issue an ID if no prior communication has taken place. A MessageConnectResponse will be sent on the CallbackQueue.
Example URI
- exchangeName
string
(required)Use the default exchange ‘’.
- routingKey
string
(required) Example: Beautiful Bjarne- priority
number
(required) Example: 1Use priority 1 for non-bulk messages.
- replyTo
string
(required) Example: amq.gen-f0T7OfrkndaUccxNLi_QywUse the name of the client’s CallbackQueue.
- userId
string
(optional) Example: VM_0109Use the username for the RabbitMQ connection.
Headers
Content-Type: application/json
Body
{
"msgType": "MessageConnect",
"type": "CHD 8",
"appVersion": "1.0.9",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc",
"commonName": "Håndterminal #23"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"type": {
"type": "string",
"description": "A description of the device type."
},
"appVersion": {
"type": "string",
"description": "The version of the Access App"
},
"uniqueId": {
"type": "string",
"description": "Fixed and unique value chosen by the client - eg a MAC address."
},
"commonName": {
"type": "string",
"description": "Value taken from the client's local setup."
}
},
"required": [
"msgType",
"type",
"appVersion",
"uniqueId",
"commonName"
]
}
204
Connect response ¶
Connect responseGET/RabbitMQ-has-no-such-URL/MessageConnectResponse
When the server receives a MessageConnect it will send a MessageConnectResponse on the client’s CallbackQueue. The MessageConnectResponse contains the following information:
-
A Device object
Contains the server issued ID for the device.
-
An Organizer object
Included to satisfy foreign key constraints on the venue. Null if the device is not attached to any venues.
-
A Venue object
Information about the venue where the device is in use. The client must start syncing data for the venue using the procedure outlined below in the section Fetch venue data.
Null if the device is not attached to any venues. This means that the device should not accept any scannings presently. The device should keep listening for messages en the broadcast exchange. When the device is later connected to a venue a NewVenueForDevice message will be broadcasted.
-
A DeviceOrganizerConfiguration object
Various organizer-specific configurations for the device. Null if no configuration have been set.
-
A user token
For each device a user is automatically created on the server. This user token can be used with Bearer authorization if the client needs to call the REST API. This is not needed for a normal scanner device.
Example URI
200
Headers
Content-Type: application/json
Body
{
"msgType": "MessageConnectResponse",
"device": {
"syncId": 999,
"isDeleted": false,
"id": 70,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc",
"lanes": [
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1
}
]
},
"organizer": {
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest"
},
"venue": {
"syncId": 999,
"isDeleted": false,
"id": 10,
"uuid": "ce57739c-486a-4cfd-a46c-30812a35fd96",
"name": "Bøgeskoven",
"organizerId": 10
},
"deviceConfiguration": {
"id": 72,
"organizerId": 10,
"deviceId": 70,
"mobilepayClientId": "Hello, world!",
"mobilepayClientSecret": "Hello, world!",
"mobilepayMerchantVatNumber": "Hello, world!",
"mobilepayStoreId": "Hello, world!"
},
"userToken": "Hello, world!",
"maxLocalId": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"device": {
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": "string"
},
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"uniqueId": {
"type": "string"
},
"lanes": {
"type": "array"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"type",
"name",
"label",
"uniqueId",
"lanes"
]
},
"organizer": {
"type": [
"object",
"null"
],
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"label": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"label",
"name"
],
"description": "Null if not connected to a venue."
},
"venue": {
"type": [
"object",
"null"
],
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"name": {
"type": "string"
},
"organizerId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"name",
"organizerId"
],
"description": "Null if not connected to a venue."
},
"deviceConfiguration": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"deviceId": {
"type": "number"
},
"mobilepayClientId": {
"type": [
"string",
"null"
]
},
"mobilepayClientSecret": {
"type": [
"string",
"null"
]
},
"mobilepayMerchantVatNumber": {
"type": [
"string",
"null"
]
},
"mobilepayStoreId": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"organizerId",
"deviceId",
"mobilepayClientId",
"mobilepayClientSecret",
"mobilepayMerchantVatNumber",
"mobilepayStoreId"
]
},
"userToken": {
"type": "string",
"description": "Token to use for requesting the API (using Bearer authorization)"
},
"maxLocalId": {
"type": "number",
"description": "The highest localId the server has seen in Scanning reports from the device."
}
},
"required": [
"msgType",
"device",
"organizer",
"venue",
"deviceConfiguration",
"userToken",
"maxLocalId"
]
}
Fetch venue data ¶
Fetch venue dataPOST/RabbitMQ-has-no-such-URL/MessageFetchVenueData/{?exchangeName,routingKey,priority,replyTo}
To stay up-to-date on information about a venue the client should use the MessageFetchVenueData message in combination with a StreamingQueue as detailed here:
-
Declare a StreamingQueue for the venue.
-
Bind the venue StreamingQueue to the organizer’s sync exchange with the routing_key ‘venue_X’ where X is the venue ID.
Do NOT start consuming from the venue StreamingQueue yet. We only subscribe now to make sure that no messages are lost.
-
Send MessageFetchVenueData to the server.
This informs the server that the client wants to receive all venue data on the CallbackQueue.
If the client already has data for the venue, it can pass lastSyncId to the server to avoid receiving data it already has.
-
Receive venue data on CallbackQueue.
The server will transmit a dataset of all entities updated since the lastSyncId given in MessageFetchVenueData.
The entities will NOT arrive in syncId order, but ordered so that all foreign key constraints are satisfied:
-
Receive MessageFetchVenueDataResponse on CallbackQueue.
When the complete dataset has been sent from server to client, the server sends MessageFetchVenueDataResponse. This message contains the highest syncId from the transferred data.
At this point the client has a complete dataset for the venue (except changes introduced after the MessageFetchVenueData was handled at the server).
-
Start consuming from the venue StreamingQueue.
The client should now consume the venue StreamingQueue, and ignore (but still acknowledge) all messages with a syncId less than or equal to the syncId given in MessageFetchVenueDataResponse.
The server will send all updates regarding the venue to this queue via the organizer’s sync exchange.
Example URI
- exchangeName
string
(required)Use the default exchange ‘’.
- routingKey
string
(required) Example: Beautiful Bjarne- priority
number
(required) Example: 1Use priority 1 for non-bulk messages.
- replyTo
string
(required) Example: amq.gen-f0T7OfrkndaUccxNLi_QywUse the name of the client’s CallbackQueue.
Headers
Content-Type: application/json
Body
{
"msgType": "MessageFetchVenueData",
"deviceId": 70,
"venueId": 10,
"lastSyncId": 999
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"deviceId": {
"type": "number"
},
"venueId": {
"type": "number"
},
"lastSyncId": {
"type": "number",
"description": "The highest (latest) syncId in the dataset already received for the venue."
}
},
"required": [
"msgType",
"deviceId",
"venueId",
"lastSyncId"
]
}
204
Fetch venue data response ¶
Fetch venue data responseGET/RabbitMQ-has-no-such-URL/MessageFetchVenueDataResponse
Please see description of usage in the section Fetch venue data.
Example URI
200
Headers
Content-Type: application/json
Body
{
"msgType": "MessageFetchVenueDataResponse",
"venueId": 10,
"lastSyncId": 999
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"venueId": {
"type": "number"
},
"lastSyncId": {
"type": "number",
"description": "The highest syncId in the dataset sent for the venue."
}
},
"required": [
"msgType",
"venueId",
"lastSyncId"
]
}
Fetch event data ¶
Fetch event dataPOST/RabbitMQ-has-no-such-URL/MessageFetchEventData{?exchangeName,routingKey,priority,replyTo}
To stay up-to-date on information about an event the client should use the MessageFetchEventData message in combination with a StreamingQueue as detailed here:
-
Declare a StreamingQueue for the event.
-
Bind the event StreamingQueue to the organizer’s sync exchange with the routing_key ‘event_X’ where X is the event ID.
Do NOT start consuming from the event StreamingQueue yet. We only subscribe now to make sure that no messages are lost.
-
Send MessageFetchEventData to the server.
This informs the server that the client wants to receive all event data on the CallbackQueue.
If the client already has data for the event, it can pass lastSyncId to the server to avoid receiving data it already has.
-
Receive event data on CallbackQueue.
The server will transmit a dataset of all entities updated since the lastSyncId given in MessageFetchEventData.
The entities will NOT arrive in syncId order, but ordered so that all foreign key constraints are satisfied:
-
Receive MessageFetchEventDataResponse on CallbackQueue.
When the complete dataset has been sent from server to client, the server sends MessageFetchEventDataResponse. This message contains the highest syncId from the transferred data.
At this point the client has a complete dataset for the event (except changes introduced after the MessageFetchEventData was handled at the server). It is now allowed to start scanning tokens and grant/deny access.
-
Start consuming from the event StreamingQueue.
The client should now consume the StreamingQueue, and ignore (but still acknowledge) all messages with a syncId less than or equal to the syncId given in MessageFetchEventDataResponse.
The server will send all updates regarding the event to this queue via the organizer’s sync exchange.
Please notice that Event updates are not received on the event StreamingQueue but on the venue StreamingQueue! The reason for this apparently weird choice is that the clients should not start syncing the complete event data set until ~24 hours before the event actually begins.
Example URI
- exchangeName
string
(required)Use the default exchange ‘’.
- routingKey
string
(required) Example: Beautiful Bjarne- priority
number
(required) Example: 1Use priority 1 for non-bulk messages.
- replyTo
string
(required) Example: amq.gen-f0T7OfrkndaUccxNLi_QywUse the name of the client’s CallbackQueue.
Headers
Content-Type: application/json
Body
{
"msgType": "MessageFetchEventData",
"deviceId": 70,
"eventId": 30,
"lastSyncId": 999
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"deviceId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"lastSyncId": {
"type": "number",
"description": "The highest (latest) syncId in the dataset already received for the event."
}
},
"required": [
"msgType",
"deviceId",
"eventId",
"lastSyncId"
]
}
204
Fetch event data response ¶
Fetch event data responseGET/RabbitMQ-has-no-such-URL/MessageFetchEventDataResponse
Please see description of usage in the section [Fetch event data(#device-to-server-communication-fetch-event-data).
Example URI
200
Headers
Content-Type: application/json
Body
{
"msgType": "MessageFetchEventDataResponse",
"eventId": 30,
"lastSyncId": 999
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"eventId": {
"type": "number"
},
"lastSyncId": {
"type": "number",
"description": "The highest syncId in the dataset sent for the event."
}
},
"required": [
"msgType",
"eventId",
"lastSyncId"
]
}
New venue for device ¶
New venue for deviceGET/RabbitMQ-has-no-such-URL/NewVenueForDevice
When a device is connected to a venue, the server will broadcast a NewVenueForDevice message through the broadcast exchange.
The device with the same ID as the “deviceId” property of the message that should start fetching data for the venue.
Example URI
200
Headers
Content-Type: application/json
Body
{
"msgType": "NewVenueForDevice",
"deviceId": 70,
"organizer": {
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest"
},
"venue": {
"syncId": 999,
"isDeleted": false,
"id": 10,
"uuid": "ce57739c-486a-4cfd-a46c-30812a35fd96",
"name": "Bøgeskoven",
"organizerId": 10
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"deviceId": {
"type": "number",
"description": "ID of the device which has been added to the event."
},
"organizer": {
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"label": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"label",
"name"
]
},
"venue": {
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"name": {
"type": "string"
},
"organizerId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"name",
"organizerId"
]
}
},
"required": [
"msgType",
"deviceId",
"organizer",
"venue"
]
}
Ping ¶
PingPOST/RabbitMQ-has-no-such-URL/MessagePing{?exchangeName,routingKey,priority,replyTo}
The server will respond immediately. Can be used to check how fast the server is currently handling messages, if at all.
Example URI
- exchangeName
string
(required)Use the default exchange ‘’.
- routingKey
string
(required) Example: Beautiful Bjarne- priority
number
(required) Example: 1Use priority 1 for non-bulk messages.
- replyTo
string
(required) Example: amq.gen-f0T7OfrkndaUccxNLi_QywUse the name of the client’s CallbackQueue.
Headers
Content-Type: application/json
Body
{
"msgType": "MessagePing"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
}
},
"required": [
"msgType"
]
}
204
Pong ¶
PongGET/RabbitMQ-has-no-such-URL/Pong
The servers response to a Ping message.
Example URI
200
Headers
Content-Type: application/json
Body
{
"msgType": "Success"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
}
},
"required": [
"msgType"
]
}
Report scanning ¶
Report scanningPOST/RabbitMQ-has-no-such-URL/MessageNewScanning{?exchangeName,routingKey,priority,delivery_mode}
When a token has been scanned and access has been granted or denied, the scanning and the decision must be reported to the server by sending a persistent MessageScanning to the server.
All scannings must be reported to the server before they are deleted from device storage.
Status code can have the following values:
-
1: Access granted
-
2: Access counted
-
3: Partially access granted (expects another scan with status code 4)
-
4: Usage unit registered (is treated as access granted, but will not be counted)
-
5: Access granted for a virtual queue that is open
-
6: Access granted for a virtual queue coupon ticket
-
7: Access granted for a virtual queue coupon ticket at a parent queue
-
8: Access granted into a virtual queue attraction zone
-
9: Access granted for a virtual queue physical queue zone
-
10: Access granted for a virtual queue coupon ticket for physical queue
-
11: Access granted out from a virtual queue attraction zone
-
12: Access granted out from a virtual queue buffer zone
-
13: Access granted, but should not change zone populations
-
100: Generic denied access (use one of the other 1XX if possible)
-
101: Token has status blocked
-
102: Token has status known
-
103: Ticket is not valid
-
104: Ticket has no access types at all
-
105: Ticket has no zone2period2accessType relations at all
-
106: Ticket has no zone2period2accessType relations that are currently valid
-
107: Max usages reached for the available zone2period2accessType relations for the ticket
-
108: The ticket was scanned within the waiting-period of the access type (double scanning)
-
109: The scanning multiplier is larger than what the accessType allows
-
110: Ticket has no zone2period2accessType relations that either does not have a calendar or is within the calendars valid periods
-
111: Ticket does not have a required profile image
-
112: There is an active virtual queue, but it is paused
-
113: There is an active virtual queue, but it is closed
-
114: The ticket has no virtual queue coupon
-
115: The ticket has a virtual queue coupon, but it is not welcomed to the queue yet
-
116: The ticket has a virtual queue coupon, but it has timed out
-
117: The ticket has a virtual queue coupon, but it has been postponed
-
118: The ticket has a virtual queue coupon, but it has been removed from the queue
-
119: The ticket has a virtual queue coupon, but it has already boarded (and perhaps exited)
-
120: The ticket has a virtual queue coupon, but has already boarded at the parent at which it tries to board again
-
121: The token is not valid
-
122: The ticket does not allow multiple scannings, but the ticket was already scanned and waiting for entry
-
123: Too many pending scannings in EntryQueue
-
124: The ticket already has an active virtual queue coupon, and is therefore not allowed to create a new one
-
125: The ticket already has a coupon ticket for physical queue, and is therefore not allowed to create a new one
-
126: No coupon ticket for physical queue has been welcomed
-
127: The ticket has no coupon ticket for physical queue
-
128: The token did not have the expected class
-
200: The token is not known at all
-
201: The event of the token is unknown
-
202: The event of the token is not active
-
203: The event of the token is from a different venue than the device
-
204: The event of the token has not started yet
-
205: The event of the token has ended
-
206: The scan direction was forced closed on the entrance
-
207: The scan direction was closed due to max population in the zone
-
301: The token was scanned but forwarded to another service for the decision
-
401: Access was granted but the user did not pass the turnstile
Example URI
- exchangeName
string
(required)Use the default exchange ‘’.
- routingKey
string
(required) Example: Beautiful Bjarne- priority
number
(required) Example: 0Use priority 0 for bulk messages.
- delivery_mode
number
(required) Example: 2Marks the message as persistent.
Headers
Content-Type: application/json
Body
{
"id": 111,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": 1,
"tokenValue": "Hello, world!",
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 1,
"usageUnitCount": 1,
"multiplier": 1,
"paymentData": "Hello, world!",
"insertTime": "2018-08-05T12:30:00+02:00",
"msgType": "MessageScanning"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"parentId": {
"type": [
"number",
"null"
]
},
"localId": {
"type": "number",
"description": "The ID of the scanning on the device, to detect double sync"
},
"localParentId": {
"type": [
"number",
"null"
],
"description": "The ID of a parent scanning on the device, if any."
},
"deviceId": {
"type": "number"
},
"deviceLaneId": {
"type": "number"
},
"scannerId": {
"type": [
"number",
"null"
],
"description": "The scanner the device was related to at the time of the scanning."
},
"entranceId": {
"type": [
"number",
"null"
],
"description": "The entrance the device was related to at the time of the scanning."
},
"zoneId": {
"type": [
"number",
"null"
],
"description": "The zone the device scanned \"into\"."
},
"tokenId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was recognized for the event."
},
"accessTypeId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was given access."
},
"usageUnitId": {
"type": [
"number",
"null"
],
"description": "The usage unit this scanning used, if any."
},
"periodId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was given access."
},
"virtualQueueCouponTicketId": {
"type": [
"number",
"null"
],
"description": "If the scanned token used a virtual queue coupon to get access."
},
"virtualQueuePhysicalCouponTicketId": {
"type": [
"number",
"null"
],
"description": "If the scanned token used a coupon ticket for physical queue to get access."
},
"tokenTypeId": {
"type": [
"number",
"null"
],
"description": "For unrecognized tokens: Token type scanned."
},
"tokenValue": {
"type": [
"string",
"null"
],
"description": "For unrecognized tokens: Token value scanned."
},
"eventId": {
"type": [
"number",
"null"
],
"description": "For unrecognized tokens: The event that was active."
},
"when": {
"type": "string"
},
"cancelled": {
"type": [
"string",
"null"
]
},
"cancelledByUserId": {
"type": [
"number",
"null"
]
},
"statusCode": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"OK",
"Unknown token",
"Denied access"
],
"description": "Deprecated, use statusCode instead"
},
"mode": {
"type": "number",
"description": "The selected mode for the lane, usually 1 (scan in) or 2 (scan out)"
},
"usageUnitCount": {
"type": "number",
"description": "The usage unit count this scan takes"
},
"multiplier": {
"type": "number",
"description": "How many scans this scan should be treated as (e.g. if multiple people are scanned in)"
},
"paymentData": {
"type": "string",
"description": "JSON encoded data with info about a relevant payment, if any"
},
"insertTime": {
"type": "string",
"description": "When the server created the scanning."
},
"msgType": {
"type": "string"
}
},
"required": [
"id",
"parentId",
"localId",
"localParentId",
"deviceId",
"scannerId",
"entranceId",
"zoneId",
"tokenId",
"accessTypeId",
"usageUnitId",
"periodId",
"virtualQueueCouponTicketId",
"virtualQueuePhysicalCouponTicketId",
"tokenTypeId",
"tokenValue",
"eventId",
"when",
"cancelled",
"cancelledByUserId",
"statusCode",
"mode",
"insertTime",
"msgType"
]
}
204
Report status ¶
Report statusPOST/RabbitMQ-has-no-such-URL/MessageDeviceStatus{?exchangeName,routingKey,priority}
Periodically the device should report the device status.
Example URI
- exchangeName
string
(required)Use the default exchange ‘’.
- routingKey
string
(required) Example: Beautiful Bjarne- priority
number
(required) Example: 0Use priority 0 for bulk messages.
Headers
Content-Type: application/json
Body
{
"msgType": "MessageDeviceStatus",
"deviceId": 70,
"time": "2018-08-05T12:30:00+02:00",
"venueSyncStatus": [
{
"venueId": 10,
"lastSyncId": 999
}
],
"eventSyncStatus": [
{
"eventId": 30,
"lastSyncId": 999
}
],
"stateChanges": [
{
"id": 72,
"deviceId": 70,
"serverTime": "2018-08-05T12:30:00+02:00",
"deviceTime": "2018-08-05T12:30:00+02:00",
"type": "power",
"value": "off"
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"deviceId": {
"type": "number",
"description": "ID of the device reporting."
},
"time": {
"type": "string",
"description": "The client local time when the status was sent."
},
"venueSyncStatus": {
"type": "array",
"description": "Information about highest syncId received per venue."
},
"eventSyncStatus": {
"type": "array",
"description": "Information about highest syncId received per event."
},
"stateChanges": {
"type": "array",
"description": "List of state changes since last status."
}
},
"required": [
"msgType",
"deviceId",
"time",
"venueSyncStatus",
"eventSyncStatus",
"stateChanges"
]
}
204
Report change to device lane selected mode ¶
Report change to device lane selected modePOST/RabbitMQ-has-no-such-URL/MessageDeviceLaneSelectedMode{?exchangeName,routingKey,priority}
The selected mode for a lane was changed on the device.
Example URI
- exchangeName
string
(required)Use the default exchange ‘’.
- routingKey
string
(required) Example: Beautiful Bjarne- priority
number
(required) Example: 1Use priority 1 for non-bulk messages.
Headers
Content-Type: application/json
Body
{
"msgType": "MessageDeviceLaneSelectedMode",
"deviceId": 70,
"laneName": "A",
"selectedMode": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"deviceId": {
"type": "number",
"description": "ID of the device reporting."
},
"laneName": {
"type": "string",
"description": "Name of the lane that were changed."
},
"selectedMode": {
"type": "number",
"description": "The new selected mode."
}
},
"required": [
"msgType",
"deviceId",
"laneName",
"selectedMode"
]
}
204
Report locker controller device channel state changes ¶
Report locker controller device channel state changesPOST/RabbitMQ-has-no-such-URL/UpdateLockerControllerDeviceChannels{?exchangeName,routingKey,priority}
This message is sent when one or more channels on a locker controller changes state.
Example URI
- exchangeName
string
(required)Use the default exchange ‘’.
- routingKey
string
(required) Example: Beautiful Bjarne- priority
number
(required) Example: 0Use priority 0 for bulk messages.
Headers
Content-Type: application/json
Body
{
"msgType": "UpdateLockerControllerDeviceChannels",
"scannerId": 60,
"deviceId": 70,
"channels": [
{
"deviceName": "CU48-0",
"channel": 1,
"isOpen": false,
"changedTime": "2018-08-05T12:30:00+02:00"
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"scannerId": {
"type": "number",
"description": "ID of the scanner of the device."
},
"deviceId": {
"type": "number",
"description": "ID of the device reporting."
},
"channels": {
"type": "array",
"description": "The changed channels."
}
},
"required": [
"msgType",
"scannerId",
"deviceId",
"channels"
]
}
204
Messages to clients ¶
This section describes the simple message types that are sent from the server to the clients via the broadcast exchange and the organizer’s sync exchange.
Message: Feedback ¶
Message: FeedbackGET/RabbitMQ-has-no-such-URL/Feedback
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 13,
"name": "Grøn med gult blink",
"label": "green",
"definition": "beep2",
"msgType": "Feedback"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"label": {
"type": "string",
"description": "Unique identifier for this Feedback"
},
"definition": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name",
"label",
"definition",
"msgType"
]
}
Message: TokenType ¶
Message: TokenTypeGET/RabbitMQ-has-no-such-URL/TokenType
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 110,
"name": "NFC UID",
"transform": "uppercase",
"validation": "/^[0-9A-F]+$/",
"msgType": "TokenType"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"transform": {
"type": "string",
"enum": [
"uppercase",
"lowercase"
],
"description": "Transform values before validation and save"
},
"validation": {
"type": "string",
"description": "Regular expression for validating token values before they are saved. If specified it must be a full PCRE pattern, see https://www.php.net/manual/en/reference.pcre.pattern.syntax.php"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name",
"msgType"
]
}
Message: Organizer ¶
Message: OrganizerGET/RabbitMQ-has-no-such-URL/Organizer
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"label": "smukfest",
"name": "Smukfest",
"msgType": "Organizer"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"label": {
"type": "string"
},
"name": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"label",
"name",
"msgType"
]
}
Message: OrganizerConfigurationValue ¶
Message: OrganizerConfigurationValueGET/RabbitMQ-has-no-such-URL/OrganizerConfigurationValue
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 15,
"organizerId": 10,
"label": "timeoutAccessAssumed",
"value": "5000",
"msgType": "OrganizerConfigurationValue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"label": {
"type": "string"
},
"value": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"label",
"value",
"msgType"
]
}
Message: DayType ¶
Message: DayTypeGET/RabbitMQ-has-no-such-URL/DayType
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 200,
"organizerId": 10,
"isActive": true,
"name": "Helligdag",
"color": "0000FF",
"msgType": "DayType"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"name": {
"type": "string"
},
"color": {
"type": "string",
"description": "6 digit hex code"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"isActive",
"name",
"color",
"msgType"
]
}
Message: DayTypePeriod ¶
Message: DayTypePeriodGET/RabbitMQ-has-no-such-URL/DayTypePeriod
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 205,
"dayTypeId": 200,
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled",
"msgType": "DayTypePeriod"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"dayTypeId": {
"type": "number"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"tags": {
"type": "string",
"description": "Comma-separated string of tags"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"dayTypeId",
"startTime",
"endTime",
"tags",
"msgType"
]
}
Message: UsageUnit ¶
Message: UsageUnitGET/RabbitMQ-has-no-such-URL/UsageUnit
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 170,
"isActive": true,
"organizerId": 10,
"label": "turbandpoint",
"name": "Turbandpoint",
"shortName": "ture",
"code": "XTP",
"exponent": 0,
"msgType": "UsageUnit"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"organizerId": {
"type": "number"
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"shortName": {
"type": "string"
},
"code": {
"type": "string"
},
"exponent": {
"type": "number",
"description": "The exponent (10^x) is the difference between the major and minor units. This is usually 2 for a real currency and 0 for everything else."
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"isActive",
"organizerId",
"label",
"name",
"shortName",
"code",
"exponent",
"msgType"
]
}
Message: UsageUnitConversionRate ¶
Message: UsageUnitConversionRateGET/RabbitMQ-has-no-such-URL/UsageUnitConversionRate
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 175,
"organizerId": 10,
"fromUsageUnitId": 170,
"toUsageUnitId": 171,
"rate": 20,
"msgType": "UsageUnitConversionRate"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"fromUsageUnitId": {
"type": "number"
},
"toUsageUnitId": {
"type": "number"
},
"rate": {
"type": "number",
"description": "The value of 1 fromUsageUnitId in toUsageUnitId. If > 1, then from is worth the most. If < 1, then to is worth the most. If 1, then they are equal. If 0 or missing, then this conversion is not possible."
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"organizerId",
"fromUsageUnitId",
"toUsageUnitId",
"rate",
"msgType"
]
}
Message: Venue ¶
Message: VenueGET/RabbitMQ-has-no-such-URL/Venue
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 10,
"uuid": "ce57739c-486a-4cfd-a46c-30812a35fd96",
"name": "Bøgeskoven",
"organizerId": 10,
"msgType": "Venue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"name": {
"type": "string"
},
"organizerId": {
"type": "number"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"name",
"organizerId",
"msgType"
]
}
Message: Zone ¶
Message: ZoneGET/RabbitMQ-has-no-such-URL/Zone
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 40,
"uuid": "22496567-bd39-11eb-9e95-0242c0a83002",
"venueId": 10,
"zoneGroupId": 40,
"name": "Backstage",
"imageUrl": "https://placekitten.com/480/640",
"listImageUrl": "https://placekitten.com/480/640",
"msgType": "Zone"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"venueId": {
"type": "number"
},
"zoneGroupId": {
"type": "number"
},
"name": {
"type": "string"
},
"imageUrl": {
"type": "string",
"description": "URL to a zone image"
},
"listImageUrl": {
"type": "string",
"description": "URL to a zone list image"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"venueId",
"zoneGroupId",
"name",
"msgType"
]
}
Message: ZoneCost ¶
Message: ZoneCostGET/RabbitMQ-has-no-such-URL/ZoneCost
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 45,
"zoneId": 40,
"usageUnitId": 170,
"count": 1,
"allowDirectUsage": false,
"msgType": "ZoneCost"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"usageUnitId": {
"type": "number"
},
"count": {
"type": "number"
},
"allowDirectUsage": {
"type": "boolean",
"description": "Allow this ZoneCost to be used without scanning of a token"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"usageUnitId",
"count",
"allowDirectUsage",
"msgType"
]
}
Message: ZonePopulation ¶
Message: ZonePopulationGET/RabbitMQ-has-no-such-URL/ZonePopulation
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 47,
"zoneId": 40,
"eventId": 30,
"current": 109,
"max": 150,
"reopenThreshold": 5,
"resetAtDayStart": true,
"msgType": "ZonePopulation"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"current": {
"type": "number"
},
"max": {
"type": "number",
"description": "Set to 0 to not have any limits"
},
"reopenThreshold": {
"type": "number",
"description": "How much below the max should \"current\" be before the entrances will open again."
},
"resetAtDayStart": {
"type": "boolean",
"description": "Reset current to 0 when the day starts"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"eventId",
"current",
"max",
"reopenThreshold",
"resetAtDayStart",
"msgType"
]
}
Message: ZonePopulationChange ¶
Message: ZonePopulationChangeGET/RabbitMQ-has-no-such-URL/ZonePopulationChange
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": 48,
"zoneId": 40,
"eventId": 30,
"quantity": 1,
"currentBeforeChange": 108,
"insertTime": "2018-08-05T12:30:00+02:00",
"userId": 20,
"deviceId": 70,
"scanningId": 111,
"ticketId": 100,
"msgType": "ZonePopulationChange"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"quantity": {
"type": "number"
},
"currentBeforeChange": {
"type": "number"
},
"insertTime": {
"type": "string"
},
"userId": {
"type": [
"number",
"null"
],
"description": "Set if change done by a user"
},
"deviceId": {
"type": [
"number",
"null"
],
"description": "Set if change done by a scanning"
},
"scanningId": {
"type": [
"number",
"null"
],
"description": "Set if change done by a scanning"
},
"ticketId": {
"type": [
"number",
"null"
],
"description": "Can be set if change done by a scanning"
},
"msgType": {
"type": "string"
}
},
"required": [
"id",
"zoneId",
"eventId",
"quantity",
"currentBeforeChange",
"insertTime",
"userId",
"deviceId",
"scanningId",
"ticketId",
"msgType"
]
}
Message: Entrance ¶
Message: EntranceGET/RabbitMQ-has-no-such-URL/Entrance
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 50,
"venueId": 10,
"name": "Hollændersvinget",
"type": "entrance",
"innerZoneId": 40,
"outerZoneId": 41,
"note": "Personaleindgang",
"pin": "1111",
"adjustPopulationForInnerZone": true,
"adjustPopulationForOuterZone": true,
"msgType": "Entrance"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"venueId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"entrance",
"lockers"
]
},
"innerZoneId": {
"type": "number"
},
"outerZoneId": {
"type": "number"
},
"note": {
"type": [
"string",
"null"
]
},
"pin": {
"type": "string"
},
"adjustPopulationForInnerZone": {
"type": "boolean"
},
"adjustPopulationForOuterZone": {
"type": "boolean"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"venueId",
"name",
"type",
"innerZoneId",
"outerZoneId",
"note",
"adjustPopulationForInnerZone",
"adjustPopulationForOuterZone",
"msgType"
]
}
Message: Device ¶
Message: DeviceGET/RabbitMQ-has-no-such-URL/Device
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 70,
"uuid": "70e8a858-5f24-4cfc-b18b-205f2eefebcf",
"type": "CHD 8",
"name": "Håndterminal #23",
"label": "VM-0109",
"uniqueId": "6993b1a0-1f3f-4a69-bb41-1e07ed2562cc",
"msgType": "Device"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": [
"number",
"null"
]
},
"uuid": {
"type": "string"
},
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"uniqueId": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"type",
"name",
"label",
"uniqueId",
"msgType"
]
}
Message: DeviceLane ¶
Message: DeviceLaneGET/RabbitMQ-has-no-such-URL/DeviceLane
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 71,
"deviceId": 70,
"name": "1",
"allowedModes": 1,
"selectedMode": 1,
"msgType": "DeviceLane"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"deviceId": {
"type": "number"
},
"name": {
"type": "string"
},
"allowedModes": {
"type": "number",
"description": "Bit mask: 1=scan in, 2=scan out, 4=count in, 8=count out, 16=open in, 32=open out. Closed is always allowed"
},
"selectedMode": {
"type": "number",
"description": "Selected modes. A bit mask from allowedModes, or 0 for closed."
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"deviceId",
"name",
"allowedModes",
"selectedMode",
"msgType"
]
}
Message: Scanner ¶
Message: ScannerGET/RabbitMQ-has-no-such-URL/Scanner
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 60,
"uuid": "0c669ae0-247d-4170-af18-7cb650589e8b",
"entranceId": 50,
"name": "Hollændersvinget mølle 1",
"deviceId": 70,
"msgType": "Scanner"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"entranceId": {
"type": "number"
},
"name": {
"type": "string"
},
"deviceId": {
"type": "number",
"description": "NULL if no device is selected."
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"entranceId",
"name",
"deviceId",
"msgType"
]
}
Message: LockerGroup ¶
Message: LockerGroupGET/RabbitMQ-has-no-such-URL/LockerGroup
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 360,
"uuid": "4b2d842b-9b07-4730-a44e-d9a9be01a75b",
"scannerId": 60,
"name": "AA",
"mode": "production",
"note": "Er på Smukfest",
"pickupCode": "4242",
"externalEventId": "Hello, world!",
"msgType": "LockerGroup"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"scannerId": {
"type": "number"
},
"name": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"production",
"service"
]
},
"note": {
"type": [
"string",
"null"
]
},
"pickupCode": {
"type": "string"
},
"externalEventId": {
"type": [
"string",
"null"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"scannerId",
"name",
"mode",
"note",
"pickupCode",
"externalEventId",
"msgType"
]
}
Message: LockerSection ¶
Message: LockerSectionGET/RabbitMQ-has-no-such-URL/LockerSection
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 370,
"lockerGroupId": 360,
"name": "A",
"msgType": "LockerSection"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerGroupId": {
"type": "number"
},
"name": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerGroupId",
"name",
"msgType"
]
}
Message: LockerBox ¶
Message: LockerBoxGET/RabbitMQ-has-no-such-URL/LockerBox
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 380,
"lockerSectionId": 370,
"number": "12",
"status": "available",
"statusChanged": "2018-08-05T14:00:00+02:00",
"isRejected": false,
"lockerControllerName": "Kerung-CU48",
"lockerDeviceName": "CU48-0",
"lockerChannel": 1,
"rgbControllerName": "Godik 80-kanals RGB-LED-driver",
"rgbIndex": 1,
"positionX": 0,
"positionY": 0,
"width": 300,
"height": 500,
"activeLockerBookingId": 390,
"msgType": "LockerBox"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerSectionId": {
"type": "number"
},
"number": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"available",
"booking",
"blocked",
"occupied"
]
},
"statusChanged": {
"type": [
"string",
"null"
]
},
"isRejected": {
"type": "boolean"
},
"lockerControllerName": {
"type": [
"string",
"null"
]
},
"lockerDeviceName": {
"type": [
"string",
"null"
]
},
"lockerChannel": {
"type": "number"
},
"rgbControllerName": {
"type": [
"string",
"null"
]
},
"rgbIndex": {
"type": "number"
},
"positionX": {
"type": "number",
"description": "Distance from left edge (mm)"
},
"positionY": {
"type": "number",
"description": "Distance from floor (mm)"
},
"width": {
"type": "number",
"description": "Box outer width (mm)"
},
"height": {
"type": "number",
"description": "Box outer height (mm)"
},
"activeLockerBookingId": {
"type": [
"number",
"null"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerSectionId",
"number",
"status",
"statusChanged",
"isRejected",
"lockerControllerName",
"lockerDeviceName",
"lockerChannel",
"rgbControllerName",
"rgbIndex",
"positionX",
"positionY",
"width",
"height",
"activeLockerBookingId",
"msgType"
]
}
Message: LockerBooking ¶
Message: LockerBookingGET/RabbitMQ-has-no-such-URL/LockerBooking
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 390,
"lockerBoxId": 380,
"information": "Hello, world!",
"externalEventId": "Hello, world!",
"msgType": "LockerBooking"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"lockerBoxId": {
"type": "number"
},
"information": {
"type": "string"
},
"externalEventId": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"lockerBoxId",
"information",
"msgType"
]
}
Message: Event ¶
Message: EventGET/RabbitMQ-has-no-such-URL/Event
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 30,
"uuid": "8e305cde-c75a-11eb-a0a9-0242c0a83002",
"venueId": 10,
"type": "normal",
"name": "Smukfest 2018",
"startTime": "2018-08-08T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00",
"baseTime": "2018-08-08T10:00:00+02:00",
"imageUrl": "https://placekitten.com/480/640",
"isActive": true,
"requireUniqueTicketNames": false,
"useBlacklist": false,
"msgType": "Event"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"venueId": {
"type": "number"
},
"type": {
"type": "string",
"enum": [
"normal",
"template"
]
},
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"baseTime": {
"type": "string"
},
"imageUrl": {
"type": "string",
"description": "URL to an event image"
},
"isActive": {
"type": "boolean"
},
"requireUniqueTicketNames": {
"type": "boolean",
"description": "Require that ticket names, if set, are unique across the event"
},
"useBlacklist": {
"type": "boolean",
"description": "Validate ticket names against the virtual queue ProfanityBlacklist terms"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"venueId",
"type",
"name",
"startTime",
"endTime",
"baseTime",
"isActive",
"requireUniqueTicketNames",
"useBlacklist",
"msgType"
]
}
Message: EventEntranceRule ¶
Message: EventEntranceRuleGET/RabbitMQ-has-no-such-URL/EventEntranceRule
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 35,
"eventId": 30,
"name": "Close at end of the day",
"entranceId": 50,
"calendarId": 210,
"autoCloseIn": true,
"autoCloseOut": false,
"autoOpenIn": true,
"autoOpenOut": false,
"msgType": "EventEntranceRule"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"entranceId": {
"type": "number"
},
"calendarId": {
"type": [
"number",
"null"
]
},
"autoCloseIn": {
"type": "boolean",
"description": "Force close in-direction at the end of all periods in the calendar"
},
"autoCloseOut": {
"type": "boolean",
"description": "Force close out-direction at the end of all periods in the calendar"
},
"autoOpenIn": {
"type": "boolean",
"description": "Remove forced closed for in-direction at the start of all periods in the calendar"
},
"autoOpenOut": {
"type": "boolean",
"description": "Remove forced closed for out-direction at the start of all periods in the calendar"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"entranceId",
"calendarId",
"autoCloseIn",
"autoCloseOut",
"autoOpenIn",
"autoOpenOut",
"msgType"
]
}
Message: Calendar ¶
Message: CalendarGET/RabbitMQ-has-no-such-URL/Calendar
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 210,
"eventId": 30,
"name": "Backstage",
"msgType": "Calendar"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"msgType"
]
}
Message: CalendarDay ¶
Message: CalendarDayGET/RabbitMQ-has-no-such-URL/CalendarDay
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 215,
"calendarId": 210,
"date": "2020-12-24",
"dayTypeId": 200,
"msgType": "CalendarDay"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"calendarId": {
"type": "number"
},
"date": {
"type": "string"
},
"dayTypeId": {
"type": "number"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"calendarId",
"date",
"dayTypeId",
"msgType"
]
}
Message: CalendarDayPeriod ¶
Message: CalendarDayPeriodGET/RabbitMQ-has-no-such-URL/CalendarDayPeriod
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 218,
"calendarDayId": 215,
"dayTypePeriodId": 205,
"startTime": "12:00:00",
"endTime": "18:00:00",
"tags": "da,cancelled",
"msgType": "CalendarDayPeriod"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"calendarDayId": {
"type": "number"
},
"dayTypePeriodId": {
"type": "number"
},
"startTime": {
"type": [
"string",
"null"
]
},
"endTime": {
"type": [
"string",
"null"
]
},
"tags": {
"type": [
"string",
"null"
],
"description": "Comma-separated string of tags"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"calendarDayId",
"dayTypePeriodId",
"startTime",
"endTime",
"tags",
"msgType"
]
}
Message: Period ¶
Message: PeriodGET/RabbitMQ-has-no-such-URL/Period
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 80,
"eventId": 30,
"name": "Torsdag",
"startTime": "2018-08-09T12:00:00+02:00",
"endTime": "2018-08-10T04:00:00+02:00",
"msgType": "Period"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"startTime",
"endTime",
"msgType"
]
}
Message: AccessType ¶
Message: AccessTypeGET/RabbitMQ-has-no-such-URL/AccessType
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210,
"msgType": "AccessType"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"feedbackId": {
"type": "number",
"description": "The type of feedback given when access is granted."
},
"priority": {
"type": "number",
"description": "Priority of access types if multiple give access (higher means more important)."
},
"addOnTicketCreation": {
"type": "boolean",
"description": "Should this access type be added to all tickets when they are created?"
},
"requireProfileImage": {
"type": "boolean",
"description": "Does this access type require tickets to have a profile image URL?"
},
"updateZonePopulations": {
"type": "boolean",
"description": "Should the zone populations be updated when access has been granted? Default is true."
},
"ignoreMaxPopulation": {
"type": "boolean",
"description": "Can this access type enter a zone even if its max population has been reached?"
},
"forceDirection": {
"type": "string",
"enum": [
"in",
"out",
"reverse"
],
"description": "Force open turnstiles in this direction, instead of their current direction."
},
"stock": {
"type": "number",
"description": "How many tickets can have this access type? -1 for unlimited."
},
"maxMultiplier": {
"type": "number",
"description": "The max of the multiplier on a scan when this access type is used. 0 for unlimited."
},
"maxUsages": {
"type": "number",
"description": "The number of times the ticket is valid for this access. 0 for no limit. See maxUsagesType."
},
"maxUsagesType": {
"type": "string",
"enum": [
"event",
"period",
"zone",
"day",
"week",
"month"
],
"description": "If maxUsages is set, this value defines the interval for which the limit is enforced."
},
"usageUnitId": {
"type": "number"
},
"waitingPeriod": {
"type": "number",
"description": "Seconds after a successful scanning before a ticket can be scanned again (by the same device)."
},
"allowMultiplePendingScannings": {
"type": "boolean",
"description": "Allow multiple skannings of this access before an entry is registered, e.g. for tour pass that can be used for multiple people."
},
"calendarId": {
"type": "number"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"feedbackId",
"priority",
"maxMultiplier",
"maxUsages",
"maxUsagesType",
"msgType"
]
}
Message: Ticket ¶
Message: TicketGET/RabbitMQ-has-no-such-URL/Ticket
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"msgType": "Ticket"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"source": {
"type": "string",
"description": "Required if externalId is given."
},
"externalId": {
"type": "string",
"description": "Eg digital_product_id if a ticket from shop.smukfest.dk."
},
"externalGroup": {
"type": "string"
},
"externalData": {
"type": "string",
"description": "JSON is recommended"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"languageCode": {
"type": "string",
"description": "The preferred language to show when this ticket is used (currently only da, en, and de is available."
},
"profileImageUrl": {
"type": "string",
"description": "URL to a profile image"
},
"name": {
"type": "string",
"description": "Name on the ticket"
},
"productName": {
"type": "string",
"description": "Name of the product that generated the ticket"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"isValid",
"msgType"
]
}
Message: Ticket2AccessType ¶
Message: Ticket2AccessTypeGET/RabbitMQ-has-no-such-URL/Ticket2AccessType
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"msgType": "Ticket2AccessType",
"id": 140,
"ticketId": 100,
"accessTypeId": 90
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"msgType": {
"type": "string"
},
"id": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"accessTypeId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"msgType",
"id",
"ticketId",
"accessTypeId"
]
}
Message: TicketUsageCount ¶
Message: TicketUsageCountGET/RabbitMQ-has-no-such-URL/TicketUsageCount
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"msgType": "TicketUsageCount",
"ticketId": 100,
"accessTypeId": 90,
"periodId": 80,
"zoneId": 40,
"usageUnitId": 170,
"count": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"msgType": {
"type": "string"
},
"ticketId": {
"type": "number"
},
"accessTypeId": {
"type": "number"
},
"periodId": {
"type": [
"number",
"null"
]
},
"zoneId": {
"type": [
"number",
"null"
]
},
"usageUnitId": {
"type": [
"number",
"null"
]
},
"count": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"msgType",
"ticketId",
"accessTypeId"
]
}
Message: Token ¶
Message: TokenGET/RabbitMQ-has-no-such-URL/Token
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1,
"msgType": "Token"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"tokenTypeId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"externalId": {
"type": "string",
"description": "Eg card_number_id for a season card from VM shop."
},
"externalType": {
"type": "string"
},
"value": {
"type": "string"
},
"class": {
"type": "string",
"enum": [
"normal",
"issue"
]
},
"status": {
"type": "string",
"enum": [
"known",
"active",
"blocked"
]
},
"validStartTime": {
"type": "string",
"description": "The token is valid from this time. Null means since the beginning of time."
},
"validEndTime": {
"type": "string",
"description": "The token is valid until this time. Null means forever."
},
"blockAfterUseCount": {
"type": "number",
"description": "Change status to blocked after the token has been granted access this many times. 0 to never automatically block token"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"tokenTypeId",
"ticketId",
"value",
"class",
"status",
"blockAfterUseCount",
"msgType"
]
}
Message: Zone2Period2AccessType ¶
Message: Zone2Period2AccessTypeGET/RabbitMQ-has-no-such-URL/Zone2Period2AccessType
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 160,
"zoneId": 40,
"periodId": 80,
"accessTypeId": 90,
"grantedTime": "2019-01-01T05:00:00+02:00",
"revokedTime": "Hello, world!",
"msgType": "Zone2Period2AccessType"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"zoneId": {
"type": "number"
},
"periodId": {
"type": [
"number",
"null"
]
},
"accessTypeId": {
"type": "number"
},
"grantedTime": {
"type": "string"
},
"revokedTime": {
"type": [
"string",
"null"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"zoneId",
"accessTypeId",
"grantedTime",
"msgType"
]
}
Message: VirtualQueue ¶
Message: VirtualQueueGET/RabbitMQ-has-no-such-URL/VirtualQueue
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 230,
"uuid": "6edf9912-e2e4-465e-9678-2dabe5810b57",
"eventId": 30,
"zoneId": 40,
"attractionZoneId": 41,
"physicalQueueZoneId": 42,
"parkZoneId": 43,
"virtualQueueGroupId": 220,
"parentVirtualQueueId": 231,
"isActive": true,
"type": "flow",
"maxPopulation": 50,
"couponGroupMaxSize": 20,
"couponGroupNamePattern": "VR1##",
"couponMaxSize": 8,
"couponTimeout": 900,
"openCalendarId": 210,
"openingDuration": 900,
"closingDuration": 900,
"allowSpectators": false,
"hasExternalCalculations": false,
"flowWindowSize": 1800,
"minFlowPerHour": 10,
"minWelcomed": 10,
"minBoarded": 10,
"estimatedNoShowBeforeWelcome": 0.5,
"estimatedNoShowAfterWelcome": 0.5,
"estimatedArrivalTime": 235,
"insideDuration": 300,
"calendarWelcomeDuration": 1800,
"childCouponAlsoBoardedAtChild": false,
"minAdjustedWelcomedTime": 60,
"warningPreBuffer": 300,
"warningPostBuffer": 300,
"msgType": "VirtualQueue"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"zoneId": {
"type": "number",
"description": "The buffer zone (name is taken from this)"
},
"attractionZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"physicalQueueZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow"
},
"parkZoneId": {
"type": [
"number",
"null"
],
"description": "Only for type==flow and type==max_population"
},
"virtualQueueGroupId": {
"type": "number"
},
"parentVirtualQueueId": {
"type": "number"
},
"isActive": {
"type": "boolean"
},
"type": {
"type": "string",
"enum": [
"flow",
"max_population",
"calendar"
]
},
"maxPopulation": {
"type": "number",
"description": "Only for type==max_population and type==calendar"
},
"couponGroupMaxSize": {
"type": "number"
},
"couponGroupNamePattern": {
"type": "string"
},
"couponMaxSize": {
"type": "number"
},
"couponTimeout": {
"type": "number"
},
"openCalendarId": {
"type": "number"
},
"openingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"closingDuration": {
"type": "number",
"description": "Only for type==flow and type==max_population"
},
"allowSpectators": {
"type": "boolean",
"description": "Allow coupons with spectators that can only enter the parent queue. Only for type==flow and type==max_population"
},
"hasExternalCalculations": {
"type": "boolean",
"description": "Can the expected wait time be calculated externally. Only for type==flow and type==max_population"
},
"flowWindowSize": {
"type": "number",
"description": "Seconds to look back to calculate the flow. Only for type==flow and type==max_population"
},
"minFlowPerHour": {
"type": "number",
"description": "The minimal flow to use. Only for type==flow and type==max_population"
},
"minWelcomed": {
"type": "number",
"description": "Always has at least this many welcomed. Only for type==flow"
},
"minBoarded": {
"type": "number",
"description": "Always has at least this many boarded (in the physical queue). Only for type==flow"
},
"estimatedNoShowBeforeWelcome": {
"type": "number",
"description": "Percentage of join tickets that dequeues before being welcomed"
},
"estimatedNoShowAfterWelcome": {
"type": "number",
"description": "Percentage of welcomed tickets that does not board"
},
"estimatedArrivalTime": {
"type": "number",
"description": "Number of seconds after being welcomed guests are estimated to board"
},
"insideDuration": {
"type": [
"number",
"null"
],
"description": "How long, in seconds, is each ticket expected to be inside the zone"
},
"calendarWelcomeDuration": {
"type": [
"number",
"null"
],
"description": "How long before the booking time, in seconds, is a coupon welcomed to the queue. Only for type==calendar"
},
"childCouponAlsoBoardedAtChild": {
"type": "boolean",
"description": "When a coupon from a child queue is scanned should it also be marked as boarded at the child queue?"
},
"minAdjustedWelcomedTime": {
"type": "number",
"description": "How much adjustment, in seconds, is needed before coupon groups are marked as having an adjusted welcomed time"
},
"warningPreBuffer": {
"type": [
"number",
"null"
],
"description": "Pre-buffer, in seconds, for double-booking warning calculations"
},
"warningPostBuffer": {
"type": [
"number",
"null"
],
"description": "Post-buffer, in seconds, for double-booking warning calculations"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"zoneId",
"attractionZoneId",
"physicalQueueZoneId",
"parkZoneId",
"isActive",
"type",
"maxPopulation",
"couponGroupMaxSize",
"couponGroupNamePattern",
"couponMaxSize",
"couponTimeout",
"openingDuration",
"closingDuration",
"allowSpectators",
"hasExternalCalculations",
"flowWindowSize",
"minFlowPerHour",
"minWelcomed",
"minBoarded",
"estimatedNoShowBeforeWelcome",
"estimatedNoShowAfterWelcome",
"estimatedArrivalTime",
"insideDuration",
"calendarWelcomeDuration",
"childCouponAlsoBoardedAtChild",
"minAdjustedWelcomedTime",
"warningPreBuffer",
"warningPostBuffer",
"msgType"
]
}
Message: VirtualQueueStatus ¶
Message: VirtualQueueStatusGET/RabbitMQ-has-no-such-URL/VirtualQueueStatus
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"status": "open",
"flowPerHour": 10,
"expectedWaitTimeMinutes": 14,
"externalExpectedWaitTimeMinutes": 14,
"msgType": "VirtualQueueStatus"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"status": {
"type": "string",
"enum": [
"open",
"welcoming",
"paused",
"closing",
"closed"
]
},
"flowPerHour": {
"type": "number"
},
"expectedWaitTimeMinutes": {
"type": "number",
"description": "Expected wait time in minutes"
},
"externalExpectedWaitTimeMinutes": {
"type": [
"number",
"null"
],
"description": "Expected wait time in minutes calculated by an external service"
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"status",
"flowPerHour",
"expectedWaitTimeMinutes",
"externalExpectedWaitTimeMinutes",
"msgType"
]
}
Message: VirtualQueueCoupon ¶
Message: VirtualQueueCouponGET/RabbitMQ-has-no-such-URL/VirtualQueueCoupon
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 240,
"uuid": "807d8feb-616f-11eb-93d6-0242c0a83003",
"virtualQueueId": 230,
"time": "2018-08-05T12:30:00+02:00",
"priority": 100,
"expectedWelcomedTime": "2018-08-05T12:30:00+02:00",
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"notTimeoutBeforeTime": "2018-08-05T12:30:00+02:00",
"virtualQueueCouponGroupId": 250,
"status": "in queue",
"msgType": "VirtualQueueCoupon"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"virtualQueueId": {
"type": "number"
},
"time": {
"type": [
"string",
"null"
],
"description": "Time for a virtual queue with a calendar (full timestamp)"
},
"priority": {
"type": [
"number",
"null"
],
"description": "The priority of the coupon. Can only be set if it is a User that performs the request"
},
"expectedWelcomedTime": {
"type": [
"string",
"null"
],
"description": "The originally calculated time the coupon would be welcomed"
},
"notWelcomedBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not welcome to the queue until after this time"
},
"notTimeoutBeforeTime": {
"type": [
"string",
"null"
],
"description": "Do not timeout the coupon until after this time"
},
"virtualQueueCouponGroupId": {
"type": [
"number",
"null"
],
"description": "The coupon group used for creating this coupon"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"postponed",
"dequeued",
"timed out",
"boarding",
"boarded",
"exited"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"virtualQueueId",
"time",
"priority",
"expectedWelcomedTime",
"notWelcomedBeforeTime",
"notTimeoutBeforeTime",
"virtualQueueCouponGroupId",
"status",
"msgType"
]
}
Message: VirtualQueueCouponTicket ¶
Message: VirtualQueueCouponTicketGET/RabbitMQ-has-no-such-URL/VirtualQueueCouponTicket
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 270,
"virtualQueueCouponId": 240,
"ticketId": 100,
"isSpectator": false,
"notWelcomedBeforeTime": "2018-08-05T12:30:00+02:00",
"status": "in queue",
"msgType": "VirtualQueueCouponTicket"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueCouponId": {
"type": "number"
},
"ticketId": {
"type": [
"number",
"null"
]
},
"isSpectator": {
"type": "boolean",
"description": "This ticket is just a spectator"
},
"notWelcomedBeforeTime": {
"type": "string",
"description": "Do not welcome to the queue until after this time"
},
"status": {
"type": "string",
"enum": [
"in queue",
"welcomed",
"dequeued",
"timed out",
"boarded",
"boarded at parent",
"exited"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueCouponId",
"ticketId",
"isSpectator",
"notWelcomedBeforeTime",
"status",
"msgType"
]
}
Message: VirtualQueuePhysicalCouponTicket ¶
Message: VirtualQueuePhysicalCouponTicketGET/RabbitMQ-has-no-such-URL/VirtualQueuePhysicalCouponTicket
Example URI
200
Headers
Content-Type: application/json
Body
{
"syncId": 999,
"isDeleted": false,
"id": 350,
"virtualQueueId": 230,
"ticketId": 100,
"status": "in queue",
"virtualQueueCouponTicketId": 270,
"msgType": "VirtualQueuePhysicalCouponTicket"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"virtualQueueId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"in queue",
"dequeued",
"boarded"
]
},
"virtualQueueCouponTicketId": {
"type": [
"number",
"null"
]
},
"msgType": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"virtualQueueId",
"ticketId",
"status",
"virtualQueueCouponTicketId",
"msgType"
]
}
Message: UnlockLockerControllerDeviceChannel ¶
Message: UnlockLockerControllerDeviceChannelGET/RabbitMQ-has-no-such-URL/UnlockLockerControllerDeviceChannel
This message is sent from the server to a client when a Locker needs to be unlocked. It is sent directly to the client’s CallbackQueue.
Example URI
200
Headers
Content-Type: application/json
Body
{
"msgType": "UnlockLockerControllerDeviceChannel",
"deviceName": "CU48-0",
"channel": 1
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"deviceName": {
"type": "string",
"description": "Name of the device"
}
},
"required": [
"msgType",
"deviceName"
],
"oneOf": [
{
"properties": {
"channel": {
"type": "number",
"description": "The number of the channel to unlock"
}
},
"required": [
"channel"
]
},
{
"properties": {
"channel": {
"type": "string",
"description": "* to unlock all channels"
}
},
"required": [
"channel"
]
}
]
}
Message: LedControllerSetRGB ¶
Message: LedControllerSetRGBGET/RabbitMQ-has-no-such-URL/LedControllerSetRGB
This message is sent from the server to a client when an LED should change color. It is sent directly to the client’s CallbackQueue.
Example URI
200
Headers
Content-Type: application/json
Body
{
"msgType": "LedControllerSetRGB",
"controllerName": "Godik 80-kanals RGB-LED-driver",
"index": 1,
"red": true,
"green": false,
"blue": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"controllerName": {
"type": "string",
"description": "Name of the controller"
},
"index": {
"type": "number",
"description": "The number of the LED to update"
},
"red": {
"type": "boolean",
"description": "True/False to turn on/off the red LED."
},
"green": {
"type": "boolean",
"description": "True/False to turn on/off the green LED."
},
"blue": {
"type": "boolean",
"description": "True/False to turn on/off the blue LED."
}
},
"required": [
"msgType",
"controllerName",
"index"
]
}
Reporting and "Big Data" ¶
If a system wants to receive real time updates about eg scannings, the system needs to create its own durable queue and bind it to the “data_{organizer_label}” exchange described above.
Use the binding key “#” to get all messages, or “event_{eventId}” (e.g. “event_1”) to only receive data for a specific event.
Please contact Venue Manager if you need an AMQP user for this service.
Message: Scannings ¶
Message: ScanningsGET/RabbitMQ-has-no-such-URL/Scanning
All scannings are send on the “data_{organizer_label}” exchange in this format. Use the REST API to get information about the various IDs in this message.
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": 111,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": 1,
"tokenValue": "Hello, world!",
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 1,
"usageUnitCount": 1,
"multiplier": 1,
"paymentData": "Hello, world!",
"insertTime": "2018-08-05T12:30:00+02:00",
"modeName": "scan in",
"direction": "in",
"venueId": 10,
"innerZoneId": 82,
"outerZoneId": 83,
"ticketId": 100,
"ticket": {
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)"
},
"accessType": {
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
},
"feedback": {
"syncId": 999,
"isDeleted": false,
"id": 13,
"name": "Grøn med gult blink",
"label": "green",
"definition": "beep2"
},
"msgType": "DataScanning"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"parentId": {
"type": [
"number",
"null"
]
},
"localId": {
"type": "number",
"description": "The ID of the scanning on the device, to detect double sync"
},
"localParentId": {
"type": [
"number",
"null"
],
"description": "The ID of a parent scanning on the device, if any."
},
"deviceId": {
"type": "number"
},
"deviceLaneId": {
"type": "number"
},
"scannerId": {
"type": [
"number",
"null"
],
"description": "The scanner the device was related to at the time of the scanning."
},
"entranceId": {
"type": [
"number",
"null"
],
"description": "The entrance the device was related to at the time of the scanning."
},
"zoneId": {
"type": [
"number",
"null"
],
"description": "The zone the device scanned \"into\"."
},
"tokenId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was recognized for the event."
},
"accessTypeId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was given access."
},
"usageUnitId": {
"type": [
"number",
"null"
],
"description": "The usage unit this scanning used, if any."
},
"periodId": {
"type": [
"number",
"null"
],
"description": "If the scanned token was given access."
},
"virtualQueueCouponTicketId": {
"type": [
"number",
"null"
],
"description": "If the scanned token used a virtual queue coupon to get access."
},
"virtualQueuePhysicalCouponTicketId": {
"type": [
"number",
"null"
],
"description": "If the scanned token used a coupon ticket for physical queue to get access."
},
"tokenTypeId": {
"type": [
"number",
"null"
],
"description": "For unrecognized tokens: Token type scanned."
},
"tokenValue": {
"type": [
"string",
"null"
],
"description": "For unrecognized tokens: Token value scanned."
},
"eventId": {
"type": [
"number",
"null"
],
"description": "For unrecognized tokens: The event that was active."
},
"when": {
"type": "string"
},
"cancelled": {
"type": [
"string",
"null"
]
},
"cancelledByUserId": {
"type": [
"number",
"null"
]
},
"statusCode": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"OK",
"Unknown token",
"Denied access"
],
"description": "Deprecated, use statusCode instead"
},
"mode": {
"type": "number",
"description": "The selected mode for the lane, usually 1 (scan in) or 2 (scan out)"
},
"usageUnitCount": {
"type": "number",
"description": "The usage unit count this scan takes"
},
"multiplier": {
"type": "number",
"description": "How many scans this scan should be treated as (e.g. if multiple people are scanned in)"
},
"paymentData": {
"type": "string",
"description": "JSON encoded data with info about a relevant payment, if any"
},
"insertTime": {
"type": "string",
"description": "When the server created the scanning."
},
"modeName": {
"type": "string"
},
"direction": {
"type": "string"
},
"venueId": {
"type": "number"
},
"innerZoneId": {
"type": "number"
},
"outerZoneId": {
"type": "number"
},
"ticketId": {
"type": [
"number",
"null"
],
"description": "Is `null` for count-scans and unknown tokens"
},
"ticket": {
"type": [
"object",
"null"
],
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"uuid": {
"type": "string"
},
"eventId": {
"type": "number"
},
"source": {
"type": "string",
"description": "Required if externalId is given."
},
"externalId": {
"type": "string",
"description": "Eg digital_product_id if a ticket from shop.smukfest.dk."
},
"externalGroup": {
"type": "string"
},
"externalData": {
"type": "string",
"description": "JSON is recommended"
},
"isValid": {
"type": "boolean"
},
"validStartTime": {
"type": "string",
"description": "A ticket can only be valid from this time. Null means since the beginning of time"
},
"validEndTime": {
"type": "string",
"description": "A ticket can only be valid until this time. Null means forever."
},
"languageCode": {
"type": "string",
"description": "The preferred language to show when this ticket is used (currently only da, en, and de is available."
},
"profileImageUrl": {
"type": "string",
"description": "URL to a profile image"
},
"name": {
"type": "string",
"description": "Name on the ticket"
},
"productName": {
"type": "string",
"description": "Name of the product that generated the ticket"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"uuid",
"eventId",
"isValid"
],
"description": "Is `null` for count-scans and unknown tokens"
},
"accessType": {
"type": [
"object",
"null"
],
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"eventId": {
"type": "number"
},
"name": {
"type": "string"
},
"feedbackId": {
"type": "number",
"description": "The type of feedback given when access is granted."
},
"priority": {
"type": "number",
"description": "Priority of access types if multiple give access (higher means more important)."
},
"addOnTicketCreation": {
"type": "boolean",
"description": "Should this access type be added to all tickets when they are created?"
},
"requireProfileImage": {
"type": "boolean",
"description": "Does this access type require tickets to have a profile image URL?"
},
"updateZonePopulations": {
"type": "boolean",
"description": "Should the zone populations be updated when access has been granted? Default is true."
},
"ignoreMaxPopulation": {
"type": "boolean",
"description": "Can this access type enter a zone even if its max population has been reached?"
},
"forceDirection": {
"type": "string",
"enum": [
"in",
"out",
"reverse"
],
"description": "Force open turnstiles in this direction, instead of their current direction."
},
"stock": {
"type": "number",
"description": "How many tickets can have this access type? -1 for unlimited."
},
"maxMultiplier": {
"type": "number",
"description": "The max of the multiplier on a scan when this access type is used. 0 for unlimited."
},
"maxUsages": {
"type": "number",
"description": "The number of times the ticket is valid for this access. 0 for no limit. See maxUsagesType."
},
"maxUsagesType": {
"type": "string",
"enum": [
"event",
"period",
"zone",
"day",
"week",
"month"
],
"description": "If maxUsages is set, this value defines the interval for which the limit is enforced."
},
"usageUnitId": {
"type": "number"
},
"waitingPeriod": {
"type": "number",
"description": "Seconds after a successful scanning before a ticket can be scanned again (by the same device)."
},
"allowMultiplePendingScannings": {
"type": "boolean",
"description": "Allow multiple skannings of this access before an entry is registered, e.g. for tour pass that can be used for multiple people."
},
"calendarId": {
"type": "number"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"eventId",
"name",
"feedbackId",
"priority",
"maxMultiplier",
"maxUsages",
"maxUsagesType"
],
"description": "Is `null` for failed scans"
},
"feedback": {
"type": [
"object",
"null"
],
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"label": {
"type": "string",
"description": "Unique identifier for this Feedback"
},
"definition": {
"type": "string"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"name",
"label",
"definition"
],
"description": "Is `null` for failed scans"
},
"msgType": {
"type": "string"
}
},
"required": [
"id",
"parentId",
"localId",
"localParentId",
"deviceId",
"scannerId",
"entranceId",
"zoneId",
"tokenId",
"accessTypeId",
"usageUnitId",
"periodId",
"virtualQueueCouponTicketId",
"virtualQueuePhysicalCouponTicketId",
"tokenTypeId",
"tokenValue",
"eventId",
"when",
"cancelled",
"cancelledByUserId",
"statusCode",
"mode",
"insertTime",
"modeName",
"direction",
"venueId",
"innerZoneId",
"outerZoneId",
"ticketId",
"ticket",
"accessType",
"feedback",
"msgType"
]
}
Message: DeviceEventStatus ¶
Message: DeviceEventStatusGET/RabbitMQ-has-no-such-URL/DeviceEventStatus
Example URI
200
Headers
Content-Type: application/json
Body
{
"deviceId": 70,
"eventId": 30,
"lastSyncId": 12345,
"updated": "2017-08-05T12:30:00+02:00",
"msgType": "DeviceEventStatus",
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"deviceId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"lastSyncId": {
"type": "number"
},
"updated": {
"type": "string"
},
"msgType": {
"type": "string"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"deviceId",
"eventId",
"lastSyncId",
"updated",
"msgType",
"isDeleted"
]
}
Message: DeviceInfo ¶
Message: DeviceInfoGET/RabbitMQ-has-no-such-URL/DeviceInfo
Example URI
200
Headers
Content-Type: application/json
Body
{
"deviceId": 70,
"lastSeenServerTime": "Hello, world!",
"lastSeenDeviceTime": "Hello, world!",
"queueUser": "Hello, world!",
"appVersion": "Hello, world!",
"msgType": "DeviceInfo",
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"deviceId": {
"type": "number"
},
"lastSeenServerTime": {
"type": [
"string",
"null"
]
},
"lastSeenDeviceTime": {
"type": [
"string",
"null"
]
},
"queueUser": {
"type": [
"string",
"null"
]
},
"appVersion": {
"type": [
"string",
"null"
]
},
"msgType": {
"type": "string"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"deviceId",
"lastSeenServerTime",
"lastSeenDeviceTime",
"queueUser",
"appVersion",
"msgType",
"isDeleted"
]
}
Message: DeviceStateChange ¶
Message: DeviceStateChangeGET/RabbitMQ-has-no-such-URL/DeviceStateChange
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": 72,
"deviceId": 70,
"serverTime": "2018-08-05T12:30:00+02:00",
"deviceTime": "2018-08-05T12:30:00+02:00",
"type": "power",
"value": "off",
"msgType": "DeviceStateChange",
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"deviceId": {
"type": "number",
"description": "ID of the device reporting."
},
"serverTime": {
"type": "string",
"description": "The server time when the state change was received."
},
"deviceTime": {
"type": "string",
"description": "The client local time when the state change occurred."
},
"type": {
"type": "string",
"description": "Type of state (power|battery|gps|shutdown)."
},
"value": {
"type": "string",
"description": "The new value."
},
"msgType": {
"type": "string"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"id",
"deviceId",
"serverTime",
"deviceTime",
"type",
"value",
"msgType",
"isDeleted"
]
}
Message: DeviceLaneInfo ¶
Message: DeviceLaneInfoGET/RabbitMQ-has-no-such-URL/DeviceLaneInfo
Example URI
200
Headers
Content-Type: application/json
Body
{
"deviceLaneId": 71,
"lastSeenServerTime": "Hello, world!",
"lastSeenDeviceTime": "Hello, world!",
"msgType": "DeviceLaneInfo",
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"deviceLaneId": {
"type": "number"
},
"lastSeenServerTime": {
"type": [
"string",
"null"
]
},
"lastSeenDeviceTime": {
"type": [
"string",
"null"
]
},
"msgType": {
"type": "string"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"deviceLaneId",
"lastSeenServerTime",
"lastSeenDeviceTime",
"msgType",
"isDeleted"
]
}
Message: OrganizerConfiguration ¶
Message: OrganizerConfigurationGET/RabbitMQ-has-no-such-URL/OrganizerConfiguration
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": 15,
"organizerId": 10,
"timeZone": "Europe/Copenhagen",
"dayStartTime": "00:00:00",
"defaultEventImageUrl": "https://placekitten.com/480/640",
"defaultZoneImageUrl": "https://placekitten.com/300/300",
"backgroundColor": "#FFFFFF",
"foregroundColor": "#000000",
"virtualQueueBackgroundColor": "#FFFFFF",
"virtualQueueForegroundColor": "#000000",
"virtualQueueButtonBackgroundColor": "#000000",
"virtualQueueButtonForegroundColor": "#FFFFFF",
"calloutPrimaryBackgroundColor": "#000000",
"calloutPrimaryForegroundColor": "#FFFFFF",
"calloutSecondaryBackgroundColor": "#000000",
"calloutSecondaryForegroundColor": "#FFFFFF",
"calloutActiveForegroundColor": "#FFFFFF",
"calloutNumberOfNamesPerSlide": 28,
"webAppPin": 1234,
"timeoutAccessAssumed": 5000,
"timeoutAccessNotGranted": 10000,
"timeoutAccessUnused": 6000,
"timeoutScanToEntry": 1500,
"msgType": "OrganizerConfiguration",
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"timeZone": {
"type": "string"
},
"dayStartTime": {
"type": "string",
"description": "Start time of a day period"
},
"defaultEventImageUrl": {
"type": "string",
"description": "URL to a default event image (used if the event does not have an image)"
},
"defaultZoneImageUrl": {
"type": "string",
"description": "URL to a default zone image (used if the zone does not have an image)"
},
"backgroundColor": {
"type": "string",
"description": "Primary background color. Used for the scanner WebApp"
},
"foregroundColor": {
"type": "string",
"description": "Primary foreground color. Used for the scanner WebApp"
},
"virtualQueueBackgroundColor": {
"type": "string",
"description": "Background color used for the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueForegroundColor": {
"type": "string",
"description": "Foreground color used for the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueButtonBackgroundColor": {
"type": "string",
"description": "Background color used for buttons in the virtual queue coupon flow in the scanner WebApp"
},
"virtualQueueButtonForegroundColor": {
"type": "string",
"description": "Foreground color used for buttons in the virtual queue coupon flow in the scanner WebApp"
},
"calloutPrimaryBackgroundColor": {
"type": "string",
"description": "Primary background color used for the callout screen"
},
"calloutPrimaryForegroundColor": {
"type": "string",
"description": "Primary foreground color used for the callout screen"
},
"calloutSecondaryBackgroundColor": {
"type": "string",
"description": "Secondary background color used for the callout screen"
},
"calloutSecondaryForegroundColor": {
"type": "string",
"description": "Secondary foreground color used for the callout screen"
},
"calloutActiveForegroundColor": {
"type": "string",
"description": "Active foreground color used for the callout screen"
},
"calloutNumberOfNamesPerSlide": {
"type": "number",
"description": "The number of names per slide for the callout screen."
},
"webAppPin": {
"type": "number",
"description": "The PIN code that should be used to perform actions in the WebApp"
},
"timeoutAccessAssumed": {
"type": "number",
"description": "How long we should wait before assuming the user has entered a gate that cannot provide feedback (in ms)"
},
"timeoutAccessNotGranted": {
"type": "number",
"description": "How long we should wait when no physical device is used to grant entry (in ms)"
},
"timeoutAccessUnused": {
"type": "number",
"description": "How long we should wait for feedback, from the turnstile, about entry before cancelling the scanning (in ms)"
},
"timeoutScanToEntry": {
"type": "number",
"description": "How long after each scanning we should allow for entry (in ms)"
},
"msgType": {
"type": "string"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"id",
"organizerId",
"timeZone",
"dayStartTime",
"msgType",
"isDeleted"
]
}
Message: ProfanityBlacklist ¶
Message: ProfanityBlacklistGET/RabbitMQ-has-no-such-URL/ProfanityBlacklist
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": 320,
"organizerId": 10,
"name": "Currently inside",
"type": "scanning_feedback",
"data": {
"scannerIds": [
1
],
"showDuration": true,
"showZonePopulation": true,
"zoneId": 1,
"virtualQueueIds": [
1
],
"imageZoneId": 1,
"zoneIds": [
1
],
"eventId": 1
},
"msgType": "ProfanityBlacklist",
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"scanning_feedback",
"virtual_queue_callout",
"zone_population"
]
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scannerIds": {
"type": "array",
"description": "Only for type scanning_feedback"
},
"showDuration": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"showZonePopulation": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"zoneId": {
"type": "number",
"description": "Only for type scanning_feedback"
},
"virtualQueueIds": {
"type": "array",
"description": "Only for type virtual_queue_callout"
},
"imageZoneId": {
"type": "number",
"description": "Only for type virtual_queue_callout"
},
"zoneIds": {
"type": "array",
"description": "Only for type zone_population"
},
"eventId": {
"type": "number",
"description": "Only for type zone_population"
}
},
"description": "Extra configurations specific for the type"
},
"msgType": {
"type": "string"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"data",
"msgType",
"isDeleted"
]
}
Message: Screen ¶
Message: ScreenGET/RabbitMQ-has-no-such-URL/Screen
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": 320,
"organizerId": 10,
"name": "Currently inside",
"type": "scanning_feedback",
"data": {
"scannerIds": [
1
],
"showDuration": true,
"showZonePopulation": true,
"zoneId": 1,
"virtualQueueIds": [
1
],
"imageZoneId": 1,
"zoneIds": [
1
],
"eventId": 1
},
"msgType": "Screen",
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"scanning_feedback",
"virtual_queue_callout",
"zone_population"
]
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scannerIds": {
"type": "array",
"description": "Only for type scanning_feedback"
},
"showDuration": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"showZonePopulation": {
"type": "boolean",
"description": "Only for type scanning_feedback"
},
"zoneId": {
"type": "number",
"description": "Only for type scanning_feedback"
},
"virtualQueueIds": {
"type": "array",
"description": "Only for type virtual_queue_callout"
},
"imageZoneId": {
"type": "number",
"description": "Only for type virtual_queue_callout"
},
"zoneIds": {
"type": "array",
"description": "Only for type zone_population"
},
"eventId": {
"type": "number",
"description": "Only for type zone_population"
}
},
"description": "Extra configurations specific for the type"
},
"msgType": {
"type": "string"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"data",
"msgType",
"isDeleted"
]
}
Message: VirtualQueueStatusMessage ¶
Message: VirtualQueueStatusMessageGET/RabbitMQ-has-no-such-URL/VirtualQueueStatusMessage
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": 300,
"organizerId": 10,
"name": "Bad weather",
"type": "closed",
"message": [
"Hello, world!"
],
"msgType": "VirtualQueueStatusMessage",
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"organizerId": {
"type": "number"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"closed",
"paused"
]
},
"message": {
"type": "array",
"description": "Indexed by language code"
},
"msgType": {
"type": "string"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"id",
"organizerId",
"name",
"type",
"message",
"msgType",
"isDeleted"
]
}
Message: LockerController ¶
Message: LockerControllerGET/RabbitMQ-has-no-such-URL/LockerController
Example URI
200
Headers
Content-Type: application/json
Body
{
"msgType": "LockerController",
"id": 130,
"scannerId": 60,
"name": "Kerong-CU48",
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"id": {
"type": "number"
},
"scannerId": {
"type": "number"
},
"name": {
"type": "string"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"msgType",
"id",
"scannerId",
"name",
"isDeleted"
]
}
Message: LockerControllerDevice ¶
Message: LockerControllerDeviceGET/RabbitMQ-has-no-such-URL/LockerControllerDevice
Example URI
200
Headers
Content-Type: application/json
Body
{
"msgType": "LockerControllerDevice",
"id": 140,
"lockerControllerId": 130,
"name": "CU48-0",
"numberOfChannels": 48,
"channelOffset": 1,
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"id": {
"type": "number"
},
"lockerControllerId": {
"type": "number"
},
"name": {
"type": "string"
},
"numberOfChannels": {
"type": "number"
},
"channelOffset": {
"type": "number"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"msgType",
"id",
"lockerControllerId",
"name",
"numberOfChannels",
"channelOffset",
"isDeleted"
]
}
Message: LockerControllerDeviceChannel ¶
Message: LockerControllerDeviceChannelGET/RabbitMQ-has-no-such-URL/LockerControllerDeviceChannel
Example URI
200
Headers
Content-Type: application/json
Body
{
"msgType": "LockerControllerDeviceChannel",
"id": 150,
"lockerControllerDeviceId": 140,
"channel": 1,
"isOpen": false,
"isDeleted": false
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"msgType": {
"type": "string"
},
"id": {
"type": "number"
},
"lockerControllerDeviceId": {
"type": "number"
},
"channel": {
"type": "number"
},
"isOpen": {
"type": "boolean"
},
"isDeleted": {
"type": "boolean"
}
},
"required": [
"msgType",
"id",
"lockerControllerDeviceId",
"channel",
"isOpen",
"isDeleted"
]
}
Message: LockerControllerDeviceChannelUpdatePublish ¶
Message: LockerControllerDeviceChannelUpdatePublishGET/RabbitMQ-has-no-such-URL/LockerControllerDeviceChannelUpdatePublish
Example URI
200
Headers
Content-Type: application/json
Body
{
"deviceId": 70,
"lockerDeviceName": "CU48-0",
"channel": 1,
"isOpen": false,
"changedTime": "2018-08-05T12:30:00+02:00"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"deviceId": {
"type": "number",
"description": "ID of the device running the locker code."
},
"lockerDeviceName": {
"type": "string",
"description": "Name of the locker device"
},
"channel": {
"type": "number",
"description": "The number of the channel that changed"
},
"isOpen": {
"type": "boolean"
},
"changedTime": {
"type": "string",
"description": "The time when the status changed"
}
},
"required": [
"deviceId",
"lockerDeviceName",
"channel",
"isOpen",
"changedTime"
]
}
DAZA ¶
DAZA Parks ¶
Get DAZA ParksGET/daza/parks{?userId}
Get a list of DAZA parks. If userId is provided only the users single park is returned.
Example URI
- userId
number
(optional) Example: 1
200
Headers
Content-Type: application/json
Body
[
{
"label": "aalborgzoo",
"name": "Aalborg Zoo",
"identifier": 500,
"zoneId": 40,
"ownAccessTypeId": 90,
"publicAccessTypeId": 91,
"contactEmail": "dev_shop@venuemanager.net",
"notifyOnError": true
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
Ticket Import ¶
Ticket ImportPOST/daza/tickets
The following section describes the API endpoint for ticket import. It is both possible to import a single or multiple tickets in the same request. Each successfully imported ticket will appear in the imported
property in the response body.
If a ticket fails, the response body would contain an error
property, where each ticket (keyed by its barcode) will contain the error message.
The possible error messages:
-
Empty fields
-
Incorrect externalId for park! Expected id is: XX
-
Barcode type is not recognized!
-
Duplicate period found!
-
Period is invalid!
-
Period has expired!
-
New period not created - existing period has been modified with the new end date!
Example URI
Headers
Content-Type: application/json
Body
[
{
"externalId": 501,
"isValid": true,
"name": "Hans Daza Jensen",
"barcodeType": "Code 93",
"barcode": "AALZOO002",
"validStartTime": "2023-06-01T00:00:00+01:00",
"validEndTime": "2024-06-01T00:00:00+01:00"
}
]
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array"
}
200
Headers
Content-Type: application/json
Body
{
"importRequestId": 321,
"imported": [
{
"syncId": 999,
"isDeleted": false,
"id": 100,
"uuid": "735e3699-c75a-11eb-a0a9-0242c0a83002",
"eventId": 30,
"source": "shop.smukfest.dk",
"externalId": "12345",
"externalGroup": "VIP Tickets",
"externalData": "{\"navAccount\": 1234}",
"isValid": true,
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"languageCode": "da",
"profileImageUrl": "https://placekitten.com/480/640",
"name": "Malcolm Reynolds",
"productName": "Kids (3-16)",
"currentZoneId": 40,
"accessTypes": [
{
"syncId": 999,
"isDeleted": false,
"id": 90,
"eventId": 30,
"name": "Partout, sponsor",
"feedbackId": 2,
"priority": 50,
"addOnTicketCreation": false,
"requireProfileImage": false,
"updateZonePopulations": true,
"ignoreMaxPopulation": false,
"forceDirection": "in",
"stock": -1,
"maxMultiplier": 1,
"maxUsages": 3,
"maxUsagesType": "event",
"usageUnitId": 170,
"waitingPeriod": 10,
"allowMultiplePendingScannings": false,
"calendarId": 210
}
],
"tokens": [
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"importRequestId": {
"type": "number"
},
"imported": {
"type": "array"
}
},
"required": [
"importRequestId"
]
}
Ticket Scanning ¶
Ticket ScanningPOST/daza/scan/{barcode}
Ticket scanning supports beside the actual scanning also checking the ticket, which would just validate the ticket.
The possible statusCode for the scanning:
-
500: Ticket is valid
-
510: The scanning has failed. Please try again.
-
511: Ticket not found.
-
512: No active tickets found.
-
513: Ticket is not active.
-
514: Ticket has expired.
-
514: Ticket has already been scanned.
Example URI
- barcode
string
(required) Example: AALZOO002
Headers
Content-Type: application/json
Body
{
"barcode": "",
"parkId": 123,
"eventId": 123,
"checkOnly": true
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"barcode": {
"type": "string"
},
"parkId": {
"type": "number"
},
"eventId": {
"type": "number"
},
"checkOnly": {
"type": "boolean"
}
},
"required": [
"barcode",
"parkId",
"eventId"
]
}
200
Headers
Content-Type: application/json
Body
{
"statusCode": 500,
"scanLog": [
{
"id": 111,
"parentId": 112,
"localId": 123,
"localParentId": 124,
"deviceId": 70,
"deviceLaneId": 70,
"scannerId": 60,
"entranceId": 50,
"zoneId": 40,
"tokenId": 120,
"accessTypeId": 90,
"usageUnitId": 170,
"periodId": 80,
"virtualQueueCouponTicketId": 270,
"virtualQueuePhysicalCouponTicketId": 275,
"tokenTypeId": 1,
"tokenValue": "Hello, world!",
"eventId": 30,
"when": "2018-08-05T12:30:00+02:00",
"cancelled": "2018-08-05T14:00:00+02:00",
"cancelledByUserId": 10,
"statusCode": 1,
"status": "OK",
"mode": 1,
"usageUnitCount": 1,
"multiplier": 1,
"paymentData": "Hello, world!",
"insertTime": "2018-08-05T12:30:00+02:00"
}
],
"token": {
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
},
"tokenList": [
{
"syncId": 999,
"isDeleted": false,
"id": 120,
"tokenTypeId": 110,
"ticketId": 100,
"externalId": "12345",
"externalType": "Voksen",
"value": "04E56FFAE65380",
"class": "normal",
"status": "known",
"validStartTime": "2018-08-08T12:00:00+02:00",
"validEndTime": "2018-08-10T04:00:00+02:00",
"blockAfterUseCount": 1
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"statusCode": {
"type": "number"
},
"scanLog": {
"type": "array"
},
"token": {
"type": "object",
"properties": {
"syncId": {
"type": [
"number",
"null"
],
"description": "Unique id issued by server. Must match for updates and deletes. Must be NULL to overwrite. Ignored for inserts."
},
"isDeleted": {
"type": [
"boolean",
"null"
],
"description": "Read only property. Used to sync DELETE operations."
},
"id": {
"type": "number"
},
"tokenTypeId": {
"type": "number"
},
"ticketId": {
"type": "number"
},
"externalId": {
"type": "string",
"description": "Eg card_number_id for a season card from VM shop."
},
"externalType": {
"type": "string"
},
"value": {
"type": "string"
},
"class": {
"type": "string",
"enum": [
"normal",
"issue"
]
},
"status": {
"type": "string",
"enum": [
"known",
"active",
"blocked"
]
},
"validStartTime": {
"type": "string",
"description": "The token is valid from this time. Null means since the beginning of time."
},
"validEndTime": {
"type": "string",
"description": "The token is valid until this time. Null means forever."
},
"blockAfterUseCount": {
"type": "number",
"description": "Change status to blocked after the token has been granted access this many times. 0 to never automatically block token"
}
},
"required": [
"syncId",
"isDeleted",
"id",
"tokenTypeId",
"ticketId",
"value",
"class",
"status",
"blockAfterUseCount"
]
},
"tokenList": {
"type": "array"
}
},
"required": [
"statusCode",
"scanLog",
"token",
"tokenList"
]
}