Back to top

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 by POST /users/token with Basic 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 match

    The ID in the URL does not match the ID of the object in the request body.

  • 1002: Missing property

    A required property is not specified, either as GET parameters or on the object in the request body.

  • 1003: Value is empty

    A value cannot be set as empty.

  • 1004: Invalid value

    A value is invalid, either because it must be one of a set of values, or the format is invalid.

  • 1005: State mismatch

    The status/state property cannot change from its current value to the specified value.

  • 1006: Name already used

    The specified name is already used by another entity.

  • 1007: Name contains invalid terms

    The specified name contains at least one term from the profanity blacklist.

  • 1008: Access type stock error

    Cannot add an access type because of its stock

  • 1009: Virtual queue is closed

    Cannot perform the wanted while virtual queue is closed.

  • 1010: Virtual queue is closing

    Cannot perform the wanted while virtual queue is closing.

  • 1011: To many tickets in coupon

    A coupon cannot be created with more tickets than allowed.

  • 1012: Not enough room for show

    The queue does not have enough room available for the selected show.

  • 1013: Ticket already has an active coupon

    The ticket is in an active coupon for a queue of the same type (calendar or flow/max-population)

  • 1014: Ticket is not valid

    The 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 type

    The value of the token is not valid according to its token type validation restrictions

  • 1016: The allowed cancellation time for this scanning has expired

    The 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 daemon
GET/daemon/ping{?style,waitDelay}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/daemon/ping?style=&waitDelay=3
URI Parameters
HideShow
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: 3

How many seconds should we wait for a response?

Response  200
HideShow
Body
0.041
Response  200
HideShow
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"
  ]
}
Response  500
HideShow
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 devices
GET/devices{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices?allowDeleted=1
URI Parameters
HideShow
allowDeleted
boolean (optional) Example: 1

Find the devices, even if they are deleted

Response  200
HideShow
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 device
POST/devices

Will automatically create a device lane as well.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/devices
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 info
GET/devices/info

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/info
Response  200
HideShow
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 devices
GET/devices/search{?organizerId,organizerLabel,search,offset,limit}

Search for devices for pagination.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/search?organizerId=10&organizerLabel=smukfest&search=central*&offset=0&limit=100
URI Parameters
HideShow
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: 10

Only find devices for this organizer. If set to 0 it will find all devices without any organizer

organizerLabel
string (optional) Example: smukfest

Same as organizerId, just the label of the organizer instead of the ID

offset
number (optional) Example: 0
limit
number (optional) Example: 100
Response  200
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/devices/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Device

Get device
GET/devices/{deviceId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/70
URI Parameters
HideShow
deviceId
number (required) Example: 70
Response  200
HideShow
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 device
PUT/devices/{deviceId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/devices/70
URI Parameters
HideShow
deviceId
number (required) Example: 70
Request
HideShow
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"
  ]
}
Response  204

Delete device
DELETE/devices/{deviceId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/devices/70
URI Parameters
HideShow
deviceId
number (required) Example: 70
Response  204

Device lanes

List all device lanes
GET/devices/lanes

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/lanes
Response  200
HideShow
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 lanes
POST/devices/lanes

Example URI

POST https://beautifulbjarne.venuemanager.net/api/devices/lanes
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 lane
GET/devices/{deviceId}/lanes/{deviceLaneId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/70/lanes/70
URI Parameters
HideShow
deviceId
number (required) Example: 70
deviceLaneId
number (required) Example: 70
Response  200
HideShow
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 lane
PUT/devices/{deviceId}/lanes/{deviceLaneId}

The IDs in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/devices/70/lanes/70
URI Parameters
HideShow
deviceId
number (required) Example: 70
deviceLaneId
number (required) Example: 70
Request
HideShow
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"
  ]
}
Response  204

Delete device lane
DELETE/devices/{deviceId}/lanes/{deviceLaneId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/devices/70/lanes/70
URI Parameters
HideShow
deviceId
number (required) Example: 70
deviceLaneId
number (required) Example: 70
Response  204

Device lanes - directly

List all device lanes
GET/deviceLanes{?deviceId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/deviceLanes?deviceId=70
URI Parameters
HideShow
deviceId
number (required) Example: 70
Response  200
HideShow
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 lanes
POST/deviceLanes{?deviceId}

Example URI

POST https://beautifulbjarne.venuemanager.net/api/deviceLanes?deviceId=70
URI Parameters
HideShow
deviceId
number (required) Example: 70
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 lane
GET/deviceLanes/{deviceLaneId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/deviceLanes/70
URI Parameters
HideShow
deviceLaneId
number (required) Example: 70
Response  200
HideShow
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 lane
PUT/deviceLanes/{deviceLaneId}

The IDs in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/deviceLanes/70
URI Parameters
HideShow
deviceLaneId
number (required) Example: 70
Request
HideShow
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"
  ]
}
Response  204

Delete device lane
DELETE/deviceLanes/{deviceLaneId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/deviceLanes/70
URI Parameters
HideShow
deviceLaneId
number (required) Example: 70
Response  204

Device organizers

List all organizers for the device
GET/devices/{deviceId}/organizers

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/70/organizers
URI Parameters
HideShow
deviceId
number (required) Example: 70
Response  200
HideShow
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 organizer
POST/devices/{deviceId}/organizers/{organizerId}

Example URI

POST https://beautifulbjarne.venuemanager.net/api/devices/70/organizers/10
URI Parameters
HideShow
deviceId
number (required) Example: 70
organizerId
number (required) Example: 10
Response  204

Remove device from organizer
DELETE/devices/{deviceId}/organizers/{organizerId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/devices/70/organizers/10
URI Parameters
HideShow
deviceId
number (required) Example: 70
organizerId
number (required) Example: 10
Response  204

Device state changes

Get device state changes
GET/devices/{deviceId}/stateChanges{?from,to,types,search,offset,limit}

Find all state changes for a device.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/70/stateChanges?from=2019-01-01T05:00:00+02:00&to=2019-01-01T05:00:00+02:00&types=&search=&offset=0&limit=100
URI Parameters
HideShow
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
Response  200
HideShow
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 change
GET/devices/{deviceId}/stateChanges/{type}

Find the latest state change for the device of the specified type.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/70/stateChanges/power
URI Parameters
HideShow
deviceId
number (required) Example: 70
type
string (required) Example: power

Type of state (power|battery|gps|shutdown).

Response  200
HideShow
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 info
GET/devices/{deviceId}/info

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/70/info
URI Parameters
HideShow
deviceId
number (required) Example: 70
Response  200
HideShow
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 info
PUT/devices/{deviceId}/info

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/devices/70/info
URI Parameters
HideShow
deviceId
number (required) Example: 70
Request
HideShow
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"
    }
  }
}
Response  204

Device organizer configurations

Configurations for the device, specific for the current organizer.

Get device organizer configurations
GET/devices/{deviceId}/organizerConfigurations

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/70/organizerConfigurations
URI Parameters
HideShow
deviceId
number (required) Example: 70
Response  200
HideShow
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 configurations
PUT/devices/{deviceId}/organizerConfigurations

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/devices/70/organizerConfigurations
URI Parameters
HideShow
deviceId
number (required) Example: 70
Request
HideShow
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"
  ]
}
Response  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 feedbacks
GET/feedbacks{?name}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/feedbacks?name=
URI Parameters
HideShow
name
string (optional) 
Response  200
HideShow
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 feedback
POST/feedbacks

Example URI

POST https://beautifulbjarne.venuemanager.net/api/feedbacks
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/feedbacks/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Feedback

Get feedback
GET/feedbacks/{feedbackId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/feedbacks/70
URI Parameters
HideShow
feedbackId
number (required) Example: 70
Response  200
HideShow
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 feedback
PUT/feedbacks/{feedbackId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/feedbacks/70
URI Parameters
HideShow
feedbackId
number (required) Example: 70
Request
HideShow
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"
  ]
}
Response  204

Delete feedback
DELETE/feedbacks/{feedbackId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/feedbacks/70
URI Parameters
HideShow
feedbackId
number (required) Example: 70
Response  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 types
GET/tokenTypes{?name}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tokenTypes?name=
URI Parameters
HideShow
name
string (optional) 
Response  200
HideShow
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 type
POST/tokenTypes

Example URI

POST https://beautifulbjarne.venuemanager.net/api/tokenTypes
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/tokenTypes/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Token type

Get token type
GET/tokenTypes/{tokenTypeId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tokenTypes/110
URI Parameters
HideShow
tokenTypeId
number (required) Example: 110
Response  200
HideShow
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 type
PUT/tokenTypes/{tokenTypeId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/tokenTypes/110
URI Parameters
HideShow
tokenTypeId
number (required) Example: 110
Request
HideShow
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"
  ]
}
Response  204

Delete token type
DELETE/tokenTypes/{tokenTypeId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/tokenTypes/110
URI Parameters
HideShow
tokenTypeId
number (required) Example: 110
Response  204

Organizers

Organizers

List all organizers
GET/organizers

Example URI

GET https://beautifulbjarne.venuemanager.net/api/organizers
Response  200
HideShow
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 organizer
POST/organizers

Example URI

POST https://beautifulbjarne.venuemanager.net/api/organizers
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 organizer
GET/organizers/{organizerId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/organizers/10
URI Parameters
HideShow
organizerId
number (required) Example: 10
Response  200
HideShow
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 organizer
PUT/organizers/{organizerId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/organizers/10
URI Parameters
HideShow
organizerId
number (required) Example: 10
Request
HideShow
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"
  ]
}
Response  204

Delete organizer
DELETE/organizers/{organizerId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/organizers/10
URI Parameters
HideShow
organizerId
number (required) Example: 10
Response  204

Organizer configurations

Organizer-specific configurations for the Access system.

Get organizer configurations
GET/organizers/{organizerId}/configurations

Example URI

GET https://beautifulbjarne.venuemanager.net/api/organizers/10/configurations
URI Parameters
HideShow
organizerId
number (required) Example: 10
Response  200
HideShow
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 configurations
PUT/organizers/{organizerId}/configurations

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/organizers/10/configurations
URI Parameters
HideShow
organizerId
number (required) Example: 10
Request
HideShow
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"
  ]
}
Response  204

Configurations for current organizer

See Organizer configurations

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

GET https://beautifulbjarne.venuemanager.net/api/organizers/configurations
Response  200
HideShow
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 organizer
PUT/organizers/configurations

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/organizers/configurations
Request
HideShow
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"
  ]
}
Response  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 properties
GET/organizers/{organizerId}/properties

Array of values indexed by property labels.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/organizers/10/properties
URI Parameters
HideShow
organizerId
number (required) Example: 10
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/organizers/properties
Response  200
HideShow
Headers
Content-Type: application/json
Body
{}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {}
}

Set organizer properties
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/organizers/10/properties
URI Parameters
HideShow
organizerId
number (required) Example: 10
Request
HideShow
Headers
Content-Type: application/json
Body
{}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {}
}
Response  204

Users

Management of the users that can call the API.

Users

List all users
GET/users{?allowInactive}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users?allowInactive=1
URI Parameters
HideShow
allowInactive
boolean (optional) Example: 1

Find the users, even if they are deactivated

Response  200
HideShow
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 user
POST/users

Example URI

POST https://beautifulbjarne.venuemanager.net/api/users
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 user
GET/users/{userId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users/20
URI Parameters
HideShow
userId
number (required) Example: 20
Response  200
HideShow
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 user
PUT/users/{userId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/users/20
URI Parameters
HideShow
userId
number (required) Example: 20
Request
HideShow
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"
  ]
}
Response  204

Delete user
DELETE/users/{userId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/users/20
URI Parameters
HideShow
userId
number (required) Example: 20
Response  204

Current user

Get current user
GET/users/current

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users/current
Response  200
HideShow
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 user
GET/users/token

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users/token
Response  200
HideShow
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 token
POST/users/token

Issue a token that can be used with Bearer instead of Basic for all authorizations.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/users/token
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "description": "VM Shop"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "description": {
      "type": "string"
    }
  }
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
"abcd.efg.hijk"

User token

Get a user token
GET/users/token/{userTokenId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users/token/25
URI Parameters
HideShow
userTokenId
number (required) Example: 25
Response  200
HideShow
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 token
DELETE/users/token/{userTokenId}

Revoke a user token, preventing all future requests with it.

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/users/token/25
URI Parameters
HideShow
userTokenId
number (required) Example: 25
Response  204

User organizers

List all organizers for a user
GET/users/{userId}/organizers

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users/20/organizers
URI Parameters
HideShow
userId
number (required) Example: 20
Response  200
HideShow
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 user
PUT/users/{userId}/organizers/{organizerId}

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/users/20/organizers/10
URI Parameters
HideShow
userId
number (required) Example: 20
organizerId
number (required) Example: 10
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "asOwner": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "asOwner": {
      "type": "boolean"
    }
  }
}
Response  204

Remove organizer from user
DELETE/users/{userId}/organizers/{organizerId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/users/20/organizers/10
URI Parameters
HideShow
userId
number (required) Example: 20
organizerId
number (required) Example: 10
Response  204

User roles

Get list of roles for user
GET/users/{userId}/roles

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users/20/roles
URI Parameters
HideShow
userId
number (required) Example: 20
Response  200
HideShow
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 user
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/users/20/roles
URI Parameters
HideShow
userId
number (required) Example: 20
Request
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}
Response  204

User role

Give role to user
POST/users/{userId}/roles/{roleId}{?organizerId}

Example URI

POST https://beautifulbjarne.venuemanager.net/api/users/20/roles/1?organizerId=10
URI Parameters
HideShow
userId
number (required) Example: 20
roleId
number (required) Example: 1
organizerId
number (optional) Example: 10
Response  204

Take role from user
DELETE/users/{userId}/roles/{roleId}{?organizerId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/users/20/roles/1?organizerId=10
URI Parameters
HideShow
userId
number (required) Example: 20
roleId
number (required) Example: 1
organizerId
number (optional) Example: 10
Response  204

Entity Type Users

Get users restricted to an entity type
GET/users/entityTypes/{entityType}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users/entityTypes/zone
URI Parameters
HideShow
entityType
string (required) Example: zone
Response  200
HideShow
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 entity
GET/users/entityTypes/{entityType}/{entityId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users/entityTypes/zone/0
URI Parameters
HideShow
entityType
string (required) Example: zone
entityId
number (required) Example: 0
Response  200
HideShow
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 to
GET/users/{userId}/entityTypes{?organizerId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users/20/entityTypes?organizerId=10
URI Parameters
HideShow
userId
number (required) Example: 20
organizerId
number (optional) Example: 10
Response  200
HideShow
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 to
PUT/users/{userId}/entityTypes{?organizerId}

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/users/20/entityTypes?organizerId=10
URI Parameters
HideShow
userId
number (required) Example: 20
organizerId
number (optional) Example: 10
Request
HideShow
Headers
Content-Type: application/json
Body
[
  "Hello, world!"
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}
Response  204

User Entity Element

Add user entity element
POST/users/{userId}/entityElement/{entityType}/{entityId}

Add access to an entity for a user with restricted access to the entity type.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/users/20/entityElement/zone/1
URI Parameters
HideShow
userId
number (required) Example: 20
entityType
string (required) Example: zone
entityId
number (required) Example: 1
Response  204

Remove user entity element
DELETE/users/{userId}/entityElement/{entityType}/{entityId}

Remove access to an entity from a user with restricted access to the entity type.

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/users/20/entityElement/zone/1
URI Parameters
HideShow
userId
number (required) Example: 20
entityType
string (required) Example: zone
entityId
number (required) Example: 1
Response  204

User access types

Get acccess types for user
GET/users/{userId}/accessTypes

Get list of access types this user is allowed to grant.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/users/20/accessTypes
URI Parameters
HideShow
userId
number (required) Example: 20
Response  200
HideShow
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 user
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/users/20/accessTypes
URI Parameters
HideShow
userId
number (required) Example: 20
Request
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}
Response  204

User access type

Remove access type from user
DELETE/users/{userId}/accessTypes/{accessTypeId}

Remove a single access type from the user.

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/users/20/accessTypes/90
URI Parameters
HideShow
userId
number (required) Example: 20
accessTypeId
number (required) Example: 90
Response  204

Add access type to user
POST/users/{userId}/accessTypes/{accessTypeId}

Add a single access type to the user.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/users/20/accessTypes/90
URI Parameters
HideShow
userId
number (required) Example: 20
accessTypeId
number (required) Example: 90
Response  204

Roles

Get all available roles
GET/roles

Example URI

GET https://beautifulbjarne.venuemanager.net/api/roles
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  {
    "id": 1,
    "name": "ROLE_ADMIN"
  }
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Role

Get role
GET/roles/{roleId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/roles/1
URI Parameters
HideShow
roleId
number (required) Example: 1
Response  200
HideShow
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 types
GET/dayTypes{?isActive}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/dayTypes?isActive=true
URI Parameters
HideShow
isActive
boolean (optional) Example: true
Response  200
HideShow
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 type
POST/dayTypes

Example URI

POST https://beautifulbjarne.venuemanager.net/api/dayTypes
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/dayTypes/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Day Type

Get day type
GET/dayTypes/{dayTypeId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/dayTypes/210
URI Parameters
HideShow
dayTypeId
number (required) Example: 210
Response  200
HideShow
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 type
PUT/dayTypes/{dayTypeId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/dayTypes/210
URI Parameters
HideShow
dayTypeId
number (required) Example: 210
Request
HideShow
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"
  ]
}
Response  204

Delete day type
DELETE/dayTypes/{dayTypeId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/dayTypes/210
URI Parameters
HideShow
dayTypeId
number (required) Example: 210
Response  204

Day Type Periods

List all day type periods
GET/dayTypes/{dayTypeId}/periods

Use 0 as dayTypeId to get periods for all day types.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/dayTypes/210/periods
URI Parameters
HideShow
dayTypeId
number (required) Example: 210
Response  200
HideShow
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 period
POST/dayTypes/{dayTypeId}/periods

Example URI

POST https://beautifulbjarne.venuemanager.net/api/dayTypes/210/periods
URI Parameters
HideShow
dayTypeId
number (required) Example: 210
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 period
GET/dayTypes/{dayTypeId}/periods/{dayTypePeriodId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/dayTypes/210/periods/215
URI Parameters
HideShow
dayTypeId
number (required) Example: 210
dayTypePeriodId
number (required) Example: 215
Response  200
HideShow
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 period
PUT/dayTypes/{dayTypeId}/periods/{dayTypePeriodId}

The IDs in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/dayTypes/210/periods/215
URI Parameters
HideShow
dayTypeId
number (required) Example: 210
dayTypePeriodId
number (required) Example: 215
Request
HideShow
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"
  ]
}
Response  204

Delete day type period
DELETE/dayTypes/{dayTypeId}/periods/{dayTypePeriodId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/dayTypes/210/periods/215
URI Parameters
HideShow
dayTypeId
number (required) Example: 210
dayTypePeriodId
number (required) Example: 215
Response  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 units
GET/usageUnits{?label,name,code}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/usageUnits?label=&name=&code=
URI Parameters
HideShow
label
string (optional) 
name
string (optional) 
code
string (optional) 
Response  200
HideShow
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 unit
POST/usageUnits

Example URI

POST https://beautifulbjarne.venuemanager.net/api/usageUnits
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/usageUnits/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Usage Unit

Get usage unit
GET/usageUnits/{usageUnitId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/usageUnits/170
URI Parameters
HideShow
usageUnitId
number (required) Example: 170
Response  200
HideShow
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 unit
PUT/usageUnits/{usageUnitId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/usageUnits/170
URI Parameters
HideShow
usageUnitId
number (required) Example: 170
Request
HideShow
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"
  ]
}
Response  204

Delete usage unit
DELETE/usageUnits/{usageUnitId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/usageUnits/170
URI Parameters
HideShow
usageUnitId
number (required) Example: 170
Response  204

Usage Unit Conversion Rates

Get usage unit conversion rates
GET/usageUnits/conversionRates

An multidimensional array of rates indexed by from and to usage unit IDs.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/usageUnits/conversionRates
Response  200
HideShow
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 rates
PUT/usageUnits/conversionRates

An multidimensional array of rates indexed by from and to usage unit IDs.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/usageUnits/conversionRates
Request
HideShow
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>"
  ]
}
Response  204

Usage unit status

Get usage units with their status
GET/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

GET https://beautifulbjarne.venuemanager.net/api/usageUnits/status?eventId=30&zoneId=40&from=2019-01-01T05:00:00+02:00&to=2019-01-01T05:00:00+02:00
URI Parameters
HideShow
eventId
number (optional) Example: 30
zoneId
number (optional) Example: 40
from
string (optional) Example: 2019-01-01T05:00:00+02:00

The time will be locked to the day start time of the Organizer

to
string (optional) Example: 2019-01-01T05:00:00+02:00

The time will be locked to the day start time of the Organizer - 1 second

Response  200
HideShow
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 hour
GET/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

GET https://beautifulbjarne.venuemanager.net/api/usageUnits/hourStatus?eventId=30&zoneId=40&from=2019-01-01T05:00:00+02:00&to=2019-01-01T05:00:00+02:00
URI Parameters
HideShow
eventId
number (optional) Example: 30
zoneId
number (optional) Example: 40
from
string (required) Example: 2019-01-01T05:00:00+02:00

The time will be locked to the day start time of the Organizer

to
string (required) Example: 2019-01-01T05:00:00+02:00

The time will be locked to the day start time of the Organizer - 1 second

Response  200
HideShow
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 zones
GET/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

GET https://beautifulbjarne.venuemanager.net/api/reports/usageUnitsForZones?eventId=30&usageUnitId=170&groupBy=&from=2019-01-01T05:00:00+02:00&to=2019-01-01T05:00:00+02:00
URI Parameters
HideShow
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
Response  200
HideShow
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 venues
GET/venues

Example URI

GET https://beautifulbjarne.venuemanager.net/api/venues
Response  200
HideShow
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 venue
POST/venues

Example URI

POST https://beautifulbjarne.venuemanager.net/api/venues
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 venue
GET/venues/{venueId}{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/venues/10?allowDeleted=1
URI Parameters
HideShow
venueId
number (required) Example: 10
allowDeleted
boolean (optional) Example: 1

Find the venue, even if it is deleted

Response  200
HideShow
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 venue
PUT/venues/{venueId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/venues/10
URI Parameters
HideShow
venueId
number (required) Example: 10
Request
HideShow
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"
  ]
}
Response  204

Delete venue
DELETE/venues/{venueId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/venues/10
URI Parameters
HideShow
venueId
number (required) Example: 10
Response  204

Get venue with its status
GET/venues/{venueId}/status

Example URI

GET https://beautifulbjarne.venuemanager.net/api/venues/10/status
URI Parameters
HideShow
venueId
number (required) Example: 10
Response  200
HideShow
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 entries
GET/venues/{venueId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/venues/10/log
URI Parameters
HideShow
venueId
number (required) Example: 10
Response  200
HideShow
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 zones
GET/zones{?venueId,usageUnitCode,allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones?venueId=10&usageUnitCode=DKK&allowDeleted=1
URI Parameters
HideShow
venueId
number (optional) Example: 10
usageUnitCode
string (optional) Example: DKK

Only zones with a cost in this usage unit

allowDeleted
boolean (optional) Example: 1

Find the zones, even if they are deleted

Response  200
HideShow
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 zone
POST/zones

Example URI

POST https://beautifulbjarne.venuemanager.net/api/zones
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 entrances
GET/zones/withEntrances{?venueId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/withEntrances?venueId=10
URI Parameters
HideShow
venueId
number (required) Example: 10
Response  200
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/zones/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Zone

Get zone
GET/zones/{zoneId}{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40?allowDeleted=1
URI Parameters
HideShow
zoneId
number (required) Example: 40
allowDeleted
boolean (optional) Example: 1

Find the zone, even if it is deleted

Response  200
HideShow
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 zone
PUT/zones/{zoneId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/zones/40
URI Parameters
HideShow
zoneId
number (required) Example: 40
Request
HideShow
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"
  ]
}
Response  204

Delete zone
DELETE/zones/{zoneId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/zones/40
URI Parameters
HideShow
zoneId
number (required) Example: 40
Response  204

Zone log entries
GET/zones/{zoneId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40/log
URI Parameters
HideShow
zoneId
number (required) Example: 40
Response  200
HideShow
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 status
GET/zones/{zoneId}/status{?eventId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40/status?eventId=30
URI Parameters
HideShow
zoneId
number (required) Example: 40
eventId
number (required) Example: 30
Response  200
HideShow
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 zone
GET/zones/{zoneId}/accessTypes{?eventId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40/accessTypes?eventId=30
URI Parameters
HideShow
zoneId
number (required) Example: 40
eventId
number (optional) Example: 30
Response  200
HideShow
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 zone
GET/zones/{zoneId}/entrances

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40/entrances
URI Parameters
HideShow
zoneId
number (required) Example: 40
Response  200
HideShow
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 zone
GET/zones/{zoneId}/zoneCosts

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40/zoneCosts
URI Parameters
HideShow
zoneId
number (required) Example: 40
Response  200
HideShow
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 zone
POST/zones/{zoneId}/zoneCosts

Example URI

POST https://beautifulbjarne.venuemanager.net/api/zones/40/zoneCosts
URI Parameters
HideShow
zoneId
number (required) Example: 40
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 cost
GET/zones/{zoneId}/zoneCosts/{zoneCostId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40/zoneCosts/45
URI Parameters
HideShow
zoneId
number (required) Example: 40
zoneCostId
number (required) Example: 45
Response  200
HideShow
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 cost
PUT/zones/{zoneId}/zoneCosts/{zoneCostId}

The IDs in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/zones/40/zoneCosts/45
URI Parameters
HideShow
zoneId
number (required) Example: 40
zoneCostId
number (required) Example: 45
Request
HideShow
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"
  ]
}
Response  204

Delete zone cost
DELETE/zones/{zoneId}/zoneCosts/{zoneCostId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/zones/40/zoneCosts/45
URI Parameters
HideShow
zoneId
number (required) Example: 40
zoneCostId
number (required) Example: 45
Response  204

Zone Populations

Get Zone Population
GET/zones/{zoneId}/population{?eventId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40/population?eventId=30
URI Parameters
HideShow
zoneId
number (required) Example: 40
eventId
number (required) Example: 30

If not specified then the current event is used

Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/zones/22496567-bd39-11eb-9e95-0242c0a83002/population?eventUuid=8e305cde-c75a-11eb-a0a9-0242c0a83002
URI Parameters
HideShow
zoneUuid
string (required) Example: 22496567-bd39-11eb-9e95-0242c0a83002
eventUuid
string (required) Example: 8e305cde-c75a-11eb-a0a9-0242c0a83002
Response  200
HideShow
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 Population
PUT/zones/{zoneId}/population{?eventId}

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/zones/40/population?eventId=30
URI Parameters
HideShow
zoneId
number (required) Example: 40
eventId
number (required) Example: 30

If not specified then the current event is used

Request
HideShow
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"
  ]
}
Response  204

Set Current Zone Population
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/zones/40/population/30
URI Parameters
HideShow
zoneId
number (required) Example: 40
eventId
number (required) Example: 30
Request
HideShow
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"
  ]
}
Response  204

Reset Current Populations For All Zones
PUT/zones/population/{eventId}

Reset the population for all zones in an event to 0.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/zones/population/30
URI Parameters
HideShow
eventId
number (required) Example: 30
Response  204

Zone Populations Info

Get Zone Population
GET/zones/{zoneId}/population/info{?eventId,from,to}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40/population/info?eventId=30&from=2019-01-01T05:00:00+02:00&to=2019-01-02T05:00:00+02:00
URI Parameters
HideShow
zoneId
number (required) Example: 40
eventId
number (required) Example: 30

If 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
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/zones/22496567-bd39-11eb-9e95-0242c0a83002/population/info?eventUuid=8e305cde-c75a-11eb-a0a9-0242c0a83002&from=2019-01-01T05:00:00+02:00&to=2019-01-02T05:00:00+02:00
URI Parameters
HideShow
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
Response  200
HideShow
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 Changes
GET/zones/{zoneId}/population/changes{?eventId,from,to,offset,limit}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40/population/changes?eventId=30&from=2019-01-01T05:00:00+02:00&to=2019-01-02T05:00:00+02:00&offset=0&limit=100
URI Parameters
HideShow
zoneId
number (required) Example: 40
eventId
number (required) Example: 30

If 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
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/zones/22496567-bd39-11eb-9e95-0242c0a83002/population/changes?eventId=30&eventUuid=8e305cde-c75a-11eb-a0a9-0242c0a83002&from=2019-01-01T05:00:00+02:00&to=2019-01-02T05:00:00+02:00&offset=0&limit=100
URI Parameters
HideShow
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
Response  200
HideShow
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 Time
GET/zones/{zoneId}/population/nearestChange{?eventId,time}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zones/40/population/nearestChange?eventId=30&time=2019-01-01T05:00:00+02:00
URI Parameters
HideShow
zoneId
number (required) Example: 40
eventId
number (required) Example: 30
time
string (required) Example: 2019-01-01T05:00:00+02:00
Response  200
HideShow
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 groups
GET/zoneGroups

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zoneGroups
Response  200
HideShow
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 group
POST/zoneGroups

Example URI

POST https://beautifulbjarne.venuemanager.net/api/zoneGroups
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/zoneGroups/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Zone group

Get zone group
GET/zoneGroups/{zoneGroupId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/zoneGroups/190
URI Parameters
HideShow
zoneGroupId
number (required) Example: 190
Response  200
HideShow
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 group
PUT/zoneGroups/{zoneGroupId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/zoneGroups/190
URI Parameters
HideShow
zoneGroupId
number (required) Example: 190
Request
HideShow
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"
  ]
}
Response  204

Delete zone group
DELETE/zoneGroups/{zoneGroupId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/zoneGroups/190
URI Parameters
HideShow
zoneGroupId
number (required) Example: 190
Response  204

Entrances

List all entrances
GET/entrances{?venueId,allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/entrances?venueId=10&allowDeleted=1
URI Parameters
HideShow
venueId
number (required) Example: 10
allowDeleted
boolean (optional) Example: 1

Find the entrances, even if they are deleted

Response  200
HideShow
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 entrance
POST/entrances

Example URI

POST https://beautifulbjarne.venuemanager.net/api/entrances
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 counts
PUT/entrances/resetCounts{?eventId}

Will reset the in and out counters for all entrances for an event.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/entrances/resetCounts?eventId=30
URI Parameters
HideShow
eventId
number (required) Example: 30
Response  204

Entrance

Get entrance
GET/entrances/{entranceId}{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/entrances/50?allowDeleted=1
URI Parameters
HideShow
entranceId
number (required) Example: 50
allowDeleted
boolean (optional) Example: 1

Find the entrance, even if it is deleted

Response  200
HideShow
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 entrance
PUT/entrances/{entranceId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/entrances/50
URI Parameters
HideShow
entranceId
number (required) Example: 50
Request
HideShow
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"
  ]
}
Response  204

Delete entrance
DELETE/entrances/{entranceId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/entrances/50
URI Parameters
HideShow
entranceId
number (required) Example: 50
Response  204

Entrance log entries
GET/entrances/{entranceId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/entrances/50/log
URI Parameters
HideShow
entranceId
number (required) Example: 50
Response  200
HideShow
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 status
GET/entrances/{entranceId}/status{?eventId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/entrances/50/status?eventId=30
URI Parameters
HideShow
entranceId
number (required) Example: 50
eventId
number (required) Example: 30
Response  200
HideShow
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 entrance
GET/entrances/{entranceId}/devices

Example URI

GET https://beautifulbjarne.venuemanager.net/api/entrances/50/devices
URI Parameters
HideShow
entranceId
number (required) Example: 50
Response  200
HideShow
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 configurations
GET/scannerConfigurations

Example URI

GET https://beautifulbjarne.venuemanager.net/api/scannerConfigurations
Response  200
HideShow
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 configuration
POST/scannerConfigurations

Example URI

POST https://beautifulbjarne.venuemanager.net/api/scannerConfigurations
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 configuration
GET/scannerConfigurations/{scannerConfigurationId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/scannerConfigurations/80
URI Parameters
HideShow
scannerConfigurationId
number (required) Example: 80
Response  200
HideShow
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 configuration
PUT/scannerConfigurations/{scannerConfigurationId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/scannerConfigurations/80
URI Parameters
HideShow
scannerConfigurationId
number (required) Example: 80
Request
HideShow
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"
  ]
}
Response  204

Delete scanner configuration
DELETE/scannerConfigurations/{scannerConfigurationId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/scannerConfigurations/80
URI Parameters
HideShow
scannerConfigurationId
number (required) Example: 80
Response  204

Scanners

List all scanners
GET/scanners{?entranceId,allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/scanners?entranceId=50&allowDeleted=1
URI Parameters
HideShow
entranceId
number (optional) Example: 50
allowDeleted
boolean (optional) Example: 1

Find the scanners, even if they are deleted

Response  200
HideShow
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 scanner
POST/scanners

Example URI

POST https://beautifulbjarne.venuemanager.net/api/scanners
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 scanner
GET/scanners/{scannerId}{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/scanners/60?allowDeleted=1
URI Parameters
HideShow
scannerId
number (required) Example: 60
allowDeleted
boolean (optional) Example: 1

Find the scanner, even if it is deleted

Response  200
HideShow
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 scanner
PUT/scanners/{scannerId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/scanners/60
URI Parameters
HideShow
scannerId
number (required) Example: 60
Request
HideShow
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"
  ]
}
Response  204

Delete scanner
DELETE/scanners/{scannerId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/scanners/60
URI Parameters
HideShow
scannerId
number (required) Example: 60
Response  204

Scanner log entries
GET/scanners/{scannerId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/scanners/60/log
URI Parameters
HideShow
scannerId
number (required) Example: 60
Response  200
HideShow
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 status
GET/scanners/{scannerId}/status{?eventId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/scanners/60/status?eventId=30
URI Parameters
HideShow
scannerId
number (required) Example: 60
eventId
number (required) Example: 30
Response  200
HideShow
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 groups
GET/lockers/groups{?entranceId,scannerId,allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/groups?entranceId=50&scannerId=60&allowDeleted=1
URI Parameters
HideShow
entranceId
number (optional) Example: 50
scannerId
number (optional) Example: 60
allowDeleted
boolean (optional) Example: 1

Find the locker groups, even if they are deleted

Response  200
HideShow
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 group
POST/lockers/groups

Either scannerId or entranceId must be specified. If entranceId is specified, then a new scanner is created as well.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/groups
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 group
GET/lockers/groups/{groupId}{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/groups/360?allowDeleted=1
URI Parameters
HideShow
groupId
number (required) Example: 360
allowDeleted
boolean (optional) Example: 1

Find the locker group, even if it is deleted

Response  200
HideShow
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 group
PUT/lockers/groups/{groupId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/lockers/groups/360
URI Parameters
HideShow
groupId
number (required) Example: 360
Request
HideShow
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"
  ]
}
Response  204

Delete locker group
DELETE/lockers/groups/{groupId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/lockers/groups/360
URI Parameters
HideShow
groupId
number (required) Example: 360
Response  204

Locker group log entries
GET/lockers/groups/{groupId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/groups/360/log
URI Parameters
HideShow
groupId
number (required) Example: 360
Response  200
HideShow
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 mode
PUT/lockers/groups/{groupId}/mode

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/lockers/groups/360/mode
URI Parameters
HideShow
groupId
number (required) Example: 360
Request
HideShow
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"
  ]
}
Response  204

Unlock all boxes in a locker group
POST/lockers/groups/{groupId}/unlock

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/groups/360/unlock
URI Parameters
HideShow
groupId
number (required) Example: 360
Response  204

Stop all bookings in a locker group
POST/lockers/groups/{groupId}/stopBookings

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/groups/360/stopBookings
URI Parameters
HideShow
groupId
number (required) Example: 360
Request
HideShow
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"
    }
  }
}
Response  204

Clear all rejected boxes in a locker group
POST/lockers/groups/{groupId}/clearRejected

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/groups/360/clearRejected
URI Parameters
HideShow
groupId
number (required) Example: 360
Response  204

Lockers Sections

Get locker sections
GET/lockers/sections{?groupId,allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/sections?groupId=360&allowDeleted=1
URI Parameters
HideShow
groupId
number (optional) Example: 360
allowDeleted
boolean (optional) Example: 1

Find the locker sections, even if they are deleted

Response  200
HideShow
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 boxes
GET/lockers/sections/data{?groupId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/sections/data?groupId=360
URI Parameters
HideShow
groupId
number (optional) Example: 360
Response  200
HideShow
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 section
POST/lockers/sections

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/sections
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 section
GET/lockers/sections/{sectionId}{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/sections/370?allowDeleted=1
URI Parameters
HideShow
sectionId
number (required) Example: 370
allowDeleted
boolean (optional) Example: 1

Find the locker section, even if it is deleted

Response  200
HideShow
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 section
PUT/lockers/sections/{sectionId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/lockers/sections/370
URI Parameters
HideShow
sectionId
number (required) Example: 370
Request
HideShow
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"
  ]
}
Response  204

Delete locker section
DELETE/lockers/sections/{sectionId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/lockers/sections/370
URI Parameters
HideShow
sectionId
number (required) Example: 370
Response  204

Locker section log entries
GET/lockers/sections/{sectionId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/sections/370/log
URI Parameters
HideShow
sectionId
number (required) Example: 370
Response  200
HideShow
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 boxes
GET/lockers/boxes{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/boxes?allowDeleted=1
URI Parameters
HideShow
allowDeleted
boolean (optional) Example: 1

Find the locker boxes, even if they are deleted

Response  200
HideShow
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 box
POST/lockers/boxes

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/boxes
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 box
GET/lockers/boxes/{boxId}{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/boxes/380?allowDeleted=1
URI Parameters
HideShow
boxId
number (required) Example: 380
allowDeleted
boolean (optional) Example: 1

Find the locker box, even if it is deleted

Response  200
HideShow
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 box
PUT/lockers/boxes/{boxId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/lockers/boxes/380
URI Parameters
HideShow
boxId
number (required) Example: 380
Request
HideShow
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"
  ]
}
Response  204

Delete locker box
DELETE/lockers/boxes/{boxId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/lockers/boxes/380
URI Parameters
HideShow
boxId
number (required) Example: 380
Response  204

Locker box log entries
GET/lockers/boxes/{boxId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/boxes/380/log
URI Parameters
HideShow
boxId
number (required) Example: 380
Response  200
HideShow
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 box
POST/lockers/boxes/{boxId}/unlock

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/boxes/380/unlock
URI Parameters
HideShow
boxId
number (required) Example: 380
Response  204

Set status of the box
PUT/lockers/boxes/{boxId}/status

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/lockers/boxes/380/status
URI Parameters
HideShow
boxId
number (required) Example: 380
Request
HideShow
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"
  ]
}
Response  204

Lockers Bookings

Get locker bookings
GET/lockers/bookings{?boxId,offset,limit,allowDeleted}

The bookings are returned in chronological order, newest first.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/bookings?boxId=380&offset=0&limit=50&allowDeleted=1
URI Parameters
HideShow
boxId
number (optional) Example: 380
offset
number (optional) Example: 0
limit
number (optional) Example: 50
allowDeleted
boolean (optional) Example: 1

Find the locker bookings, even if they are deleted

Response  200
HideShow
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 booking
POST/lockers/bookings

Will set its box as “booking”.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/bookings
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 booking
GET/lockers/bookings/{bookingId}{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/bookings/390?allowDeleted=1
URI Parameters
HideShow
bookingId
number (required) Example: 390
allowDeleted
boolean (optional) Example: 1

Find the locker booking, even if it is deleted

Response  200
HideShow
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 booking
PUT/lockers/bookings/{bookingId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/lockers/bookings/390
URI Parameters
HideShow
bookingId
number (required) Example: 390
Request
HideShow
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"
  ]
}
Response  204

Delete locker booking
DELETE/lockers/bookings/{bookingId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/lockers/bookings/390
URI Parameters
HideShow
bookingId
number (required) Example: 390
Response  204

Locker booking log entries
GET/lockers/bookings/{bookingId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/lockers/bookings/390/log
URI Parameters
HideShow
bookingId
number (required) Example: 390
Response  200
HideShow
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 booking
POST/lockers/bookings/{bookingId}/unlock

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/bookings/390/unlock
URI Parameters
HideShow
bookingId
number (required) Example: 390
Response  204

Complete the booking
POST/lockers/bookings/{bookingId}/complete

Will set its box as “occupied”.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/bookings/390/complete
URI Parameters
HideShow
bookingId
number (required) Example: 390
Response  204

Stop the booking
POST/lockers/bookings/{bookingId}/stop

Will set its box as “available”.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/lockers/bookings/390/stop
URI Parameters
HideShow
bookingId
number (required) Example: 390
Response  204

Events and tickets

Management of events and tickets.

Events

List all events
GET/events{?venueId,type,name,isActive}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/events?venueId=10&type=&name=Sæson 2020&isActive=true
URI Parameters
HideShow
venueId
number (optional) Example: 10
type
enum (optional) 

Choices: normal template

name
string (optional) Example: Sæson 2020
isActive
boolean (optional) Example: true
Response  200
HideShow
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 event
POST/events

Example URI

POST https://beautifulbjarne.venuemanager.net/api/events
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 event
GET/events/{eventId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/events/30
URI Parameters
HideShow
eventId
number (required) Example: 30
Response  200
HideShow
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 event
PUT/events/{eventId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/events/30
URI Parameters
HideShow
eventId
number (required) Example: 30
Request
HideShow
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"
  ]
}
Response  204

Delete event
DELETE/events/{eventId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/events/30
URI Parameters
HideShow
eventId
number (required) Example: 30
Response  204

Reset entrance counts
PUT/events/{eventId}/resetCounts

Will reset the in and out counters for the event.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/events/30/resetCounts
URI Parameters
HideShow
eventId
number (required) Example: 30
Response  204

Update event times
PUT/events/{eventId}/updateTimes

Update the baseTime of the event, and all other times for the event and its periods relatively.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/events/30/updateTimes
URI Parameters
HideShow
eventId
number (required) Example: 30
Request
HideShow
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"
  ]
}
Response  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 rules
GET/events/{eventId}/entranceRules

Example URI

GET https://beautifulbjarne.venuemanager.net/api/events/30/entranceRules
URI Parameters
HideShow
eventId
number (required) Example: 30
Response  200
HideShow
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 rule
POST/events/{eventId}/entranceRules

Example URI

POST https://beautifulbjarne.venuemanager.net/api/events/30/entranceRules
URI Parameters
HideShow
eventId
number (required) Example: 30
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 rule
GET/events/{eventId}/entranceRules/{eventEntranceRuleId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/events/30/entranceRules/35
URI Parameters
HideShow
eventId
number (required) Example: 30
eventEntranceRuleId
number (required) Example: 35
Response  200
HideShow
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 rule
PUT/events/{eventId}/entranceRules/{eventEntranceRuleId}

The IDs in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/events/30/entranceRules/35
URI Parameters
HideShow
eventId
number (required) Example: 30
eventEntranceRuleId
number (required) Example: 35
Request
HideShow
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"
  ]
}
Response  204

Delete event entrance rule
DELETE/events/{eventId}/entranceRules/{eventEntranceRuleId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/events/30/entranceRules/35
URI Parameters
HideShow
eventId
number (required) Example: 30
eventEntranceRuleId
number (required) Example: 35
Response  204

Event status

Get event status
GET/events/{eventId}/status

Example URI

GET https://beautifulbjarne.venuemanager.net/api/events/30/status
URI Parameters
HideShow
eventId
number (required) Example: 30
Response  200
HideShow
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 scannings
GET/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

GET https://beautifulbjarne.venuemanager.net/api/events/30/scans?from=2019-01-01T05:00:00+02:00&to=2019-01-02T05:00:00+02:00&after=999&limit=1000
URI Parameters
HideShow
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: 999

Highest ID from earlier results.

limit
number (optional) Example: 1000
Response  200
HideShow
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 scans
GET/events/{eventId}/scans/search{?from,to,zoneId,entranceId,scannerId,deviceId,after,offset,limit}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/events/30/scans/search?from=2019-01-01T05:00:00+02:00&to=2019-01-02T05:00:00+02:00&zoneId=40&entranceId=50&scannerId=60&deviceId=70&after=999&offset=0&limit=100
URI Parameters
HideShow
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: 999

Find all scannings after this ID

offset
number (optional) Example: 0
limit
number (optional) Example: 100
Response  200
HideShow
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 data
GET/events/{eventId}/scans/data{?from,to,zoneId,entranceId,scannerId,deviceId,onlyUnique}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/events/30/scans/data?from=2019-01-01T05:00:00+02:00&to=2019-01-02T05:00:00+02:00&zoneId=40&entranceId=50&scannerId=60&deviceId=70&onlyUnique=1
URI Parameters
HideShow
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: 1

Removed duplicated failed scans from result

Response  200
HideShow
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 markers
GET/events/markers/{?eventId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/events/markers/?eventId=30
URI Parameters
HideShow
eventId
number (required) Example: 30
Response  200
HideShow
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 marker
POST/events/markers

Example URI

POST https://beautifulbjarne.venuemanager.net/api/events/markers
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 marker
GET/events/markers/{eventMarkerId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/events/markers/30
URI Parameters
HideShow
eventMarkerId
number (required) Example: 30
Response  200
HideShow
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 marker
PUT/events/markers/{eventMarkerId}

The IDs in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/events/markers/30
URI Parameters
HideShow
eventMarkerId
number (required) Example: 30
Request
HideShow
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"
  ]
}
Response  204

Delete event marker
DELETE/events/markers/{eventMarkerId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/events/markers/30
URI Parameters
HideShow
eventMarkerId
number (required) Example: 30
Response  204

Calendars

Calendars can be used to restrict AccessTypes further.

List all calendars
GET/calendars

Example URI

GET https://beautifulbjarne.venuemanager.net/api/calendars
Response  200
HideShow
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 calendar
POST/calendars

Example URI

POST https://beautifulbjarne.venuemanager.net/api/calendars
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/calendars/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Calendar

Get calendar
GET/calendars/{calenderId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/calendars/210
URI Parameters
HideShow
calenderId
number (required) Example: 210
Response  200
HideShow
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 calendar
PUT/calendars/{calenderId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/calendars/210
URI Parameters
HideShow
calenderId
number (required) Example: 210
Request
HideShow
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"
  ]
}
Response  204

Delete calendar
DELETE/calendars/{calenderId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/calendars/210
URI Parameters
HideShow
calenderId
number (required) Example: 210
Response  204

Copy calendar week
POST/calendars/{calendarId}/copyWeek

Copy day types from one week to all weeks in a period.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/calendars/200/copyWeek
URI Parameters
HideShow
calendarId
number (required) Example: 200
Request
HideShow
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"
  ]
}
Response  204

Calendar day

List all calendar days
GET/calendars/{calendarId}/days

Example URI

GET https://beautifulbjarne.venuemanager.net/api/calendars/200/days
URI Parameters
HideShow
calendarId
number (required) Example: 200
Response  200
HideShow
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 day
POST/calendars/{calendarId}/days

Example URI

POST https://beautifulbjarne.venuemanager.net/api/calendars/200/days
URI Parameters
HideShow
calendarId
number (required) Example: 200
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 date
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/calendars/200/days
URI Parameters
HideShow
calendarId
number (required) Example: 200
Request
HideShow
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"
  ]
}
Response  204

Calendar Day

Get calendar day
GET/calendars/{calendarId}/days/{calendarDayId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/calendars/200/days/205
URI Parameters
HideShow
calendarId
number (required) Example: 200
calendarDayId
number (required) Example: 205
Response  200
HideShow
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 day
PUT/calendars/{calendarId}/days/{calendarDayId}

The IDs in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/calendars/200/days/205
URI Parameters
HideShow
calendarId
number (required) Example: 200
calendarDayId
number (required) Example: 205
Request
HideShow
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"
  ]
}
Response  204

Delete calendar day
DELETE/calendars/{calendarId}/days/{calendarDayId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/calendars/200/days/205
URI Parameters
HideShow
calendarId
number (required) Example: 200
calendarDayId
number (required) Example: 205
Response  204

Get day type periods for a calendar day
GET/calendars/{calendarId}/days/{calendarDayId}/periods

Note: This will only include the raw DayTypePeriod objects, and not any overwritten period data.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/calendars/200/days/205/periods
URI Parameters
HideShow
calendarId
number (required) Example: 200
calendarDayId
number (required) Example: 205
Response  200
HideShow
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 date
GET/calendars/{calendarId}/days/{date}/periods

Note: This will only include the raw DayTypePeriod objects, and not any overwritten period data.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/calendars/200/days/2021-01-31/periods
URI Parameters
HideShow
calendarId
number (required) Example: 200
date
string (required) Example: 2021-01-31
Response  200
HideShow
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 day
PUT/calendars/{calendarId}/days/{calendarDayId}/periods/{dayTypePeriodId}

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/calendars/200/days/205/periods/215
URI Parameters
HideShow
calendarId
number (required) Example: 200
calendarDayId
number (required) Example: 205
dayTypePeriodId
number (required) Example: 215
Request
HideShow
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"
    }
  }
}
Response  204

Set day type period values specific for a date
PUT/calendars/{calendarId}/days/{date}/periods/{dayTypePeriodId}

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/calendars/200/days/2021-01-31/periods/215
URI Parameters
HideShow
calendarId
number (required) Example: 200
date
string (required) Example: 2021-01-31
dayTypePeriodId
number (required) Example: 215
Request
HideShow
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"
    }
  }
}
Response  204

Cancel a day type period specific for a calendar day
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/calendars/200/days/205/periods/215/cancel
URI Parameters
HideShow
calendarId
number (required) Example: 200
calendarDayId
number (required) Example: 205
dayTypePeriodId
number (required) Example: 215
Response  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 periods
GET/periods{?eventId,name}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/periods?eventId=30&name=
URI Parameters
HideShow
eventId
number (optional) Example: 30
name
string (optional) 
Response  200
HideShow
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 periods
GET/devices/search{?eventId,name,offset,limit}

Search for periods for pagination.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/devices/search?eventId=10&name=12&offset=0&limit=100
URI Parameters
HideShow
eventId
number (optional) Example: 10

Only 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
Response  200
HideShow
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 period
POST/periods

Example URI

POST https://beautifulbjarne.venuemanager.net/api/periods
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/periods/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Period

Get period
GET/periods/{periodId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/periods/80
URI Parameters
HideShow
periodId
number (required) Example: 80
Response  200
HideShow
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 period
PUT/periods/{periodId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/periods/80
URI Parameters
HideShow
periodId
number (required) Example: 80
Request
HideShow
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"
  ]
}
Response  204

Delete period
DELETE/periods/{periodId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/periods/80
URI Parameters
HideShow
periodId
number (required) Example: 80
Response  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 types
GET/accessTypes{?eventId,name,allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/accessTypes?eventId=30&name=&allowDeleted=1
URI Parameters
HideShow
eventId
number (optional) Example: 30
name
string (optional) 
allowDeleted
boolean (optional) Example: 1

Find the access types, even if they are deleted

Response  200
HideShow
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 types
GET/accessTypes/search{?eventId,name,offset,limit}

Search for access types for pagination.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/accessTypes/search?eventId=10&name=12&offset=0&limit=100
URI Parameters
HideShow
eventId
number (optional) Example: 10

Only 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
Response  200
HideShow
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 type
POST/accessTypes

Example URI

POST https://beautifulbjarne.venuemanager.net/api/accessTypes
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/accessTypes/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Access type

Get access type
GET/accessTypes/{accessTypeId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/accessTypes/90
URI Parameters
HideShow
accessTypeId
number (required) Example: 90
Response  200
HideShow
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 type
PUT/accessTypes/{accessTypeId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/accessTypes/90
URI Parameters
HideShow
accessTypeId
number (required) Example: 90
Request
HideShow
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"
  ]
}
Response  204

Delete access type
DELETE/accessTypes/{accessTypeId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/accessTypes/90
URI Parameters
HideShow
accessTypeId
number (required) Example: 90
Response  204

Access type zone periods

Defines which zone/period combinations the access type is valid for.

List all zone/period relations
GET/accessTypes/{accessTypeId}/zonePeriods

Example URI

GET https://beautifulbjarne.venuemanager.net/api/accessTypes/90/zonePeriods
URI Parameters
HideShow
accessTypeId
number (required) Example: 90
Response  200
HideShow
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 relation
POST/accessTypes/{accessTypeId}/zonePeriods

Example URI

POST https://beautifulbjarne.venuemanager.net/api/accessTypes/90/zonePeriods
URI Parameters
HideShow
accessTypeId
number (required) Example: 90
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 relation
GET/accessTypes/{accessTypeId}/zonePeriods/{zonePeriodId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/accessTypes/90/zonePeriods/130
URI Parameters
HideShow
accessTypeId
number (required) Example: 90
zonePeriodId
number (required) Example: 130
Response  200
HideShow
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 relation
DELETE/accessTypes/{accessTypeId}/zonePeriods/{zonePeriodId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/accessTypes/90/zonePeriods/130
URI Parameters
HideShow
accessTypeId
number (required) Example: 90
zonePeriodId
number (required) Example: 130
Response  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 tickets
GET/tickets{?eventId,offset,limit}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tickets?eventId=30&offset=0&limit=100
URI Parameters
HideShow
eventId
number (required) Example: 30
offset
number (optional) Example: 0

Not implemented

limit
number (optional) Example: 100

Not implemented

Response  200
HideShow
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

POST https://beautifulbjarne.venuemanager.net/api/tickets
Request
HideShow
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"
  ]
}
Response  201
HideShow
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"
  ]
}
Request
HideShow
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"
  ]
}
Response  201
HideShow
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"
  ]
}
Request
HideShow
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"
}
Response  200
HideShow
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"
}
Response  404
HideShow
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"
  ]
}
Request  with already used name
Response  400
HideShow
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"
  ]
}
Request  with invalid name
Response  400
HideShow
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 tickets
GET/tickets/search{?eventId,ticketSource,ticketExternalId,ticketExternalIdTo,ticketStatus,tokenValue,tokenStatus,oneOfATIds,allOfATIds,offset,limit}

Search for tickets for a single event.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tickets/search?eventId=30&ticketSource='shop.smukfest.dk'&ticketExternalId='12345'&ticketExternalIdTo=''&ticketStatus=1&tokenValue=04E56FFAE65380&tokenStatus=blocked&oneOfATIds=[90,91]&allOfATIds=[92,93]&offset=0&limit=100
URI Parameters
HideShow
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: 1

1 for active tickets only, 0 for inactive tickets only, not specified for all tickets.

tokenValue
string (optional) Example: 04E56FFAE65380

Can do a wildcard search with *. To search for * escape it with *.

tokenStatus
enum (optional) Example: blocked

Choices: 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
Response  200
HideShow
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 tickets
PUT/tickets/multiUpdate

Make updates to multiple tickets at once.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/tickets/multiUpdate
Request
HideShow
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"
  ]
}
Response  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

GET https://beautifulbjarne.venuemanager.net/api/tickets/validateName?name=Malcolm Reynolds&eventId=30&eventUuid=8e305cde-c75a-11eb-a0a9-0242c0a83002&ticketId=100&ticketUuid=735e3699-c75a-11eb-a0a9-0242c0a83002
URI Parameters
HideShow
name
string (required) Example: Malcolm Reynolds

The name to check

eventId
number (optional) Example: 30

The event to check inside

eventUuid
string (optional) Example: 8e305cde-c75a-11eb-a0a9-0242c0a83002

The event to check inside

ticketId
number (optional) Example: 100

The ticket, that is allowed to already have that name

ticketUuid
string (required) Example: 735e3699-c75a-11eb-a0a9-0242c0a83002

The ticket, that is allowed to already have that name

Response  204
Request  with empty or missing name
Response  400
HideShow
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"
  ]
}
Request  without eventId or ticketId
Response  400
HideShow
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"
  ]
}
Request  with already used name
Response  400
HideShow
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"
  ]
}
Request  with invalid name
Response  400
HideShow
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 ticket
GET/tickets/{ticketId}{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tickets/100?allowDeleted=1
URI Parameters
HideShow
ticketId
number (required) Example: 100
allowDeleted
boolean (optional) Example: 1

Find the ticket, even if it is deleted

Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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 ticket
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/tickets/100
URI Parameters
HideShow
ticketId
number (required) Example: 100
Request
HideShow
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"
  ]
}
Response  204
Response  404
HideShow
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"
  ]
}
Request  with already used name
Response  400
HideShow
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"
  ]
}
Request  with invalid name
Response  400
HideShow
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 ticket
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/tickets/735e3699-c75a-11eb-a0a9-0242c0a83002
URI Parameters
HideShow
ticketUuid
string (required) Example: 735e3699-c75a-11eb-a0a9-0242c0a83002
Request
HideShow
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"
  ]
}
Response  204
Response  404
HideShow
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"
  ]
}
Request  with already used name
Response  400
HideShow
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"
  ]
}
Request  with invalid name
Response  400
HideShow
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 ticket
DELETE/tickets/{ticketId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/tickets/100
URI Parameters
HideShow
ticketId
number (required) Example: 100
Response  204

Ticket log entries
GET/tickets/{ticketId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tickets/100/log
URI Parameters
HideShow
ticketId
number (required) Example: 100
Response  200
HideShow
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 ticket
GET/tickets/{ticketId}/accessTypes

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tickets/100/accessTypes
URI Parameters
HideShow
ticketId
number (required) Example: 100
Response  200
HideShow
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"
}
Response  404
HideShow
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 ticket
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/tickets/100/accessTypes
URI Parameters
HideShow
ticketId
number (required) Example: 100
Request
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}
Response  204

Ticket access type

Remove access type from ticket
DELETE/tickets/{ticketId}/accessTypes/{accessTypeId}

Remove single access type from ticket.

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/tickets/100/accessTypes/90
URI Parameters
HideShow
ticketId
number (required) Example: 100
accessTypeId
number (required) Example: 90
Response  204

Add access type to ticket
POST/tickets/{ticketId}/accessTypes/{accessTypeId}

Add single access type to ticket.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/tickets/100/accessTypes/90
URI Parameters
HideShow
ticketId
number (required) Example: 100
accessTypeId
number (required) Example: 90
Response  204

Tokens

List all tokens
GET/tokens{?eventId,tokenTypeId,ticketId}

At least one of the parameters eventId or ticketId must be supplied.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tokens?eventId=30&tokenTypeId=110&ticketId=100
URI Parameters
HideShow
eventId
number (optional) Example: 30
ticketId
number (optional) Example: 100
tokenTypeId
number (optional) Example: 110
Response  200
HideShow
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"
}
Response  400
HideShow
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 token
POST/tokens

Example URI

POST https://beautifulbjarne.venuemanager.net/api/tokens
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 token
GET/tokens/{tokenId}{?allowDeleted}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tokens/120?allowDeleted=1
URI Parameters
HideShow
tokenId
number (required) Example: 120
allowDeleted
boolean (optional) Example: 1

Find the token, even if it is deleted

Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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 token
PUT/tokens/{tokenId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/tokens/120
URI Parameters
HideShow
tokenId
number (required) Example: 120
Request
HideShow
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"
  ]
}
Response  204

Delete token
DELETE/tokens/{tokenId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/tokens/120
URI Parameters
HideShow
tokenId
number (required) Example: 120
Response  204

Token log entries
GET/tokens/{tokenId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tokens/120/log
URI Parameters
HideShow
tokenId
number (required) Example: 120
Response  200
HideShow
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/MDRFNTZGRkFFNjUzODA= This is the case for all /tokens/value/ end-points.

Get token by value
GET/tokens/value/{tokenTypeName}/{tokenValue}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tokens/value/NFC UID/04E56FFAE65380
URI Parameters
HideShow
tokenTypeName
string (required) Example: NFC UID
tokenValue
string (required) Example: 04E56FFAE65380
Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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 token
GET/tokens/value/{tokenTypeName}/{tokenValue}/accessTypes

Returns the access types for the token’s ticket.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tokens/value/NFC UID/04E56FFAE65380/accessTypes
URI Parameters
HideShow
tokenTypeName
string (required) Example: NFC UID
tokenValue
string (required) Example: 04E56FFAE65380
Response  200
HideShow
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"
}
Response  404
HideShow
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 token
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/tokens/value/NFC UID/04E56FFAE65380/accessTypes
URI Parameters
HideShow
tokenTypeName
string (required) Example: NFC UID
tokenValue
string (required) Example: 04E56FFAE65380
Request
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}
Response  204
Response  404
HideShow
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 ticket
DELETE/tokens/value/{tokenTypeName}/{tokenValue}/accessTypes/{accessTypeId}

Remove single access type from ticket.

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/tokens/value/NFC UID/04E56FFAE65380/accessTypes/90
URI Parameters
HideShow
tokenTypeName
string (required) Example: NFC UID
tokenValue
string (required) Example: 04E56FFAE65380
accessTypeId
number (required) Example: 90
Response  204

Add access type to ticket
POST/tokens/value/{tokenTypeName}/{tokenValue}/accessTypes/{accessTypeId}

Add single access type to ticket.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/tokens/value/NFC UID/04E56FFAE65380/accessTypes/90
URI Parameters
HideShow
tokenTypeName
string (required) Example: NFC UID
tokenValue
string (required) Example: 04E56FFAE65380
accessTypeId
number (required) Example: 90
Response  204

Token scans

Get scannings for token within period
GET/tokens/value/{tokenTypeName}/{tokenValue}/scans?from={fromDate}&to={toDate}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/tokens/value/NFC UID/04E56FFAE65380/scans?from=2019-01-01T05:00:00+02:00&to=2019-01-01T05:00:00+02:00
URI Parameters
HideShow
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
Response  200
HideShow
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"
}
Response  404
HideShow
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 status
PUT/tokens/value/{tokenTypeName}/{tokenValue}/setStatus/{status}

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/tokens/value/NFC UID/04E56FFAE65380/setStatus/status
URI Parameters
HideShow
tokenTypeName
string (required) Example: NFC UID
tokenValue
string (required) Example: 04E56FFAE65380
status
enum (required) 

Choices: known active blocked

Response  204

Virtual Queues

Virtual Queue Groups

Virtual queue groups are used for setting rules on a group of virtual queues.

List all virtual queue groups
GET/virtualQueueGroups

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueueGroups
Response  200
HideShow
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 group
POST/virtualQueueGroups

Example URI

POST https://beautifulbjarne.venuemanager.net/api/virtualQueueGroups
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueueGroups/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Virtual queue group

Get virtual queue group
GET/virtualQueueGroups/{virtualQueueGroupId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueueGroups/90
URI Parameters
HideShow
virtualQueueGroupId
number (required) Example: 90
Response  200
HideShow
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 group
PUT/virtualQueueGroups/{virtualQueueGroupId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueueGroups/90
URI Parameters
HideShow
virtualQueueGroupId
number (required) Example: 90
Request
HideShow
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"
  ]
}
Response  204

Delete virtual queue group
DELETE/virtualQueueGroups/{virtualQueueGroupId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/virtualQueueGroups/90
URI Parameters
HideShow
virtualQueueGroupId
number (required) Example: 90
Response  204

Virtual Queues

Virtual queues are the core of the virtual queue system and belongs to an event and a zone.

List all virtual queues
GET/virtualQueues{?eventId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues?eventId=30
URI Parameters
HideShow
eventId
number (optional) Example: 30
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/status?eventId=30&eventUuid=8e305cde-c75a-11eb-a0a9-0242c0a83002
URI Parameters
HideShow
eventId
number (optional) Example: 30
eventUuid
string (optional) Example: 8e305cde-c75a-11eb-a0a9-0242c0a83002
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/info?eventId=30&eventUuid=8e305cde-c75a-11eb-a0a9-0242c0a83002
URI Parameters
HideShow
eventId
number (optional) Example: 30
eventUuid
string (optional) Example: 8e305cde-c75a-11eb-a0a9-0242c0a83002
Request
HideShow
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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 info
GET/virtualQueues/info/uuids{?uuids}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/info/uuids?uuids=
URI Parameters
HideShow
uuids
array (required) 
Request
HideShow
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/ticketInfo?ticketId=100&ticketUuid=735e3699-c75a-11eb-a0a9-0242c0a83002&tokenId=120&tokenValue=04E56FFAE65380&tokenTypeName=NFC UID&eventId=30
URI Parameters
HideShow
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 UID

Is required for tokenValue

eventId
number (optional) Example: 30

Is recommended for tokenValue

Request
HideShow
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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"
  ]
}
Response  400
HideShow
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"
  ]
}
Response  404
HideShow
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
POST/virtualQueues

Example URI

POST https://beautifulbjarne.venuemanager.net/api/virtualQueues
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 IDs
GET/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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/deletableIds
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  1
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Virtual queue

Get virtual queue
GET/virtualQueues/{virtualQueueId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  200
HideShow
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 status
GET/virtualQueues/{virtualQueueId}/status

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/status
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/6edf9912-e2e4-465e-9678-2dabe5810b57/status
URI Parameters
HideShow
virtualQueueUuid
string (required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57

UUID

Request
HideShow
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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
GET/virtualQueues/{virtualQueueId}/info

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/info
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/6edf9912-e2e4-465e-9678-2dabe5810b57/info
URI Parameters
HideShow
virtualQueueUuid
string (required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57

UUID

Request
HideShow
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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 statistics
GET/virtualQueues/{virtualQueueId}/population

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/population
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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
PUT/virtualQueues/{virtualQueueId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/230
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Request
HideShow
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"
  ]
}
Response  204

Get calculations used estimated welcome time
GET/virtualQueues/{virtualQueueId}/calculations{?couponGroupId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/calculations?couponGroupId=next
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
couponGroupId
string (optional) Example: next

ID of the coupon group to calculate for or one of the keywords “next”, “newest” or “none”

Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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 queue
PUT/virtualQueues/{virtualQueueId}/status

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/status
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Request
HideShow
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"
  ]
}
Response  204

Delete virtual queue
DELETE/virtualQueues/{virtualQueueId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/virtualQueues/230
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  204

Welcome the next coupon group in the virtual queue
POST/virtualQueues/welcomeNextCouponGroup

Example URI

POST https://beautifulbjarne.venuemanager.net/api/virtualQueues/welcomeNextCouponGroup
Request
HideShow
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"
      ]
    }
  }
}
Response  200
HideShow
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 tickets
GET/virtualQueues/{virtualQueueId}/welcomedTickets

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/welcomedTickets
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/6edf9912-e2e4-465e-9678-2dabe5810b57/welcomedTickets
URI Parameters
HideShow
virtualQueueUuid
string (required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57

UUID

Response  200
HideShow
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
GET/virtualQueues/{virtualQueueId}/nextToWelcomeTickets{?count,type}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/nextToWelcomeTickets?count=10&type=
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
count
number (optional) Example: 10

How many tickets to return (default is 10)

type
enum (optional) 

Choices: physical virtual

Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/6edf9912-e2e4-465e-9678-2dabe5810b57/nextToWelcomeTickets?count=10&type=
URI Parameters
HideShow
virtualQueueUuid
string (required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57

UUID

count
number (optional) Example: 10

How many tickets to return (default is 10)

type
enum (optional) 

Choices: physical virtual

Response  200
HideShow
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 today
GET/virtualQueues/{virtualQueueId}/calendarDayPeriods

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/calendarDayPeriods
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/6edf9912-e2e4-465e-9678-2dabe5810b57/calendarDayPeriods
URI Parameters
HideShow
virtualQueueUuid
string (required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57

UUID

Response  200
HideShow
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 today
GET/virtualQueues/{virtualQueueId}/calendarDayPeriods/info

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/calendarDayPeriods/info
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  200
HideShow
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 coupons
GET/virtualQueues/{virtualQueueId}/coupons

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/coupons
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  200
HideShow
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 info
GET/virtualQueues/{virtualQueueId}/coupons/withInfo

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/coupons/withInfo
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  200
HideShow
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"
}
Response  404
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/6edf9912-e2e4-465e-9678-2dabe5810b57/coupons/withInfo?tokenValue=04E56FFAE65380&tokenTypeName=NFC UID
URI Parameters
HideShow
virtualQueueUuid
string (required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57

UUID

tokenValue
string (required) Example: 04E56FFAE65380

Find coupons for this token

tokenTypeName
string (required) Example: NFC UID
Request
HideShow
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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"
}
Response  400
HideShow
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"
  ]
}
Response  404
HideShow
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 coupon
POST/virtualQueues/{virtualQueueId}/coupons

Example URI

POST https://beautifulbjarne.venuemanager.net/api/virtualQueues/230/coupons
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Request
HideShow
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"
  ]
}
Response  201
HideShow
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"
  ]
}
Response  404
HideShow
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"
  ]
}
Response  400
HideShow
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"
  ]
}
Request  with already used name
HideShow
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#"
}
Response  400
HideShow
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"
  ]
}
Request  with invalid name
HideShow
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#"
}
Response  400
HideShow
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"
  ]
}
Request  on closed virtual queue
HideShow
Headers
Content-Type: application/json
Response  400
HideShow
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"
  ]
}
Request  on closing virtual queue
HideShow
Headers
Content-Type: application/json
Response  400
HideShow
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

POST https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons
Request
HideShow
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"
  ]
}
Response  201
HideShow
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"
  ]
}
Response  404
HideShow
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"
  ]
}
Response  400
HideShow
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"
  ]
}
Request  with already used name
HideShow
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#"
}
Response  400
HideShow
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"
  ]
}
Request  with invalid name
HideShow
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#"
}
Response  400
HideShow
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"
  ]
}
Request  on closed virtual queue
HideShow
Headers
Content-Type: application/json
Response  400
HideShow
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"
  ]
}
Request  on closing virtual queue
HideShow
Headers
Content-Type: application/json
Response  400
HideShow
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

POST https://beautifulbjarne.venuemanager.net/api/virtualQueues/6edf9912-e2e4-465e-9678-2dabe5810b57/coupons
URI Parameters
HideShow
virtualQueueUuid
string (required) Example: 6edf9912-e2e4-465e-9678-2dabe5810b57

UUID

Request
HideShow
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"
    }
  }
}
Response  201
HideShow
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"
  ]
}
Response  400
HideShow
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"
  ]
}
Response  404
HideShow
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"
  ]
}
Request  on closed virtual queue
HideShow
Headers
Content-Type: application/json
Response  400
HideShow
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"
  ]
}
Request  on closing virtual queue
HideShow
Headers
Content-Type: application/json
Response  400
HideShow
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 coupons
GET/virtualQueues/coupons{?status,offset,limit}

Search for access types for pagination.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons?status=&offset=0&limit=100
URI Parameters
HideShow
status
array[string] (optional) 

Array of status

offset
number (optional) Example: 0
limit
number (optional) Example: 100
Response  200
HideShow
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 coupon
GET/virtualQueues/coupons/{virtualQueueCouponId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/250
URI Parameters
HideShow
virtualQueueCouponId
number (required) Example: 250
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/807d8feb-616f-11eb-93d6-0242c0a83003
URI Parameters
HideShow
virtualQueueCouponUuid
string (required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003

UUID

Request
HideShow
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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 info
GET/virtualQueues/coupons/info

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/info
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/807d8feb-616f-11eb-93d6-0242c0a83003/info
URI Parameters
HideShow
virtualQueueCouponUuid
string (required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003

UUID

Request
HideShow
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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
PUT/virtualQueues/coupons/{virtualQueueCouponId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/250
URI Parameters
HideShow
virtualQueueCouponId
number (required) Example: 250
Request
HideShow
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"
  ]
}
Response  204

Welcome a virtual queue coupon
PUT/virtualQueues/coupons/welcome

Welcome the queue coupon now.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/welcome
Response  204

Postpone a virtual queue coupon
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/postpone
Request
HideShow
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"
    }
  }
}
Response  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

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/807d8feb-616f-11eb-93d6-0242c0a83003/postpone
URI Parameters
HideShow
virtualQueueCouponUuid
string (required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003

UUID

Request
HideShow
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"
    }
  }
}
Response  204
Response  400
HideShow

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"
  ]
}
Response  404
HideShow
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
DELETE/virtualQueues/coupons/{virtualQueueCouponId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/250
URI Parameters
HideShow
virtualQueueCouponId
number (required) Example: 250
Response  204

Dequeue a virtual queue coupon
PUT/virtualQueues/coupons/dequeue

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/dequeue
Response  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

DELETE https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/807d8feb-616f-11eb-93d6-0242c0a83003
URI Parameters
HideShow
virtualQueueCouponUuid
string (required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003

UUID

Request
HideShow
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  204
Response  400
HideShow
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"
  ]
}
Response  404
HideShow
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 tickets
GET/virtualQueues/couponTickets{?virtualQueueCouponId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponTickets?virtualQueueCouponId=250
URI Parameters
HideShow
virtualQueueCouponId
number (required) Example: 250
Response  200
HideShow
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 ticket
GET/virtualQueues/couponTickets/{virtualQueueCouponTicketId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponTickets/260
URI Parameters
HideShow
virtualQueueCouponTicketId
number (required) Example: 260
Response  200
HideShow
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 ticket
PUT/virtualQueues/couponTickets/{virtualQueueCouponTicketId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponTickets/260
URI Parameters
HideShow
virtualQueueCouponTicketId
number (required) Example: 260
Request
HideShow
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"
  ]
}
Response  204

Remove virtual queue coupon ticket
DELETE/virtualQueues/couponTickets/{virtualQueueCouponTicketId}

Remove a ticket from a coupon.

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponTickets/260
URI Parameters
HideShow
virtualQueueCouponTicketId
number (required) Example: 260
Response  204
Response  404
HideShow
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 ticket
PUT/virtualQueues/couponTickets/{virtualQueueCouponTicketId}/welcome

Welcome a single ticket in a coupon.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponTickets/260/welcome
URI Parameters
HideShow
virtualQueueCouponTicketId
number (required) Example: 260
Response  204
Response  400
HideShow
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"
  ]
}
Response  404
HideShow
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

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponTickets/260/postpone
URI Parameters
HideShow
virtualQueueCouponTicketId
number (required) Example: 260
Request
HideShow
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"
    }
  }
}
Response  204
Response  400
HideShow

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"
  ]
}
Response  404
HideShow
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 ticket
PUT/virtualQueues/couponTickets/{virtualQueueCouponTicketId}/dequeue

Dequeue a single ticket in a coupon.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponTickets/260/dequeue
URI Parameters
HideShow
virtualQueueCouponTicketId
number (required) Example: 260
Response  204
Response  400
HideShow
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"
  ]
}
Response  404
HideShow
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 entries
GET/virtualQueues/couponTickets/{virtualQueueCouponTicketId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponTickets/260/log
URI Parameters
HideShow
virtualQueueCouponTicketId
number (required) Example: 260
Response  200
HideShow
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 tickets
GET/virtualQueues/coupons/{virtualQueueCouponId}/tickets

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/250/tickets
URI Parameters
HideShow
virtualQueueCouponId
number (required) Example: 250
Response  200
HideShow
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 ticket
POST/virtualQueues/coupons/{virtualQueueCouponId}/tickets

Example URI

POST https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/250/tickets
URI Parameters
HideShow
virtualQueueCouponId
number (required) Example: 250
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 group
POST/virtualQueues/coupons/{virtualQueueCouponId}/tickets/{ticketId}

Example URI

POST https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/250/tickets/100
URI Parameters
HideShow
virtualQueueCouponId
number (required) Example: 250
ticketId
number (required) Example: 100
Response  204

Get virtual queue coupon ticket
GET/virtualQueues/coupons/{virtualQueueCouponId}/tickets/{ticketId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/250/tickets/100
URI Parameters
HideShow
virtualQueueCouponId
number (required) Example: 250
ticketId
number (required) Example: 100
Response  200
HideShow
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 ticket
PUT/virtualQueues/coupons/{virtualQueueCouponId}/tickets/{ticketId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/250/tickets/100
URI Parameters
HideShow
virtualQueueCouponId
number (required) Example: 250
ticketId
number (required) Example: 100
Request
HideShow
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"
  ]
}
Response  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

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/807d8feb-616f-11eb-93d6-0242c0a83003/tickets/100/postpone
URI Parameters
HideShow
virtualQueueCouponUuid
string (required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003

UUID

ticketId
number (required) Example: 100
Request
HideShow
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"
    }
  }
}
Response  204
Response  400
HideShow

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"
  ]
}
Response  404
HideShow
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 ticket
DELETE/virtualQueues/coupons/{virtualQueueCouponId}/tickets/{ticketId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/250/tickets/100
URI Parameters
HideShow
virtualQueueCouponId
number (required) Example: 250
ticketId
number (required) Example: 100
Response  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

DELETE https://beautifulbjarne.venuemanager.net/api/virtualQueues/coupons/807d8feb-616f-11eb-93d6-0242c0a83003/tickets/100
URI Parameters
HideShow
virtualQueueCouponUuid
string (required) Example: 807d8feb-616f-11eb-93d6-0242c0a83003

UUID

ticketId
number (required) Example: 100
Request
HideShow
Headers
Content-Type: application/json
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  204
Response  400
HideShow
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"
  ]
}
Response  404
HideShow
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 queue
GET/virtualQueues/physicalCouponTickets{?virtualQueueId,onlyActive}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/physicalCouponTickets?virtualQueueId=230&onlyActive=true
URI Parameters
HideShow
virtualQueueId
number (optional) Example: 230
onlyActive
boolean (optional) Example: true
Response  200
HideShow
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 info
GET/virtualQueues/physicalCouponTickets/withInfo

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/physicalCouponTickets/withInfo
Response  200
HideShow
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 queue
POST/virtualQueues/physicalCouponTickets{?virtualQueueId,onlyActive}

Either ticketId or tokenTypeId and tokenValue must be specified.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/virtualQueues/physicalCouponTickets?virtualQueueId=230&onlyActive=true
URI Parameters
HideShow
virtualQueueId
number (optional) Example: 230
onlyActive
boolean (optional) Example: true
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 queue
GET/virtualQueues/physicalCouponTickets/{physicalCouponTicketId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/physicalCouponTickets/350
URI Parameters
HideShow
physicalCouponTicketId
number (required) Example: 350
Response  200
HideShow
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 queue
PUT/virtualQueues/physicalCouponTickets/{physicalCouponTicketId}/dequeue

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/physicalCouponTickets/350/dequeue
URI Parameters
HideShow
physicalCouponTicketId
number (required) Example: 350
Response  204
Response  400
HideShow
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"
  ]
}
Response  404
HideShow
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 entries
GET/virtualQueues/physicalCouponTickets/{physicalCouponTicketId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/physicalCouponTickets/350/log
URI Parameters
HideShow
physicalCouponTicketId
number (required) Example: 350
Response  200
HideShow
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 groups
GET/virtualQueues/couponGroups{?virtualQueueId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponGroups?virtualQueueId=230
URI Parameters
HideShow
virtualQueueId
number (required) Example: 230
Response  200
HideShow
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 group
POST/virtualQueues/couponGroups

These are created automatically when a coupon is created.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponGroups
Request
HideShow
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"
  ]
}
Response  201
HideShow
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"
  ]
}
Response  400
HideShow
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"
  ]
}
Response  404
HideShow
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 group
GET/virtualQueues/couponGroups/{virtualQueueCouponGroupId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponGroups/260
URI Parameters
HideShow
virtualQueueCouponGroupId
number (required) Example: 260
Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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 group
PUT/virtualQueues/couponGroups/{virtualQueueCouponGroupId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponGroups/260
URI Parameters
HideShow
virtualQueueCouponGroupId
number (required) Example: 260
Request
HideShow
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"
  ]
}
Response  204

Delete virtual queue coupon group
DELETE/virtualQueues/couponGroups/{virtualQueueCouponGroupId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/virtualQueues/couponGroups/260
URI Parameters
HideShow
virtualQueueCouponGroupId
number (required) Example: 260
Response  204

Virtual Queue Status Messages

List all virtual queue status messages
GET/virtualQueues/statusMessages

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/statusMessages
Response  200
HideShow
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 translations
GET/virtualQueues/statusMessages/translations

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/statusMessages/translations
Response  200
HideShow
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 message
POST/virtualQueues/statusMessages

Example URI

POST https://beautifulbjarne.venuemanager.net/api/virtualQueues/statusMessages
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 message
GET/virtualQueues/statusMessages/{statusMessageId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/statusMessages/300
URI Parameters
HideShow
statusMessageId
number (required) Example: 300
Response  200
HideShow
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 translations
GET/virtualQueues/statusMessages/translations

Example URI

GET https://beautifulbjarne.venuemanager.net/api/virtualQueues/statusMessages/translations
Response  200
HideShow
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 message
PUT/virtualQueues/statusMessages/{statusMessageId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/virtualQueues/statusMessages/300
URI Parameters
HideShow
statusMessageId
number (required) Example: 300
Request
HideShow
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"
  ]
}
Response  204

Delete virtual queue status message
DELETE/virtualQueues/statusMessages/{statusMessageId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/virtualQueues/statusMessages/300
URI Parameters
HideShow
statusMessageId
number (required) Example: 300
Response  204

Blacklist Profanity Terms

Profanity Blacklist

Blacklist profanity terms that are not allowed for use in virtual queue names.

List all profanity terms
GET/profanityBlacklist

Example URI

GET https://beautifulbjarne.venuemanager.net/api/profanityBlacklist
Response  200
HideShow
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 term
POST/profanityBlacklist

Example URI

POST https://beautifulbjarne.venuemanager.net/api/profanityBlacklist
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 terms
POST/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

POST https://beautifulbjarne.venuemanager.net/api/profanityBlacklist/multiple
Request
HideShow
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"
  ]
}
Response  204

Profanity Blacklist

Get profanity term
GET/profanityBlacklist/{profanityId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/profanityBlacklist/290
URI Parameters
HideShow
profanityId
number (required) Example: 290
Response  200
HideShow
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 term
PUT/profanityBlacklist/{profanityId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/profanityBlacklist/290
URI Parameters
HideShow
profanityId
number (required) Example: 290
Request
HideShow
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"
  ]
}
Response  204

Delete profanity term
DELETE/profanityBlacklist/{profanityId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/profanityBlacklist/290
URI Parameters
HideShow
profanityId
number (required) Example: 290
Response  204

Screens

Screens

Configuration of info screens used for displaying various information.

List all screens
GET/screens

Example URI

GET https://beautifulbjarne.venuemanager.net/api/screens
Response  200
HideShow
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 screen
POST/screens

Example URI

POST https://beautifulbjarne.venuemanager.net/api/screens
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 screen
GET/screens/{screenId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/screens/320
URI Parameters
HideShow
screenId
number (required) Example: 320
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/screens/code/XY12AB
URI Parameters
HideShow
screenCode
string (required) Example: XY12AB
Request
HideShow
Headers
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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 info
GET/screens/{screenId}/info

Example URI

GET https://beautifulbjarne.venuemanager.net/api/screens/320/info
URI Parameters
HideShow
screenId
number (required) Example: 320
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/screens/code/XY12AB/info
URI Parameters
HideShow
screenCode
string (required) Example: XY12AB
Request
HideShow
Headers
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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 screen
PUT/screens/{screenId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/screens/320
URI Parameters
HideShow
screenId
number (required) Example: 320
Request
HideShow
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"
  ]
}
Response  204

Delete screen
DELETE/screens/{screenId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/screens/320
URI Parameters
HideShow
screenId
number (required) Example: 320
Response  204

Screen files

List all files for a screen
GET/screens/{screenId}/files

Example URI

GET https://beautifulbjarne.venuemanager.net/api/screens/320/files
URI Parameters
HideShow
screenId
number (required) Example: 320
Response  200
HideShow
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 screen
PUT/screens/{screenId}/files/{fileId}

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/screens/320/files/30
URI Parameters
HideShow
screenId
number (required) Example: 320
fileId
number (required) Example: 30
Response  204

Remove file from screen
DELETE/screens/{screenId}/files/{fileId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/screens/320/files/30
URI Parameters
HideShow
screenId
number (required) Example: 320
fileId
number (required) Example: 30
Response  204

Text Groups

Text Groups

Groups of translations.

List all text groups
GET/textGroups

Example URI

GET https://beautifulbjarne.venuemanager.net/api/textGroups
Response  200
HideShow
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 group
POST/textGroups

Example URI

POST https://beautifulbjarne.venuemanager.net/api/textGroups
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 group
GET/textGroups/{textGroupId}{?area}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/textGroups/400?area=display_web_app
URI Parameters
HideShow
textGroupId
number (required) Example: 400
area
string (optional) Example: display_web_app

Only text groups with this area

Response  200
HideShow
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 group
PUT/textGroups/{textGroupId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/textGroups/400
URI Parameters
HideShow
textGroupId
number (required) Example: 400
Request
HideShow
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"
  ]
}
Response  204

Delete text group
DELETE/textGroups/{textGroupId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/textGroups/400
URI Parameters
HideShow
textGroupId
number (required) Example: 400
Response  204

Text group log entries
GET/textGroups/{textGroupId}/log

Example URI

GET https://beautifulbjarne.venuemanager.net/api/textGroups/400/log
URI Parameters
HideShow
textGroupId
number (required) Example: 400
Response  200
HideShow
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 labels
GET/textGroups/{textGroupId}/labelsWithParent

Example URI

GET https://beautifulbjarne.venuemanager.net/api/textGroups/400/labelsWithParent
URI Parameters
HideShow
textGroupId
number (required) Example: 400
Response  200
HideShow
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 translations
PUT/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

PUT https://beautifulbjarne.venuemanager.net/api/textGroups/400/labels
URI Parameters
HideShow
textGroupId
number (required) Example: 400
Request
HideShow
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"
            }
          }
        }
      }
    }
  }
}
Response  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

GET https://beautifulbjarne.venuemanager.net/api/textGroups/translations/vip_entrance
URI Parameters
HideShow
textGroupLabel
string (required) Example: vip_entrance
Response  200
HideShow
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 files
GET/files{?type}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/files?type=
URI Parameters
HideShow
type
enum (optional) 

Choices: stylesheet

Response  200
HideShow
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 file
POST/files

Example URI

POST https://beautifulbjarne.venuemanager.net/api/files
Request
HideShow
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"
  ]
}
Response  201
HideShow
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 file
GET/files/{fileId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/files/330
URI Parameters
HideShow
fileId
number (required) Example: 330
Response  200
HideShow
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

GET https://beautifulbjarne.venuemanager.net/api/files/code/XY12AB
URI Parameters
HideShow
fileCode
string (required) Example: XY12AB
Request
HideShow
Headers
X-Organizer: smukfest
X-Client: ScannerWebApp/1.0 (device #1)
Response  200
HideShow
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 file
PUT/files/{fileId}

The ID in the URL and the body must match.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/files/330
URI Parameters
HideShow
fileId
number (required) Example: 330
Request
HideShow
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"
  ]
}
Response  204

Delete file
DELETE/files/{fileId}

Example URI

DELETE https://beautifulbjarne.venuemanager.net/api/files/330
URI Parameters
HideShow
fileId
number (required) Example: 330
Response  204

Scannings

Scannings

Get scannings
GET/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

GET https://beautifulbjarne.venuemanager.net/api/scannings?venueId=10&zoneId=40&entranceId=50&scannerId=60&deviceId=70&deviceLaneId=70&eventId=30&accessTypeId=90&periodId=80&usageUnitId=170&ticketId=100&tokenId=120&tokenTypeId=110&tokenValue=04E56FFAE65380&cancelled=true&cancelledByUserId=10&statusCode=1&status=&ticketStatus=&follow=&from=2019-01-01T05:00:00+02:00&to=2019-01-01T05:00:00+02:00&limit=100&offset=0
URI Parameters
HideShow
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
Response  200
HideShow
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"
}
Response  400
HideShow
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 scanning
POST/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

POST https://beautifulbjarne.venuemanager.net/api/scannings
Request
HideShow
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"
  ]
}
Response  201
HideShow
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"
  ]
}

Scanning

Get scanning
GET/scannings/{scanningId}

Example URI

GET https://beautifulbjarne.venuemanager.net/api/scannings/111
URI Parameters
HideShow
scanningId
number (required) Example: 111
Response  200
HideShow
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"
  ]
}
Response  404
HideShow
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 scanning
PUT/scannings/{scanningId}/cancel

Reverse the effects of a previously created scanning.

Example URI

PUT https://beautifulbjarne.venuemanager.net/api/scannings/111/cancel
URI Parameters
HideShow
scanningId
number (required) Example: 111
Response  204
HideShow
Headers
Content-Type: application/json
Response  400
HideShow
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"
  ]
}
Response  1016
HideShow
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"
  ]
}

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

Connect
POST/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

POST https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/MessageConnect?exchangeName=&routingKey=Beautiful Bjarne&priority=1&replyTo=amq.gen-f0T7OfrkndaUccxNLi_Qyw&userId=VM_0109
URI Parameters
HideShow
exchangeName
string (required) 

Use the default exchange ‘’.

routingKey
string (required) Example: Beautiful Bjarne
priority
number (required) Example: 1

Use priority 1 for non-bulk messages.

replyTo
string (required) Example: amq.gen-f0T7OfrkndaUccxNLi_Qyw

Use the name of the client’s CallbackQueue.

userId
string (optional) Example: VM_0109

Use the username for the RabbitMQ connection.

Request
HideShow
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"
  ]
}
Response  204

Connect response

Connect response
GET/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

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/MessageConnectResponse
Response  200
HideShow
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 data
POST/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

POST https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/MessageFetchVenueData/?exchangeName=&routingKey=Beautiful Bjarne&priority=1&replyTo=amq.gen-f0T7OfrkndaUccxNLi_Qyw
URI Parameters
HideShow
exchangeName
string (required) 

Use the default exchange ‘’.

routingKey
string (required) Example: Beautiful Bjarne
priority
number (required) Example: 1

Use priority 1 for non-bulk messages.

replyTo
string (required) Example: amq.gen-f0T7OfrkndaUccxNLi_Qyw

Use the name of the client’s CallbackQueue.

Request
HideShow
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"
  ]
}
Response  204

Fetch venue data response

Fetch venue data response
GET/RabbitMQ-has-no-such-URL/MessageFetchVenueDataResponse

Please see description of usage in the section Fetch venue data.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/MessageFetchVenueDataResponse
Response  200
HideShow
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 data
POST/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

POST https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/MessageFetchEventData?exchangeName=&routingKey=Beautiful Bjarne&priority=1&replyTo=amq.gen-f0T7OfrkndaUccxNLi_Qyw
URI Parameters
HideShow
exchangeName
string (required) 

Use the default exchange ‘’.

routingKey
string (required) Example: Beautiful Bjarne
priority
number (required) Example: 1

Use priority 1 for non-bulk messages.

replyTo
string (required) Example: amq.gen-f0T7OfrkndaUccxNLi_Qyw

Use the name of the client’s CallbackQueue.

Request
HideShow
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"
  ]
}
Response  204

Fetch event data response

Fetch event data response
GET/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

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/MessageFetchEventDataResponse
Response  200
HideShow
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 device
GET/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

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/NewVenueForDevice
Response  200
HideShow
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

Ping
POST/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

POST https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/MessagePing?exchangeName=&routingKey=Beautiful Bjarne&priority=1&replyTo=amq.gen-f0T7OfrkndaUccxNLi_Qyw
URI Parameters
HideShow
exchangeName
string (required) 

Use the default exchange ‘’.

routingKey
string (required) Example: Beautiful Bjarne
priority
number (required) Example: 1

Use priority 1 for non-bulk messages.

replyTo
string (required) Example: amq.gen-f0T7OfrkndaUccxNLi_Qyw

Use the name of the client’s CallbackQueue.

Request
HideShow
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"
  ]
}
Response  204

Pong

Pong
GET/RabbitMQ-has-no-such-URL/Pong

The servers response to a Ping message.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Pong
Response  200
HideShow
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 scanning
POST/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

POST https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/MessageNewScanning?exchangeName=&routingKey=Beautiful Bjarne&priority=0&delivery_mode=2
URI Parameters
HideShow
exchangeName
string (required) 

Use the default exchange ‘’.

routingKey
string (required) Example: Beautiful Bjarne
priority
number (required) Example: 0

Use priority 0 for bulk messages.

delivery_mode
number (required) Example: 2

Marks the message as persistent.

Request
HideShow
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"
  ]
}
Response  204

Report status

Report status
POST/RabbitMQ-has-no-such-URL/MessageDeviceStatus{?exchangeName,routingKey,priority}

Periodically the device should report the device status.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/MessageDeviceStatus?exchangeName=&routingKey=Beautiful Bjarne&priority=0
URI Parameters
HideShow
exchangeName
string (required) 

Use the default exchange ‘’.

routingKey
string (required) Example: Beautiful Bjarne
priority
number (required) Example: 0

Use priority 0 for bulk messages.

Request
HideShow
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"
  ]
}
Response  204

Report change to device lane selected mode

Report change to device lane selected mode
POST/RabbitMQ-has-no-such-URL/MessageDeviceLaneSelectedMode{?exchangeName,routingKey,priority}

The selected mode for a lane was changed on the device.

Example URI

POST https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/MessageDeviceLaneSelectedMode?exchangeName=&routingKey=Beautiful Bjarne&priority=1
URI Parameters
HideShow
exchangeName
string (required) 

Use the default exchange ‘’.

routingKey
string (required) Example: Beautiful Bjarne
priority
number (required) Example: 1

Use priority 1 for non-bulk messages.

Request
HideShow
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"
  ]
}
Response  204

Report locker controller device channel state changes

Report locker controller device channel state changes
POST/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

POST https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/UpdateLockerControllerDeviceChannels?exchangeName=&routingKey=Beautiful Bjarne&priority=0
URI Parameters
HideShow
exchangeName
string (required) 

Use the default exchange ‘’.

routingKey
string (required) Example: Beautiful Bjarne
priority
number (required) Example: 0

Use priority 0 for bulk messages.

Request
HideShow
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"
  ]
}
Response  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: Feedback
GET/RabbitMQ-has-no-such-URL/Feedback

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Feedback
Response  200
HideShow
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: TokenType
GET/RabbitMQ-has-no-such-URL/TokenType

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/TokenType
Response  200
HideShow
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: Organizer
GET/RabbitMQ-has-no-such-URL/Organizer

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Organizer
Response  200
HideShow
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: OrganizerConfigurationValue
GET/RabbitMQ-has-no-such-URL/OrganizerConfigurationValue

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/OrganizerConfigurationValue
Response  200
HideShow
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: DayType
GET/RabbitMQ-has-no-such-URL/DayType

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/DayType
Response  200
HideShow
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: DayTypePeriod
GET/RabbitMQ-has-no-such-URL/DayTypePeriod

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/DayTypePeriod
Response  200
HideShow
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: UsageUnit
GET/RabbitMQ-has-no-such-URL/UsageUnit

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/UsageUnit
Response  200
HideShow
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: UsageUnitConversionRate
GET/RabbitMQ-has-no-such-URL/UsageUnitConversionRate

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/UsageUnitConversionRate
Response  200
HideShow
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: Venue
GET/RabbitMQ-has-no-such-URL/Venue

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Venue
Response  200
HideShow
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: Zone
GET/RabbitMQ-has-no-such-URL/Zone

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Zone
Response  200
HideShow
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: ZoneCost
GET/RabbitMQ-has-no-such-URL/ZoneCost

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/ZoneCost
Response  200
HideShow
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: ZonePopulation
GET/RabbitMQ-has-no-such-URL/ZonePopulation

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/ZonePopulation
Response  200
HideShow
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: Entrance

Message: Entrance
GET/RabbitMQ-has-no-such-URL/Entrance

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Entrance
Response  200
HideShow
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: Device
GET/RabbitMQ-has-no-such-URL/Device

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Device
Response  200
HideShow
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: DeviceLane
GET/RabbitMQ-has-no-such-URL/DeviceLane

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/DeviceLane
Response  200
HideShow
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: Scanner
GET/RabbitMQ-has-no-such-URL/Scanner

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Scanner
Response  200
HideShow
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: LockerGroup
GET/RabbitMQ-has-no-such-URL/LockerGroup

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/LockerGroup
Response  200
HideShow
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: LockerSection
GET/RabbitMQ-has-no-such-URL/LockerSection

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/LockerSection
Response  200
HideShow
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: LockerBox
GET/RabbitMQ-has-no-such-URL/LockerBox

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/LockerBox
Response  200
HideShow
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: LockerBooking
GET/RabbitMQ-has-no-such-URL/LockerBooking

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/LockerBooking
Response  200
HideShow
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: Event
GET/RabbitMQ-has-no-such-URL/Event

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Event
Response  200
HideShow
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: EventEntranceRule
GET/RabbitMQ-has-no-such-URL/EventEntranceRule

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/EventEntranceRule
Response  200
HideShow
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: Calendar
GET/RabbitMQ-has-no-such-URL/Calendar

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Calendar
Response  200
HideShow
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: CalendarDay
GET/RabbitMQ-has-no-such-URL/CalendarDay

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/CalendarDay
Response  200
HideShow
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: CalendarDayPeriod
GET/RabbitMQ-has-no-such-URL/CalendarDayPeriod

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/CalendarDayPeriod
Response  200
HideShow
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: Period
GET/RabbitMQ-has-no-such-URL/Period

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Period
Response  200
HideShow
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: AccessType
GET/RabbitMQ-has-no-such-URL/AccessType

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/AccessType
Response  200
HideShow
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: Ticket
GET/RabbitMQ-has-no-such-URL/Ticket

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Ticket
Response  200
HideShow
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: Ticket2AccessType
GET/RabbitMQ-has-no-such-URL/Ticket2AccessType

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Ticket2AccessType
Response  200
HideShow
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: TicketUsageCount
GET/RabbitMQ-has-no-such-URL/TicketUsageCount

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/TicketUsageCount
Response  200
HideShow
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: Token
GET/RabbitMQ-has-no-such-URL/Token

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Token
Response  200
HideShow
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: Zone2Period2AccessType
GET/RabbitMQ-has-no-such-URL/Zone2Period2AccessType

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Zone2Period2AccessType
Response  200
HideShow
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: VirtualQueue
GET/RabbitMQ-has-no-such-URL/VirtualQueue

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/VirtualQueue
Response  200
HideShow
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: VirtualQueueStatus
GET/RabbitMQ-has-no-such-URL/VirtualQueueStatus

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/VirtualQueueStatus
Response  200
HideShow
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: VirtualQueueCoupon
GET/RabbitMQ-has-no-such-URL/VirtualQueueCoupon

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/VirtualQueueCoupon
Response  200
HideShow
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: VirtualQueueCouponTicket
GET/RabbitMQ-has-no-such-URL/VirtualQueueCouponTicket

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/VirtualQueueCouponTicket
Response  200
HideShow
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: VirtualQueuePhysicalCouponTicket
GET/RabbitMQ-has-no-such-URL/VirtualQueuePhysicalCouponTicket

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/VirtualQueuePhysicalCouponTicket
Response  200
HideShow
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: UnlockLockerControllerDeviceChannel
GET/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

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/UnlockLockerControllerDeviceChannel
Response  200
HideShow
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: LedControllerSetRGB
GET/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

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/LedControllerSetRGB
Response  200
HideShow
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: Scannings
GET/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

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Scanning
Response  200
HideShow
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,
  "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"
    },
    "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",
    "msgType"
  ]
}

Message: DeviceEventStatus

Message: DeviceEventStatus
GET/RabbitMQ-has-no-such-URL/DeviceEventStatus

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/DeviceEventStatus
Response  200
HideShow
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: DeviceInfo
GET/RabbitMQ-has-no-such-URL/DeviceInfo

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/DeviceInfo
Response  200
HideShow
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: DeviceStateChange
GET/RabbitMQ-has-no-such-URL/DeviceStateChange

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/DeviceStateChange
Response  200
HideShow
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: DeviceLaneInfo
GET/RabbitMQ-has-no-such-URL/DeviceLaneInfo

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/DeviceLaneInfo
Response  200
HideShow
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: OrganizerConfiguration
GET/RabbitMQ-has-no-such-URL/OrganizerConfiguration

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/OrganizerConfiguration
Response  200
HideShow
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: ProfanityBlacklist
GET/RabbitMQ-has-no-such-URL/ProfanityBlacklist

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/ProfanityBlacklist
Response  200
HideShow
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: Screen
GET/RabbitMQ-has-no-such-URL/Screen

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/Screen
Response  200
HideShow
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: VirtualQueueStatusMessage
GET/RabbitMQ-has-no-such-URL/VirtualQueueStatusMessage

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/VirtualQueueStatusMessage
Response  200
HideShow
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: LockerController
GET/RabbitMQ-has-no-such-URL/LockerController

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/LockerController
Response  200
HideShow
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: LockerControllerDevice
GET/RabbitMQ-has-no-such-URL/LockerControllerDevice

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/LockerControllerDevice
Response  200
HideShow
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: LockerControllerDeviceChannel
GET/RabbitMQ-has-no-such-URL/LockerControllerDeviceChannel

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/LockerControllerDeviceChannel
Response  200
HideShow
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: LockerControllerDeviceChannelUpdatePublish
GET/RabbitMQ-has-no-such-URL/LockerControllerDeviceChannelUpdatePublish

Example URI

GET https://beautifulbjarne.venuemanager.net/api/RabbitMQ-has-no-such-URL/LockerControllerDeviceChannelUpdatePublish
Response  200
HideShow
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 Parks
GET/daza/parks{?userId}

Get a list of DAZA parks. If userId is provided only the users single park is returned.

Example URI

GET https://beautifulbjarne.venuemanager.net/api/daza/parks?userId=1
URI Parameters
HideShow
userId
number (optional) Example: 1
Response  200
HideShow
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 Import
POST/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

POST https://beautifulbjarne.venuemanager.net/api/daza/tickets
Request
HideShow
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"
}
Response  200
HideShow
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 Scanning
POST/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

POST https://beautifulbjarne.venuemanager.net/api/daza/scan/AALZOO002
URI Parameters
HideShow
barcode
string (required) Example: AALZOO002
Request
HideShow
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"
  ]
}
Response  200
HideShow
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"
  ]
}

Generated by aglio on 11 Apr 2024