{ "openapi": "3.1.0", "info": { "title": "Qminder API", "version": "1.0", "description": "The Qminder API allows you to integrate queue management into your own applications." }, "servers": [ { "url": "https://api.qminder.com" } ], "components": { "securitySchemes": { "sec0": { "type": "apiKey", "in": "header", "name": "X-Qminder-REST-API-Key", "x-default": "yourbusinessapikey" } }, "schemas": { "DaySchedule": { "type": "object", "description": "Schedule for a single day. Either set businessHours or closed.", "properties": { "businessHours": { "type": "array", "description": "Time ranges when the location is open.", "items": { "$ref": "#/components/schemas/TimeRange" } }, "closed": { "type": "boolean", "description": "If true, the location is closed this day." } } }, "TimeRange": { "type": "object", "description": "A time range with opening and closing times.", "properties": { "opens": { "$ref": "#/components/schemas/TimeOfDay" }, "closes": { "$ref": "#/components/schemas/TimeOfDay" } } }, "TimeOfDay": { "type": "object", "description": "A time of day.", "properties": { "hours": { "type": "integer", "minimum": 0, "maximum": 23, "description": "Hour (0-23)." }, "minutes": { "type": "integer", "minimum": 0, "maximum": 59, "description": "Minutes (0-59)." } } }, "LocationInputField": { "type": "object", "description": "An input field to create with the location. Uses the same schema as POST /input-fields, but without `location` (auto-set) and `visibleForLines` (lines don't exist yet).", "required": [ "id", "type", "isMandatoryBeforeAdded", "isMandatoryBeforeServed", "isMandatoryInRemoteSignIn", "isVisibleInWaitingDrawer", "isVisibleInServingDrawer", "showInRemoteSignIn" ], "properties": { "id": { "type": "string", "format": "uuid", "description": "Client-generated UUID for the input field." }, "type": { "type": "string", "enum": [ "FIRST_NAME", "LAST_NAME", "EMAIL", "PHONE_NUMBER", "TEXT", "SELECT", "URL", "DATE", "NUMERIC" ], "description": "Input field type." }, "title": { "type": "string", "description": "Display title. Required for TEXT, SELECT, URL, DATE, and NUMERIC types." }, "isMandatoryBeforeAdded": { "type": "boolean", "description": "Must be filled before ticket is added." }, "isMandatoryBeforeServed": { "type": "boolean", "description": "Must be filled before ticket is served." }, "isMandatoryInRemoteSignIn": { "type": "boolean", "description": "Must be filled in remote sign-in." }, "isVisibleInWaitingDrawer": { "type": "boolean", "description": "Shown in the waiting drawer." }, "isVisibleInServingDrawer": { "type": "boolean", "description": "Shown in the serving drawer." }, "showInRemoteSignIn": { "type": "boolean", "description": "Show in remote sign-in. Always treated as false for URL fields." }, "visitorFacingTitle": { "type": "string", "description": "Title shown to visitors. Available for TEXT, SELECT, DATE, and NUMERIC types." }, "multiSelect": { "type": "boolean", "description": "Allow multiple selections. Required for SELECT type." }, "options": { "type": "array", "description": "Select options. Required for SELECT type.", "items": { "type": "object", "required": [ "id", "title" ], "properties": { "id": { "type": "string", "format": "uuid", "description": "Client-generated UUID for the option." }, "title": { "type": "string", "description": "Option display title." }, "color": { "type": "string", "description": "Option color in hex format (#RRGGBB)." } } } }, "constraints": { "type": "object", "description": "Numeric constraints. Available for NUMERIC type.", "required": [ "scale" ], "properties": { "min": { "type": "number", "description": "Minimum allowed value." }, "max": { "type": "number", "description": "Maximum allowed value." }, "scale": { "type": "integer", "description": "Number of decimal places." } } }, "translations": { "type": "array", "description": "Translations. Available for TEXT, SELECT, URL, DATE, and NUMERIC types. Referenced language codes must be included in the location's languages field.", "items": { "type": "object", "required": [ "languageCode" ], "properties": { "languageCode": { "type": "string", "description": "Language code (e.g. \"fr\", \"es\")." }, "title": { "type": "string", "description": "Translated field title." }, "visitorFacingTitle": { "type": "string", "description": "Translated visitor-facing title." } } } }, "isRequiredInAppointments": { "type": "boolean", "description": "Whether required in appointments. Available for LAST_NAME and EMAIL types." } } }, "LineRequest": { "type": "object", "description": "A line (service) to create with the location.", "required": [ "name", "color" ], "properties": { "name": { "type": "string", "maxLength": 30, "description": "Line name (max 30 characters, trimmed)." }, "color": { "type": "string", "enum": [ "VIOLET", "LAVENDER", "MARSHMALLOW", "TEAL", "MINT", "CORAL", "YELLOW", "ROSE", "INDIGO", "BLUE" ], "description": "Line color." }, "disabled": { "type": "boolean", "description": "Whether the line starts disabled (default: false)." }, "translations": { "type": "array", "description": "Name translations for multi-language support. Referenced language codes must be included in the location's languages field.", "items": { "$ref": "#/components/schemas/LineTranslationRequest" } } } }, "LineTranslationRequest": { "type": "object", "description": "A name translation for a line.", "required": [ "languageCode" ], "properties": { "languageCode": { "type": "string", "description": "Language code (e.g. \"fr\", \"es\")." }, "name": { "type": "string", "maxLength": 30, "description": "Translated line name (max 30 characters). Can be null as a placeholder.", "nullable": true } } } } }, "security": [ { "sec0": [] } ], "paths": { "/locations": { "post": { "summary": "Create a location", "description": "Creates a new location in the account.", "operationId": "create-location", "parameters": [ { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "latitude", "longitude", "address", "country" ], "properties": { "name": { "type": "string", "maxLength": 30, "description": "Location name (max 30 characters)." }, "latitude": { "type": "number", "minimum": -90, "maximum": 90, "description": "Geographical latitude (-90 to 90)." }, "longitude": { "type": "number", "minimum": -180, "maximum": 180, "description": "Geographical longitude (-180 to 180)." }, "address": { "type": "string", "maxLength": 300, "description": "Postal address (max 300 characters)." }, "country": { "type": "string", "pattern": "^[A-Z]{2}$", "description": "ISO 3166-1 alpha-2 country code (e.g. \"US\", \"CA\")." }, "languages": { "type": "array", "items": { "type": "string" }, "description": "Languages available at this location. An array of ISO 639 / BCP 47 language codes (e.g. \"en\", \"et\", \"fr-CA\"). Must include \"en\". No duplicates allowed. Order is preserved. Defaults to [\"en\"] if omitted." }, "inputFields": { "type": "array", "description": "Custom input fields to create with the location. If omitted, three default fields are created (first name, last name, phone number). Must include at least one FIRST_NAME and one LAST_NAME field. Each field uses the same schema as POST /input-fields, but without location and visibleForLines.", "maxItems": 50, "items": { "$ref": "#/components/schemas/LocationInputField" } }, "lines": { "type": "array", "description": "Custom lines (queues) to create with the location. If omitted, two default lines are created (\"Main Service\" and \"Information\"). Uses the same schema as POST /locations/{id}/lines, but without appointmentSettings.", "minItems": 1, "maxItems": 50, "items": { "$ref": "#/components/schemas/LineRequest" } }, "openingHours": { "type": "object", "description": "Opening hours configuration. If omitted, the location defaults to 24/7 (00:00–23:59 every day).", "properties": { "regular": { "type": "object", "description": "Weekly schedule with keys: mon, tue, wed, thu, fri, sat, sun.", "properties": { "mon": { "$ref": "#/components/schemas/DaySchedule" }, "tue": { "$ref": "#/components/schemas/DaySchedule" }, "wed": { "$ref": "#/components/schemas/DaySchedule" }, "thu": { "$ref": "#/components/schemas/DaySchedule" }, "fri": { "$ref": "#/components/schemas/DaySchedule" }, "sat": { "$ref": "#/components/schemas/DaySchedule" }, "sun": { "$ref": "#/components/schemas/DaySchedule" } } }, "exceptions": { "type": "array", "description": "Date-specific overrides.", "items": { "type": "object", "required": [ "date" ], "properties": { "date": { "type": "string", "format": "date", "description": "ISO 8601 date (e.g. \"2026-05-01\")." }, "closed": { "type": "boolean", "description": "If true, the location is closed on this date." }, "closedReason": { "type": "string", "description": "Reason for closure (e.g. \"Holiday\")." }, "businessHours": { "type": "array", "description": "Custom hours for this date.", "items": { "$ref": "#/components/schemas/TimeRange" } } } } } } } } }, "example": { "name": "SF City Hall", "latitude": 37.7792792, "longitude": -122.4214304, "address": "1 Dr Carlton B Goodlett Pl, San Francisco, CA 94102, United States", "country": "US", "languages": [ "en", "et", "fr-CA" ], "inputFields": [ { "id": "550e8400-e29b-41d4-a716-446655440001", "type": "FIRST_NAME", "isMandatoryBeforeAdded": false, "isMandatoryBeforeServed": false, "isMandatoryInRemoteSignIn": false, "isVisibleInWaitingDrawer": true, "isVisibleInServingDrawer": true, "showInRemoteSignIn": true }, { "id": "550e8400-e29b-41d4-a716-446655440002", "type": "LAST_NAME", "isMandatoryBeforeAdded": false, "isMandatoryBeforeServed": false, "isMandatoryInRemoteSignIn": false, "isVisibleInWaitingDrawer": true, "isVisibleInServingDrawer": true, "showInRemoteSignIn": true }, { "id": "550e8400-e29b-41d4-a716-446655440003", "type": "TEXT", "title": "Reason for visit", "isMandatoryBeforeAdded": true, "isMandatoryBeforeServed": false, "isMandatoryInRemoteSignIn": false, "isVisibleInWaitingDrawer": true, "isVisibleInServingDrawer": true, "showInRemoteSignIn": true } ], "lines": [ { "name": "Customer Support", "color": "TEAL" }, { "name": "Returns", "color": "CORAL" } ], "openingHours": { "regular": { "mon": { "businessHours": [ { "opens": { "hours": 9, "minutes": 0 }, "closes": { "hours": 17, "minutes": 0 } } ] }, "tue": { "businessHours": [ { "opens": { "hours": 9, "minutes": 0 }, "closes": { "hours": 17, "minutes": 0 } } ] }, "wed": { "businessHours": [ { "opens": { "hours": 9, "minutes": 0 }, "closes": { "hours": 17, "minutes": 0 } } ] }, "thu": { "businessHours": [ { "opens": { "hours": 9, "minutes": 0 }, "closes": { "hours": 17, "minutes": 0 } } ] }, "fri": { "businessHours": [ { "opens": { "hours": 9, "minutes": 0 }, "closes": { "hours": 17, "minutes": 0 } } ] }, "sat": { "closed": true }, "sun": { "closed": true } }, "exceptions": [ { "date": "2026-05-01", "closed": true, "closedReason": "Holiday" } ] } } } } }, "responses": { "201": { "description": "Location created successfully", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "The ID of the created location.", "example": "12345" } } }, "example": { "id": "12345" } } } }, "400": { "description": "Validation error - invalid input data" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X POST https://api.qminder.com/locations \\\n -H \"X-Qminder-REST-API-Key: KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"name\": \"SF City Hall\",\n \"latitude\": 37.7792792,\n \"longitude\": -122.4214304,\n \"address\": \"1 Dr Carlton B Goodlett Pl, San Francisco, CA 94102, United States\",\n \"country\": \"US\"\n }'" } ], "samples-languages": [ "curl" ] }, "tags": [ "Locations" ] } }, "/locations/{locationId}": { "patch": { "summary": "Edit a location", "description": "Updates an existing location. Only include the fields you want to change. Omitted fields remain unchanged.", "operationId": "edit-location", "parameters": [ { "name": "locationId", "in": "path", "description": "ID of the location to update.", "required": true, "schema": { "type": "integer", "format": "int64", "default": 12345 } }, { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "description": "Location properties to update. All fields are optional — only include the fields you want to change.", "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 30, "description": "Location name (max 30 characters). Must not be blank if provided." }, "latitude": { "type": "number", "minimum": -90, "maximum": 90, "description": "Geographical latitude (-90 to 90)." }, "longitude": { "type": "number", "minimum": -180, "maximum": 180, "description": "Geographical longitude (-180 to 180)." } } }, "example": { "name": "SF City Hall", "latitude": 37.7792792, "longitude": -122.4214304 } } } }, "responses": { "200": { "description": "Location updated successfully" }, "400": { "description": "Validation error - invalid input data", "content": { "application/json": { "examples": { "TimezoneConflict": { "summary": "Coordinates would change the location's timezone", "value": { "code": "invalid_location_timezone", "message": "The provided coordinates would change the location's timezone, which is not allowed" } } } } } }, "404": { "description": "Location not found", "content": { "application/json": { "example": { "code": "resource_missing", "message": "Locations with following ids were not found: [12345]" } } } } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X PATCH https://api.qminder.com/locations/12345 \\\n -H \"X-Qminder-REST-API-Key: KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"name\": \"SF City Hall\",\n \"latitude\": 37.7792792,\n \"longitude\": -122.4214304\n }'" } ], "samples-languages": [ "curl" ] }, "tags": [ "Locations" ] } }, "/v1/locations/{id}": { "get": { "summary": "Get details of a location", "description": "", "operationId": "get-details-of-a-location", "parameters": [ { "name": "id", "in": "path", "description": "ID of a Location", "schema": { "type": "integer", "format": "int32", "default": 123 }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"id\": 57175,\n \"name\": \"White House\",\n \"latitude\": 38.8976805,\n \"longitude\": -77.0387185,\n \"country\": \"us\",\n \"address\": \"1600 Pennsylvania Ave NW, Washington, DC 20500, United States\",\n \"selectingDeskMandatory\": true,\n \"timezoneOffset\": -240\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "id": { "type": "integer", "example": 57175, "default": 0 }, "name": { "type": "string", "example": "White House" }, "latitude": { "type": "number", "example": 38.8976805, "default": 0 }, "longitude": { "type": "number", "example": -77.0387185, "default": 0 }, "country": { "type": "string", "example": "us" }, "address": { "type": "string", "example": "1600 Pennsylvania Ave NW, Washington, DC 20500, United States" }, "selectingDeskMandatory": { "type": "boolean", "example": true, "default": true }, "timezoneOffset": { "type": "integer", "example": -240, "default": 0 } } } } } } }, "deprecated": false, "tags": [ "Locations" ] } }, "/v1/locations/{id}/desks": { "get": { "summary": "Get desks of a Location", "description": "", "operationId": "get-desks-of-a-location", "parameters": [ { "name": "id", "in": "path", "description": "ID of a Location", "schema": { "type": "integer", "format": "int32", "default": 123 }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"desks\": [\n {\n \"id\": 159909,\n \"name\": \"Front desk\"\n },\n {\n \"id\": 159533,\n \"name\": \"Cabinet 1\"\n },\n {\n \"id\": 159534,\n \"name\": \"Cabinet 2\"\n },\n {\n \"id\": 1595643,\n \"name\": \"Cabinet 3\"\n }\n ]\n }" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "desks": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer", "example": 159909, "default": 0 }, "name": { "type": "string", "example": "Front desk" } } } } } } } } } }, "deprecated": false, "tags": [ "Locations" ] } }, "/v1/locations/{id}/lines": { "post": { "summary": "Create a line", "description": "Creates a new line (queue) within a location.", "operationId": "create-line", "parameters": [ { "name": "id", "in": "path", "description": "ID of a Location", "schema": { "type": "integer", "format": "int32", "default": 123 }, "required": true }, { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "color" ], "properties": { "name": { "type": "string", "maxLength": 30, "description": "Line name (max 30 characters)." }, "color": { "type": "string", "enum": [ "VIOLET", "LAVENDER", "MARSHMALLOW", "TEAL", "MINT", "CORAL", "YELLOW", "ROSE", "INDIGO", "BLUE" ], "description": "Line color." }, "disabled": { "type": "boolean", "description": "Whether the line starts disabled. Default: false." }, "translations": { "type": "array", "description": "Name translations for multi-language support.", "items": { "type": "object", "required": [ "languageCode" ], "properties": { "languageCode": { "type": "string", "description": "Language code (e.g. \"et\", \"fi\", \"de\")." }, "name": { "type": "string", "maxLength": 30, "description": "Translated line name (max 30 characters)." } } } }, "appointmentSettings": { "type": "object", "description": "Appointment configuration for this line.", "required": [ "enabled", "duration" ], "properties": { "enabled": { "type": "boolean", "description": "Whether appointments are enabled for this line." }, "duration": { "type": "integer", "enum": [ 15, 30, 45, 60, 90, 120, 180 ], "description": "Default appointment duration in minutes." } } } } }, "example": { "name": "Customer Support", "color": "TEAL", "translations": [ { "languageCode": "fr", "name": "Service client" } ], "appointmentSettings": { "enabled": true, "duration": 30 } } } } }, "responses": { "201": { "description": "Line created successfully", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "The ID of the created line.", "example": "12345" } } }, "example": { "id": "12345" } } } }, "400": { "description": "Validation error - invalid input data" }, "409": { "description": "A line with the same name already exists in this location" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X POST https://api.qminder.com/v1/locations/123/lines \\\n -H \"X-Qminder-REST-API-Key: KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"name\": \"Customer Support\",\n \"color\": \"TEAL\"\n }'" } ], "samples-languages": [ "curl" ] }, "tags": [ "Lines" ] }, "get": { "summary": "Get list of lines", "description": "", "operationId": "get-list-of-lines", "parameters": [ { "name": "id", "in": "path", "description": "ID of a location", "schema": { "type": "integer", "format": "int32", "default": 123 }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"data\": [\n {\n \"id\": 1827,\n \"name\": \"Example Line\",\n \"location\": 123,\n \"color\": \"#ff00ff\",\n \"disabled\": false\n },\n {\n \"id\": 1829,\n \"name\": \"Example Line 2\",\n \"location\": 123,\n \"color\": \"#ff00ff\",\n \"disabled\": false\n }\n ]\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer", "example": 1827, "default": 0 }, "name": { "type": "string", "example": "Example Line" }, "location": { "type": "integer", "example": 123, "default": 0 }, "color": { "type": "string", "example": "#ff00ff" }, "disabled": { "type": "boolean", "example": false, "default": true } } } } } } } } } }, "deprecated": false, "tags": [ "Lines" ] } }, "/v1/locations/{id}/users": { "get": { "summary": "Getting a list of users", "description": "", "operationId": "getting-a-list-of-users", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the Location to query", "schema": { "type": "integer", "format": "int32" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"data\": [\n {\n \"id\": 891,\n \"email\": \"test-user@qminder.com\",\n \"firstName\": \"Test\",\n \"lastName\": \"User\",\n \"selectedLocation\": 4022\n }\n ]\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer", "example": 891, "default": 0 }, "email": { "type": "string", "example": "test-user@qminder.com" }, "firstName": { "type": "string", "example": "Test" }, "lastName": { "type": "string", "example": "User" }, "selectedLocation": { "type": "integer", "example": 4022, "default": 0 } } } } } } } } } }, "deprecated": false, "tags": [ "Users" ] } }, "/v1/lines/{id}": { "post": { "summary": "Editing a line", "description": "", "operationId": "editing-a-line", "parameters": [ { "name": "id", "in": "path", "description": "ID of a Line", "schema": { "type": "integer", "format": "int32", "default": 123 }, "required": true }, { "name": "Content-Type", "in": "header", "schema": { "type": "string", "default": "application/x-www-form-urlencoded" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the Line. The maximum length is 30 characters.", "default": "My New Cool Line" }, "color": { "type": "string", "enum": [ "VIOLET", "LAVENDER", "MARSHMALLOW", "TEAL", "MINT", "CORAL", "YELLOW", "ROSE", "INDIGO", "BLUE" ], "description": "The color of the Line. Must be one of the predefined color values.", "default": "VIOLET" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the Line. The maximum length is 30 characters.", "default": "My New Cool Line" }, "color": { "type": "string", "enum": [ "VIOLET", "LAVENDER", "MARSHMALLOW", "TEAL", "MINT", "CORAL", "YELLOW", "ROSE", "INDIGO", "BLUE" ], "description": "The color of the Line. Must be one of the predefined color values.", "default": "VIOLET" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl --request POST \\\n --url https://api.qminder.com/v1/lines/123 \\\n --header 'X-Qminder-REST-API-Key: yourbusinessapikey' \\\n -d \"name=My New Cool Line\" \\\n -d \"color=VIOLET\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Lines" ] }, "get": { "summary": "Get details of a line", "description": "", "operationId": "get-details-of-a-line", "parameters": [ { "name": "id", "in": "path", "description": "ID of a line", "schema": { "type": "integer", "format": "int32", "default": 1827 }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"id\": 1827,\n \"name\": \"Example Line\",\n \"location\": 4052,\n \"color\": \"#ff00ff\",\n \"disabled\": false\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "id": { "type": "integer", "example": 1827, "default": 0 }, "name": { "type": "string", "example": "Example Line" }, "location": { "type": "integer", "example": 4052, "default": 0 }, "color": { "type": "string", "example": "#ff00ff" }, "disabled": { "type": "boolean", "example": false, "default": true } } } } } } }, "deprecated": false, "tags": [ "Lines" ] }, "delete": { "summary": "Deletion of a line", "description": "", "operationId": "deletion", "parameters": [ { "name": "id", "in": "path", "description": "ID of a line", "schema": { "type": "integer", "format": "int32", "default": 123 }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } } }, "deprecated": false, "tags": [ "Lines" ] } }, "/v1/lines/{id}/enable": { "post": { "summary": "Enabling a line", "description": "", "operationId": "enabling-a-line", "parameters": [ { "name": "id", "in": "path", "schema": { "type": "integer", "format": "int32", "default": 123 }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } } }, "deprecated": false, "tags": [ "Lines" ] } }, "/v1/lines/{id}/disable": { "post": { "summary": "Disabling a line", "description": "", "operationId": "disabling-a-line", "parameters": [ { "name": "id", "in": "path", "description": "ID of a line", "schema": { "type": "integer", "format": "int32", "default": 123 }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } }, "400": { "description": "400", "content": { "text/plain": { "examples": { "Result": { "value": "" } } } } } }, "deprecated": false, "tags": [ "Lines" ] } }, "/v1/lines/{id}/archive": { "post": { "summary": "Archiving a line", "description": "", "operationId": "archiving-a-line", "parameters": [ { "name": "id", "in": "path", "description": "ID of a line", "schema": { "type": "integer", "format": "int32", "default": 123 }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } } }, "deprecated": false, "tags": [ "Lines" ] } }, "/v1/lines/{id}/unarchive": { "post": { "summary": "Unarchiving a line", "description": "", "operationId": "unarchiving-a-line", "parameters": [ { "name": "id", "in": "path", "description": "ID of a line", "schema": { "type": "integer", "format": "int32", "default": 123 }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } } }, "deprecated": false, "tags": [ "Lines" ] } }, "/input-fields": { "post": { "summary": "Create an input field", "description": "Creates a new input field for a location. The client must generate a UUID for the input field ID. EMAIL and PHONE_NUMBER types are singletons — only one of each is allowed per location.", "operationId": "create-input-field", "parameters": [ { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "id", "location", "type", "isMandatoryBeforeAdded", "isMandatoryBeforeServed", "isMandatoryInRemoteSignIn", "isVisibleInWaitingDrawer", "isVisibleInServingDrawer", "showInRemoteSignIn", "visibleForLines" ], "properties": { "id": { "type": "string", "format": "uuid", "description": "Client-generated UUID for the input field." }, "location": { "type": "object", "required": [ "id" ], "description": "Location reference.", "properties": { "id": { "type": "integer", "description": "Location ID." } } }, "type": { "type": "string", "enum": [ "FIRST_NAME", "LAST_NAME", "EMAIL", "PHONE_NUMBER", "TEXT", "SELECT", "URL", "DATE", "NUMERIC" ], "description": "Input field type." }, "title": { "type": "string", "description": "Display title. Required for TEXT, SELECT, URL, DATE, and NUMERIC types." }, "isMandatoryBeforeAdded": { "type": "boolean", "description": "Must be filled before ticket is added." }, "isMandatoryBeforeServed": { "type": "boolean", "description": "Must be filled before ticket is served." }, "isMandatoryInRemoteSignIn": { "type": "boolean", "description": "Must be filled in remote sign-in." }, "isVisibleInWaitingDrawer": { "type": "boolean", "description": "Shown in the waiting drawer." }, "isVisibleInServingDrawer": { "type": "boolean", "description": "Shown in the serving drawer." }, "showInRemoteSignIn": { "type": "boolean", "description": "Show in remote sign-in. Always treated as false for URL fields." }, "visibleForLines": { "type": "array", "description": "Lines this field applies to. Empty array means all lines.", "items": { "type": "object", "properties": { "id": { "type": "integer", "description": "Line ID." } } } }, "visitorFacingTitle": { "type": "string", "description": "Title shown to visitors. Available for TEXT, SELECT, DATE, and NUMERIC types." }, "multiSelect": { "type": "boolean", "description": "Allow multiple selections. Required for SELECT type." }, "options": { "type": "array", "description": "Select options. Required for SELECT type.", "items": { "type": "object", "required": [ "id", "title" ], "properties": { "id": { "type": "string", "format": "uuid", "description": "Client-generated UUID for the option." }, "title": { "type": "string", "description": "Option display title." }, "color": { "type": "string", "description": "Option color." } } } }, "constraints": { "type": "object", "description": "Numeric constraints. Available for NUMERIC type.", "required": [ "scale" ], "properties": { "min": { "type": "number", "description": "Minimum allowed value." }, "max": { "type": "number", "description": "Maximum allowed value." }, "scale": { "type": "integer", "description": "Number of decimal places." } } }, "translations": { "type": "array", "description": "Translations. Available for TEXT, SELECT, URL, DATE, and NUMERIC types.", "items": { "type": "object", "required": [ "languageCode" ], "properties": { "languageCode": { "type": "string", "description": "Language code (e.g. \"fr\", \"es\")." }, "title": { "type": "string", "description": "Translated field title." }, "visitorFacingTitle": { "type": "string", "description": "Translated visitor-facing title." } } } }, "isRequiredInAppointments": { "type": "boolean", "description": "Whether required in appointments. Available for LAST_NAME and EMAIL types." } } }, "example": { "id": "550e8400-e29b-41d4-a716-446655440000", "location": { "id": 12345 }, "type": "TEXT", "title": "Reason for visit", "isMandatoryBeforeAdded": true, "isMandatoryBeforeServed": false, "isMandatoryInRemoteSignIn": false, "isVisibleInWaitingDrawer": true, "isVisibleInServingDrawer": true, "showInRemoteSignIn": true, "visibleForLines": [] } } } }, "responses": { "201": { "description": "Input field created successfully. Response body is empty." }, "400": { "description": "Bad request — missing or invalid fields", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "string", "description": "Error code." }, "message": { "type": "string", "description": "Error message." } } }, "examples": { "duplicate_options": { "summary": "Duplicate SELECT option titles", "value": { "code": "duplicate_items_in_request", "message": "Duplicate option titles" } }, "blank_translation": { "summary": "Blank translation title", "value": { "code": "parameter_invalid_blank", "message": "Translation title must not be blank" } } } } } }, "404": { "description": "Location not found", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" } } }, "example": { "code": "resource_missing", "message": "Location not found" } } } }, "409": { "description": "Conflict — duplicate input field ID, or singleton type already exists", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" } } }, "example": { "code": "input_field_duplicate", "message": "Input field with this ID already exists" } } } } }, "tags": [ "Input Fields" ] } }, "/input-fields/{inputFieldId}": { "patch": { "summary": "Edit an input field", "description": "Updates an existing input field. Only include fields you want to change — omitted fields remain unchanged. Set `visitorFacingTitle` to `null` to clear it.", "operationId": "edit-input-field", "parameters": [ { "name": "inputFieldId", "in": "path", "description": "UUID of the input field to update.", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "description": "Input field properties to update. All fields are optional — only include fields you want to change.", "content": { "application/json": { "schema": { "type": "object", "properties": { "title": { "type": "string", "maxLength": 50, "description": "Display title. Only for TEXT, SELECT, URL, DATE, and NUMERIC types." }, "visitorFacingTitle": { "type": "string", "maxLength": 200, "nullable": true, "description": "Title shown to visitors. Set to `null` to clear. Only for TEXT, SELECT, DATE, and NUMERIC types." }, "isVisibleInWaitingDrawer": { "type": "boolean", "description": "Shown in the waiting drawer." }, "isVisibleInServingDrawer": { "type": "boolean", "description": "Shown in the serving drawer." }, "isMandatoryBeforeAdded": { "type": "boolean", "description": "Must be filled before ticket is added." }, "isMandatoryBeforeServed": { "type": "boolean", "description": "Must be filled before ticket is served." }, "isMandatoryInRemoteSignIn": { "type": "boolean", "description": "Must be filled in remote sign-in." }, "showInRemoteSignIn": { "type": "boolean", "description": "Show in remote sign-in. Always treated as false for URL fields." }, "visibleForLines": { "type": "array", "description": "Lines this field applies to. Empty array means all lines.", "items": { "type": "object", "properties": { "id": { "type": "integer", "description": "Line ID." } } } }, "multiSelect": { "type": "boolean", "description": "Allow multiple selections. Only for SELECT type." }, "options": { "type": "array", "description": "Select options. Only for SELECT type. Options are matched by ID — existing options are updated, new IDs are added, missing IDs are removed.", "items": { "type": "object", "required": [ "id", "title" ], "properties": { "id": { "type": "string", "format": "uuid", "description": "Option UUID. Use an existing ID to update, or a new UUID to add." }, "title": { "type": "string", "description": "Option display title." }, "color": { "type": "string", "description": "Option color." } } } }, "constraints": { "type": "object", "description": "Numeric constraints. Only for NUMERIC type.", "properties": { "min": { "type": "number", "description": "Minimum allowed value." }, "max": { "type": "number", "description": "Maximum allowed value." }, "scale": { "type": "integer", "description": "Number of decimal places." } } }, "translations": { "type": "array", "description": "Translations. Available for TEXT, SELECT, URL, DATE, and NUMERIC types. Replaces all existing translations.", "items": { "type": "object", "required": [ "languageCode" ], "properties": { "languageCode": { "type": "string", "description": "Language code (e.g. \"fr\", \"es\")." }, "title": { "type": "string", "description": "Translated field title." }, "visitorFacingTitle": { "type": "string", "description": "Translated visitor-facing title." } } } } } }, "example": { "title": "Visit reason", "isVisibleInWaitingDrawer": false, "isMandatoryBeforeServed": true } } } }, "responses": { "200": { "description": "Input field updated successfully" }, "400": { "description": "Invalid request", "content": { "application/json": { "examples": { "InvalidArguments": { "summary": "Type-specific field set on wrong type", "value": { "code": "invalid_arguments", "message": "title is not applicable for this input field type" } }, "DuplicateOptions": { "summary": "SELECT options have duplicate titles", "value": { "code": "duplicate_items_in_request", "message": "Duplicate option titles" } }, "BlankTitle": { "summary": "Title is blank", "value": { "code": "parameter_invalid_blank", "message": "Title must not be blank" } } } } } }, "404": { "description": "Input field not found", "content": { "application/json": { "example": { "code": "resource_missing", "message": "Input field not found" } } } } }, "tags": [ "Input Fields" ] } }, "/tickets": { "post": { "summary": "Create a ticket", "description": "Creates a new ticket in the specified line.", "operationId": "create-ticket", "parameters": [ { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "lineId", "firstName" ], "properties": { "lineId": { "type": "string", "description": "ID of the line to create the ticket in." }, "firstName": { "type": "string", "minLength": 2, "maxLength": 50, "description": "Visitor's first name (2-50 characters)." }, "lastName": { "type": "string", "maxLength": 50, "description": "Visitor's last name (max 50 characters)." }, "phoneNumber": { "type": "string", "pattern": "^(\\+)?([0-9]){5,20}$", "description": "Phone number with optional + prefix (5-20 digits). Example: +12125551234" }, "email": { "type": "string", "maxLength": 100, "description": "Visitor's email address." }, "languageCode": { "type": "string", "minLength": 2, "maxLength": 5, "default": "en", "description": "Language code for the visitor (default: en)." }, "source": { "type": "string", "enum": [ "MANUAL", "NAME", "MICROSITE" ], "default": "MANUAL", "description": "Source of ticket creation. MANUAL = created by clerk, NAME = iPad Sign-in, MICROSITE = Visit Planner." }, "fields": { "type": "array", "description": "Custom input fields for the ticket. See [Input Fields query](/reference/queries/input-fields) to discover available IDs.", "items": { "type": "object", "required": [ "inputFieldId" ], "properties": { "inputFieldId": { "type": "string", "format": "uuid", "description": "UUID of the input field." }, "value": { "type": "string", "maxLength": 500, "description": "Value for text/URL input fields (max 500 characters)." }, "optionIds": { "type": "array", "items": { "type": "string", "format": "uuid" }, "description": "UUIDs of selected options for select-type input fields." } } } }, "labels": { "type": "array", "description": "Labels to attach to the ticket.", "items": { "type": "object", "required": [ "value" ], "properties": { "value": { "type": "string", "description": "Label text." } } } } } }, "example": { "lineId": "12345", "firstName": "John", "lastName": "Doe", "phoneNumber": "+12125551234", "email": "john@example.com", "languageCode": "en", "source": "MANUAL", "fields": [ { "inputFieldId": "550e8400-e29b-41d4-a716-446655440000", "value": "Consultation" } ], "labels": [ { "value": "VIP" } ] } } } }, "responses": { "201": { "description": "Ticket created successfully", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "Internal ticket ID.", "example": "226859" }, "publicId": { "type": "string", "description": "Public-facing ticket ID.", "example": "A-42" } } }, "example": { "id": "226859", "publicId": "A-42" } } } }, "400": { "description": "Validation error - invalid input data" }, "404": { "description": "Line, input fields, or language not found" }, "409": { "description": "Line is disabled or archived" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X POST https://api.qminder.com/tickets \\\n -H \"X-Qminder-REST-API-Key: KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"lineId\": \"12345\",\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"phoneNumber\": \"+12125551234\",\n \"email\": \"john@example.com\"\n }'" } ], "samples-languages": [ "curl" ] }, "tags": [ "Tickets" ] } }, "/v1/tickets/search": { "get": { "summary": "Searching tickets", "description": "", "operationId": "searching-tickets", "parameters": [ { "name": "location", "in": "query", "description": "Search tickets only in the given Location.", "schema": { "type": "integer", "format": "int32" } }, { "name": "line", "in": "query", "schema": { "type": "integer", "format": "int32", "default": null } }, { "name": "status", "in": "query", "description": "Search tickets with only the given status. Multiple statuses can be searched by separating them with a comma. \"NEW\" will return tickets that are in queue, and have not been called. \"CALLED\" will return tickets that are currently being served. \"SERVED\" will return tickets that have been served. \"CANCELLED_BY_CLERK\" will return tickets that have been removed from queue.", "schema": { "type": "string" } }, { "name": "caller", "in": "query", "description": "Search tickets that have been called by the given user ID. Both \"CALLED\" and \"SERVED\" tickets will be returned, unless status is also specified.", "schema": { "type": "string" } }, { "name": "minCreated", "in": "query", "description": "Search tickets which have been created after the given timestamp. The timestamp can be in ISO 8601 format, eg \"2020-05-03T00:00:00Z\". Alternatively, the timestamp can be a Unix timestamp, eg 1588767798.", "schema": { "type": "string", "format": "date-time" } }, { "name": "maxCreated", "in": "query", "description": "Search tickets which have been created before the given timestamp. The timestamp can be in ISO 8601 format, eg \"2020-05-03T00:00:00Z\". Alternatively, the timestamp can be a Unix timestamp, eg 1588767798.", "schema": { "type": "string", "format": "date-time" } }, { "name": "minCalled", "in": "query", "description": "Search tickets which have been called after the given timestamp. The timestamp can be in ISO 8601 format, eg \"2020-05-03T00:00:00Z\". Alternatively, the timestamp can be a Unix timestamp, eg 1588767798.", "schema": { "type": "string", "format": "date-time" } }, { "name": "maxCalled", "in": "query", "description": "Search tickets which have been called before the given timestamp. The timestamp can be in ISO 8601 format, eg \"2020-05-03T00:00:00Z\". Alternatively, the timestamp can be a Unix timestamp, eg 1588767798.", "schema": { "type": "string", "format": "date-time" } }, { "name": "limit", "in": "query", "description": "Limit search results to the specified amount of tickets. With a limit of 100, only the 100 first results will be returned. The limit has to be between 1 and 20000.", "schema": { "type": "integer", "format": "int32" } }, { "name": "order", "in": "query", "description": "Order search results according to a ticket parameter. Order is specified using two words in one string, for example \"id ASC\". Valid order directions: ASC, DESC Valid ordering parameters: id, created, called, served", "schema": { "type": "string" } }, { "name": "responseScope", "in": "query", "description": "Include additional data in the search results. Use multiple response scopes by separating them with a comma. Valid response scopes are: \"MESSAGES\" - include SMS messages with the response \"INTERACTIONS\" - include interaction data with the response \"CONNECTED_TICKETS\" - include connected tickets (other visits of the same person)", "schema": { "type": "string" } } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"data\": [\n {\n \"id\": \"51999102\",\n \"status\": \"SERVED\",\n \"source\": \"MANUAL\",\n \"line\": 88100,\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"orderAfter\": \"2015-04-29T12:29:40.701Z\",\n \"created\": {\n \"date\": \"2016-04-29T12:29:40.701Z\"\n },\n \"called\": {\n \"date\": \"2016-05-05T14:05:29Z\",\n \"caller\": 15144,\n \"desk\": 3\n },\n \"served\": {\n \"date\": \"2016-05-05T14:05:34Z\"\n },\n \"assigned\": {\n \"assigner\": 15100,\n \"assignee\": 15144\n },\n \"extra\": [\n {\n \"title\": \"Notes\",\n \"value\": \"assistance required\"\n }\n ],\n \"labels\": [\n {\n \"value\": \"VIP\",\n \"color\": \"FF00FF\"\n }\n ],\n \"interactions\": [\n {\n \"start\": \"2016-05-05T14:05:29Z\",\n \"end\": \"2016-05-05T14:05:34Z\",\n \"line\": 88100,\n \"user\": 15144\n }\n ],\n \"messages\": [\n {\n \"created\": {\n \"date\": \"2017-06-15T18:43:41Z\"\n },\n \"body\": \"Hello Jane! You are now in the queue. We will let you know when it's your turn.\",\n \"type\": \"OUTGOING\",\n \"status\": \"DELIVERED\"\n }\n ]\n }\n ]\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "example": "51999102" }, "status": { "type": "string", "example": "SERVED" }, "source": { "type": "string", "example": "MANUAL" }, "line": { "type": "integer", "example": 88100, "default": 0 }, "firstName": { "type": "string", "example": "Jane" }, "lastName": { "type": "string", "example": "Doe" }, "orderAfter": { "type": "string", "example": "2015-04-29T12:29:40.701Z" }, "created": { "type": "object", "properties": { "date": { "type": "string", "example": "2016-04-29T12:29:40.701Z" } } }, "called": { "type": "object", "properties": { "date": { "type": "string", "example": "2016-05-05T14:05:29Z" }, "caller": { "type": "integer", "example": 15144, "default": 0 }, "desk": { "type": "integer", "example": 3, "default": 0 } } }, "served": { "type": "object", "properties": { "date": { "type": "string", "example": "2016-05-05T14:05:34Z" } } }, "assigned": { "type": "object", "properties": { "assigner": { "type": "integer", "example": 15100, "default": 0 }, "assignee": { "type": "integer", "example": 15144, "default": 0 } } }, "extra": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "example": "Notes" }, "value": { "type": "string", "example": "assistance required" } } } }, "labels": { "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string", "example": "VIP" }, "color": { "type": "string", "example": "FF00FF" } } } }, "interactions": { "type": "array", "items": { "type": "object", "properties": { "start": { "type": "string", "example": "2016-05-05T14:05:29Z" }, "end": { "type": "string", "example": "2016-05-05T14:05:34Z" }, "line": { "type": "integer", "example": 88100, "default": 0 }, "user": { "type": "integer", "example": 15144, "default": 0 } } } }, "messages": { "type": "array", "items": { "type": "object", "properties": { "created": { "type": "object", "properties": { "date": { "type": "string", "example": "2017-06-15T18:43:41Z" } } }, "body": { "type": "string", "example": "Hello Jane! You are now in the queue. We will let you know when it's your turn." }, "type": { "type": "string", "example": "OUTGOING" }, "status": { "type": "string", "example": "DELIVERED" } } } } } } } } } } } } }, "deprecated": false, "tags": [ "Tickets" ] } }, "/v1/tickets/count": { "post": { "summary": "Counting tickets", "description": "", "operationId": "counting-tickets", "parameters": [ { "name": "location", "in": "query", "description": "Count tickets only in the given Location.", "schema": { "type": "integer", "format": "int32" } }, { "name": "line", "in": "query", "description": "Count tickets only in the given Line.", "schema": { "type": "integer", "format": "int32" } }, { "name": "status", "in": "query", "description": "Count tickets with only the given status. Multiple statuses can be searched by separating them with a comma. \"NEW\" will return tickets that are in queue, and have not been called. \"CALLED\" will return tickets that are currently being served. \"SERVED\" will return tickets that have been served. \"CANCELLED_BY_CLERK\" will return tickets that have been removed from queue.", "schema": { "type": "string" } }, { "name": "caller", "in": "query", "description": "Count tickets that have been called by the given user ID. Both \"CALLED\" and \"SERVED\" tickets will be returned, unless status is also specified.", "schema": { "type": "string" } }, { "name": "minCreated", "in": "query", "description": "Count tickets which have been created after the given timestamp. The timestamp can be in ISO 8601 format, eg \"2020-05-03T00:00:00Z\". Alternatively, the timestamp can be a Unix timestamp, eg 1588767798.", "schema": { "type": "string", "format": "date-time" } }, { "name": "maxCreated", "in": "query", "description": "Count tickets which have been created before the given timestamp. The timestamp can be in ISO 8601 format, eg \"2020-05-03T00:00:00Z\". Alternatively, the timestamp can be a Unix timestamp, eg 1588767798.", "schema": { "type": "string", "format": "date-time" } }, { "name": "minCalled", "in": "query", "description": "Count tickets which have been called before the given timestamp. The timestamp can be in ISO 8601 format, eg \"2020-05-03T00:00:00Z\". Alternatively, the timestamp can be a Unix timestamp, eg 1588767798.", "schema": { "type": "string", "format": "date-time" } }, { "name": "maxCalled", "in": "query", "description": "Count tickets which have been called before the given timestamp. The timestamp can be in ISO 8601 format, eg \"2020-05-03T00:00:00Z\". Alternatively, the timestamp can be a Unix timestamp, eg 1588767798.", "schema": { "type": "string", "format": "date-time" } } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"count\": 59\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "count": { "type": "integer", "example": 59, "default": 0 } } } } } } }, "deprecated": false, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/call": { "post": { "summary": "Calling a ticket", "description": "", "operationId": "calling-a-ticket", "parameters": [ { "name": "id", "in": "path", "description": "ID of the ticket to call", "schema": { "type": "string" }, "required": true }, { "name": "desk", "in": "query", "description": "Optional. The desk where the ticket will be called.", "schema": { "type": "integer", "format": "int32" } }, { "name": "user", "in": "query", "description": "Optional. The user who is calling the ticket.", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"id\": \"51999102\",\n \"status\": \"CALLED\",\n \"source\": \"MANUAL\",\n \"line\": 88100,\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"orderAfter\": \"2017-05-17T14:01:35.736Z\",\n \"created\": {\n \"date\": \"2021-09-13T13:49:54.735Z\"\n },\n \"labels\": [\n {\n \"value\": \"VIP\",\n \"color\": \"FF00FF\"\n }\n ],\n \"extra\": [\n {\n \"title\": \"Notes\",\n \"value\": \"assistance required\"\n }\n ],\n \"called\": {\n \"date\": \"2021-09-22T08:11:18.572Z\",\n \"caller\": 15144\n },\n \"assigned\": {\n \"assigner\": 15100,\n \"assignee\": 15144\n }\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "id": { "type": "string", "example": "51999102" }, "status": { "type": "string", "example": "CALLED" }, "source": { "type": "string", "example": "MANUAL" }, "line": { "type": "integer", "example": 88100, "default": 0 }, "firstName": { "type": "string", "example": "Jane" }, "lastName": { "type": "string", "example": "Doe" }, "orderAfter": { "type": "string", "example": "2017-05-17T14:01:35.736Z" }, "created": { "type": "object", "properties": { "date": { "type": "string", "example": "2021-09-13T13:49:54.735Z" } } }, "labels": { "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string", "example": "VIP" }, "color": { "type": "string", "example": "FF00FF" } } } }, "extra": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "example": "Notes" }, "value": { "type": "string", "example": "assistance required" } } } }, "called": { "type": "object", "properties": { "date": { "type": "string", "example": "2021-09-22T08:11:18.572Z" }, "caller": { "type": "integer", "example": 15144, "default": 0 } } }, "assigned": { "type": "object", "properties": { "assigner": { "type": "integer", "example": 15100, "default": 0 }, "assignee": { "type": "integer", "example": 15144, "default": 0 } } } } } } } } }, "deprecated": false, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/recall": { "post": { "summary": "Re-calling a ticket", "description": "", "operationId": "re-calling-a-ticket", "parameters": [ { "name": "id", "in": "path", "description": "ID of a ticket to recall", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "tags": [ "Tickets" ] } }, "/tickets/{ticketId}": { "patch": { "summary": "Editing a ticket", "description": "Updates ticket fields such as visitor name, contact information, line assignment, and language preference. Only include fields you want to change - omitted fields remain unchanged. Set a field to `null` to clear its value.", "operationId": "editing-a-ticket", "parameters": [ { "name": "ticketId", "in": "path", "description": "ID of the ticket to update", "schema": { "type": "string" }, "required": true }, { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "description": "Ticket fields to update. All fields are optional - only include fields you want to change.", "content": { "application/json": { "schema": { "type": "object", "properties": { "firstName": { "type": "string", "description": "The visitor's first name. Must be 2-50 characters. Cannot be null or empty if included.", "minLength": 2, "maxLength": 50, "example": "John" }, "lastName": { "type": "string", "description": "The visitor's last name. Maximum 50 characters. Set to null to clear.", "maxLength": 50, "nullable": true, "example": "Doe" }, "email": { "type": "string", "format": "email", "description": "The visitor's email address. Maximum 100 characters. Set to null to clear.", "maxLength": 100, "nullable": true, "example": "john.doe@example.com" }, "phoneNumber": { "type": "string", "pattern": "^(\\+)?([0-9]){5,20}$", "description": "The visitor's phone number. 5-20 digits with optional + prefix. Set to null to clear.", "nullable": true, "example": "+12125551234" }, "line": { "type": "string", "pattern": "^[0-9]+$", "description": "ID of the line to move the ticket to. Must be a valid line in the same location.", "example": "12345" }, "languageCode": { "type": "string", "description": "The visitor's preferred language code (e.g., \"en\", \"es\"). Must be 2-5 characters.", "minLength": 2, "maxLength": 5, "example": "en" } } } } } }, "responses": { "200": { "description": "Ticket updated successfully" }, "400": { "description": "Invalid request - validation failed", "content": { "application/json": { "examples": { "InvalidFirstName": { "summary": "First name too short", "value": { "statusCode": 400, "message": "First name must not be empty or blank" } }, "InvalidPhoneNumber": { "summary": "Invalid phone number format", "value": { "statusCode": 400, "errors": [ { "phoneNumber": "must match \"^(\\+)?([0-9]){5,20}$\"" } ] } } } } } }, "404": { "description": "Ticket or line not found", "content": { "application/json": { "examples": { "TicketNotFound": { "summary": "Ticket does not exist", "value": { "message": "Ticket with id 123456 not found" } }, "LineNotFound": { "summary": "Target line does not exist", "value": { "message": "Line with id 789 not found" } } } } } }, "409": { "description": "Conflict - line is disabled or archived", "content": { "application/json": { "examples": { "LineDisabled": { "summary": "Target line is disabled", "value": { "message": "Line with id 789 is disabled" } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X PATCH https://api.qminder.com/tickets/14848 \\\n -H \"X-Qminder-REST-API-Key: YOUR_API_KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"firstName\": \"John\",\n \"lastName\": \"Smith\",\n \"email\": \"john.smith@example.com\",\n \"phoneNumber\": \"+12125551234\"\n }'" }, { "language": "typescript", "code": "const response = await fetch('https://api.qminder.com/tickets/14848', {\n method: 'PATCH',\n headers: {\n 'X-Qminder-REST-API-Key': 'YOUR_API_KEY',\n 'X-Qminder-API-Version': '2020-09-01',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n firstName: 'John',\n lastName: 'Smith',\n email: 'john.smith@example.com',\n phoneNumber: '+12125551234'\n })\n});\n\nif (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n}" } ], "samples-languages": [ "curl", "typescript" ] }, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/markserved": { "post": { "summary": "Marking a ticket as served", "description": "", "operationId": "marking-a-ticket-as-served", "parameters": [ { "name": "id", "in": "path", "description": "ID of a ticket", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/marknoshow": { "post": { "summary": "Marking a ticket as no-show", "description": "", "operationId": "marking-a-ticket-as-no-show", "parameters": [ { "name": "id", "in": "path", "description": "ID of a ticket", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/cancel": { "post": { "summary": "Removing a ticket from the queue", "description": "", "operationId": "removing-a-ticket-from-the-queue", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to remove from queue.", "schema": { "type": "string" }, "required": true }, { "name": "user", "in": "query", "description": "The ID of the user who removed the ticket.", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/returntoqueue": { "post": { "summary": "Returning a ticket to the queue", "description": "", "operationId": "returning-a-ticket-to-the-queue", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to return to queue.", "schema": { "type": "string" }, "required": true }, { "name": "user", "in": "query", "description": "The ID of the user to return to queue.", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "position", "in": "query", "description": "The position the called ticket should be in the queue. Accepted values: \"FIRST\" = the ticket will be first in line. \"LAST\" = the ticket will be last in queue.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/forward": { "post": { "summary": "Forwarding a ticket", "description": "", "operationId": "forwarding-a-ticket", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to forward.", "schema": { "type": "string" }, "required": true } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "user", "line" ], "properties": { "user": { "type": "integer", "description": "The ID of the user who forwarded the ticket.", "format": "int32" }, "line": { "type": "integer", "description": "The ID of the Line to forward the ticket to.", "format": "int32" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "user", "line" ], "properties": { "user": { "type": "integer", "description": "The ID of the user who forwarded the ticket.", "format": "int32" }, "line": { "type": "integer", "description": "The ID of the Line to forward the ticket to.", "format": "int32" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl \\\n -X POST \\\n https://api.qminder.com/v1/tickets/14849/forward \\\n -d \"user=14142\" \\\n -d \"line=58190\" \\\n -H \"X-Qminder-REST-API-Key: KEY\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/labels/add": { "post": { "summary": "Adding a label", "description": "", "operationId": "adding-a-label", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to add the label to", "schema": { "type": "string" }, "required": true } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "value", "user" ], "properties": { "value": { "type": "string", "description": "The text of the label. Up to 50 characters." }, "user": { "type": "integer", "description": "The ID of the user who added the label.", "format": "int32" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "value", "user" ], "properties": { "value": { "type": "string", "description": "The text of the label. Up to 50 characters." }, "user": { "type": "integer", "description": "The ID of the user who added the label.", "format": "int32" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl \\\n -X POST \\\n https://api.qminder.com/v1/tickets/14849/labels/add \\\n -d \"value=Important\" \\\n -d \"user=123\" \\\n -H \"X-Qminder-REST-API-Key: KEY\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/labels/remove": { "post": { "summary": "Removing a label", "description": "", "operationId": "removing-a-label", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to remove the label from", "schema": { "type": "string" }, "required": true } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "value", "user" ], "properties": { "value": { "type": "string", "description": "The label text to remove." }, "user": { "type": "integer", "description": "The ID of the user who removed the label.", "format": "int32" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "value", "user" ], "properties": { "value": { "type": "string", "description": "The label text to remove." }, "user": { "type": "integer", "description": "The ID of the user who removed the label.", "format": "int32" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl \\\n -X POST \\\n https://api.qminder.com/v1/tickets/14849/labels/remove \\\n -d \"value=Important\" \\\n -d \"user=123\" \\\n -H \"X-Qminder-REST-API-Key: KEY\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/assign": { "post": { "summary": "Assigning a ticket to a user", "description": "", "operationId": "assigning-a-ticket-to-a-user", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to assign.", "schema": { "type": "string" }, "required": true } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "assigner", "assignee" ], "properties": { "assigner": { "type": "integer", "description": "The ID of the user who assigned the ticket.", "format": "int32" }, "assignee": { "type": "integer", "description": "The ID of the user that the ticket will be assigned to.", "format": "int32" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "assigner", "assignee" ], "properties": { "assigner": { "type": "integer", "description": "The ID of the user who assigned the ticket.", "format": "int32" }, "assignee": { "type": "integer", "description": "The ID of the user that the ticket will be assigned to.", "format": "int32" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl \\\n -X POST \\\n https://api.qminder.com/v1/tickets/14849/assign \\\n -d \"assigner=213\" \\\n -d \"assignee=123\" \\\n -H \"X-Qminder-REST-API-Key: KEY\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/unassign": { "post": { "summary": "Un-assigning a ticket", "description": "", "operationId": "un-assigning-a-ticket", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to assign.", "schema": { "type": "string" }, "required": true } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "user": { "type": "integer", "description": "The ID of the user who un-assigned the ticket.", "format": "int32" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "properties": { "user": { "type": "integer", "description": "The ID of the user who un-assigned the ticket.", "format": "int32" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl \\\n -X POST \\\n https://api.qminder.com/v1/tickets/14849/unassign \\\n -d \"user=213\" \\\n -H \"X-Qminder-REST-API-Key: KEY\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/reorder": { "post": { "summary": "Reordering a ticket", "description": "", "operationId": "reordering-a-ticket", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to reorder.", "schema": { "type": "string" }, "required": true } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "after": { "type": "integer", "description": "The current ticket will be placed after this ID. If unset, then the ticket will be reordered to be first in the queue.", "format": "int32" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "properties": { "after": { "type": "integer", "description": "The current ticket will be placed after this ID. If unset, then the ticket will be reordered to be first in the queue.", "format": "int32" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl \\\n -X POST \\\n https://api.qminder.com/v1/tickets/14850/reorder \\\n -d \"after=14889\" \\\n -H \"X-Qminder-REST-API-Key: KEY\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}": { "get": { "summary": "Get details of a ticket", "description": "", "operationId": "get-details-of-a-ticket", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to get details of", "schema": { "type": "string" }, "required": true }, { "name": "responseScope", "in": "query", "description": "Include additional data in the search results. Use multiple response scopes by separating them with a comma. Valid response scopes are: \"MESSAGES\" - include SMS messages with the response \"INTERACTIONS\" - include interaction data with the response \"CONNECTED_TICKETS\" - include connected tickets (other visits of the same person)", "schema": { "type": "string" } } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"id\": \"13429905\",\n \"status\": \"CALLED\",\n \"source\": \"NAME\",\n \"line\": 47466,\n \"firstName\": \"Johnny\",\n \"lastName\": \"Bravo\",\n \"phoneNumber\": 13186190204,\n \"created\": {\n \"date\": \"2016-08-01T15:27:45.057Z\"\n },\n \"called\": {\n \"date\": \"2020-05-06T13:13:16Z\",\n \"caller\": 13860\n }\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "id": { "type": "string", "example": "13429905" }, "status": { "type": "string", "example": "CALLED" }, "source": { "type": "string", "example": "NAME" }, "line": { "type": "integer", "example": 47466, "default": 0 }, "firstName": { "type": "string", "example": "Johnny" }, "lastName": { "type": "string", "example": "Bravo" }, "phoneNumber": { "type": "integer", "example": 13186190204, "default": 0 }, "created": { "type": "object", "properties": { "date": { "type": "string", "example": "2016-08-01T15:27:45.057Z" } } }, "called": { "type": "object", "properties": { "date": { "type": "string", "example": "2020-05-06T13:13:16Z" }, "caller": { "type": "integer", "example": 13860, "default": 0 } } } } } } } } }, "deprecated": false, "tags": [ "Tickets" ] } }, "/v1/tickets/{id}/messages": { "get": { "summary": "Get messages of a ticket", "description": "", "operationId": "get-messages-of-a-ticket", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to load messages for.", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"messages\": [\n {\n \"created\": {\n \"date\": \"2017-04-12T16:27:57Z\"\n },\n \"body\": \"It's your turn!\",\n \"type\": \"OUTGOING\",\n \"status\": \"SENT\",\n \"userId\": 15000\n },\n {\n \"created\": {\n \"date\": \"2017-04-17T11:50:13Z\"\n },\n \"body\": \"Thank you!\",\n \"type\": \"INCOMING\",\n \"status\": \"NEW\"\n }\n ]\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "messages": { "type": "array", "items": { "type": "object", "properties": { "created": { "type": "object", "properties": { "date": { "type": "string", "example": "2017-04-12T16:27:57Z" } } }, "body": { "type": "string", "example": "It's your turn!" }, "type": { "type": "string", "example": "OUTGOING" }, "status": { "type": "string", "example": "SENT" }, "userId": { "type": "integer", "example": 15000, "default": 0 } } } } } } } } } }, "deprecated": false, "tags": [ "Tickets" ] }, "post": { "summary": "Sending an SMS message", "description": "", "operationId": "sending-an-sms-message", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the ticket to send the message to.", "schema": { "type": "string" }, "required": true } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string", "description": "The message to send. The message should be URL-encoded." }, "user": { "type": "integer", "description": "The user who sent the message.", "format": "int32" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string", "description": "The message to send. The message should be URL-encoded." }, "user": { "type": "integer", "description": "The user who sent the message.", "format": "int32" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"result\": \"success\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "result": { "type": "string", "example": "success" } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl \\\n -X POST \\\n https://api.qminder.com/v1/tickets/226859/messages \\\n -d \"message=Hello%2C%20it%27s%20your%20turn%21\" \\\n -d \"user=123\" \\\n -H \"X-Qminder-REST-API-Key: KEY\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Tickets" ] } }, "/v1/tickets/{ticketId}/fields/{inputFieldId}": { "post": { "summary": "Save ticket input field value", "description": "Saves or updates a custom input field value on a ticket. Use `value` for text fields or `optionIds` for select-type fields.", "operationId": "save-ticket-field", "parameters": [ { "name": "ticketId", "in": "path", "description": "ID of the ticket", "required": true, "schema": { "type": "string" } }, { "name": "inputFieldId", "in": "path", "description": "UUID of the input field", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "value": { "type": "string", "maxLength": 500, "description": "Text value for text or URL input fields (max 500 characters)." }, "optionIds": { "type": "array", "items": { "type": "string", "format": "uuid" }, "description": "UUIDs of selected options for select-type input fields." } } }, "examples": { "textField": { "summary": "Text field value", "value": { "value": "Customer needs wheelchair access" } }, "selectField": { "summary": "Select field options", "value": { "optionIds": [ "550e8400-e29b-41d4-a716-446655440000" ] } } } } } }, "responses": { "200": { "description": "Input field value saved successfully" }, "400": { "description": "Both value and options are null, or invalid options provided" }, "404": { "description": "Ticket or input field not found" }, "409": { "description": "Ticket and input field are from different locations" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X POST https://api.qminder.com/v1/tickets/14848/fields/550e8400-e29b-41d4-a716-446655440000 \\\n -H \"X-Qminder-REST-API-Key: YOUR_API_KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"value\": \"Customer needs wheelchair access\"}'" }, { "language": "typescript", "code": "await fetch('https://api.qminder.com/v1/tickets/14848/fields/550e8400-e29b-41d4-a716-446655440000', {\n method: 'POST',\n headers: {\n 'X-Qminder-REST-API-Key': 'YOUR_API_KEY',\n 'X-Qminder-API-Version': '2020-09-01',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n value: 'Customer needs wheelchair access'\n })\n});" } ], "samples-languages": [ "curl", "typescript" ] }, "tags": [ "Tickets" ] }, "delete": { "summary": "Remove ticket input field value", "description": "Removes a custom input field value from a ticket. Cannot remove mandatory input fields.", "operationId": "remove-ticket-field", "parameters": [ { "name": "ticketId", "in": "path", "description": "ID of the ticket", "required": true, "schema": { "type": "string" } }, { "name": "inputFieldId", "in": "path", "description": "UUID of the input field", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "responses": { "200": { "description": "Input field value removed successfully" }, "400": { "description": "Mandatory input field cannot be removed" }, "404": { "description": "Ticket or input field not found" }, "409": { "description": "Ticket and input field are from different locations" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X DELETE https://api.qminder.com/v1/tickets/14848/fields/550e8400-e29b-41d4-a716-446655440000 \\\n -H \"X-Qminder-REST-API-Key: YOUR_API_KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\"" }, { "language": "typescript", "code": "await fetch('https://api.qminder.com/v1/tickets/14848/fields/550e8400-e29b-41d4-a716-446655440000', {\n method: 'DELETE',\n headers: {\n 'X-Qminder-REST-API-Key': 'YOUR_API_KEY',\n 'X-Qminder-API-Version': '2020-09-01'\n }\n});" } ], "samples-languages": [ "curl", "typescript" ] }, "tags": [ "Tickets" ] } }, "/v1/appointments": { "post": { "summary": "Create an appointment", "description": "Creates a scheduled appointment for a visitor. Appointments have a specific time slot and are assigned to a user.", "operationId": "create-appointment", "parameters": [ { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "lineId", "firstName", "startTime", "endTime", "assigneeId" ], "properties": { "lineId": { "type": "integer", "description": "ID of the line to create the appointment in." }, "firstName": { "type": "string", "minLength": 2, "maxLength": 50, "description": "Visitor's first name (2-50 characters)." }, "lastName": { "type": "string", "maxLength": 50, "description": "Visitor's last name (max 50 characters)." }, "phoneNumber": { "type": "string", "pattern": "^(\\+)?([0-9]){5,20}$", "description": "Phone number with optional + prefix (5-20 digits)." }, "email": { "type": "string", "format": "email", "maxLength": 100, "description": "Visitor's email address." }, "languageCode": { "type": "string", "minLength": 2, "maxLength": 5, "default": "en", "description": "Language code for the visitor (default: en)." }, "startTime": { "type": "string", "format": "date-time", "description": "Appointment start time in ISO 8601 format." }, "endTime": { "type": "string", "format": "date-time", "description": "Appointment end time in ISO 8601 format." }, "assigneeId": { "type": "integer", "description": "ID of the user to assign the appointment to." }, "fields": { "type": "array", "description": "Custom input fields for the appointment. See [Input Fields query](/reference/queries/input-fields) to discover available IDs.", "items": { "type": "object", "required": [ "inputFieldId" ], "properties": { "inputFieldId": { "type": "string", "format": "uuid", "description": "UUID of the input field." }, "value": { "type": "string", "maxLength": 500, "description": "Value for text input fields." }, "optionIds": { "type": "array", "items": { "type": "string", "format": "uuid" }, "description": "UUIDs of selected options for select-type fields." } } } }, "labels": { "type": "array", "description": "Labels to attach to the appointment.", "items": { "type": "object", "required": [ "value" ], "properties": { "value": { "type": "string", "description": "Label text." } } } } } }, "example": { "lineId": 12345, "firstName": "John", "lastName": "Doe", "phoneNumber": "+12125551234", "email": "john@example.com", "startTime": "2024-12-15T10:00:00Z", "endTime": "2024-12-15T10:30:00Z", "assigneeId": 789 } } } }, "responses": { "201": { "description": "Appointment created successfully", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "Internal appointment ticket ID." }, "publicId": { "type": "string", "description": "Public-facing ticket ID." } } }, "example": { "id": "226859", "publicId": "A-42" } } } }, "400": { "description": "Validation error - invalid input data" }, "404": { "description": "Line, user, or input fields not found" }, "409": { "description": "Line is disabled or archived" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X POST https://api.qminder.com/v1/appointments \\\n -H \"X-Qminder-REST-API-Key: YOUR_API_KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"lineId\": 12345,\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"startTime\": \"2024-12-15T10:00:00Z\",\n \"endTime\": \"2024-12-15T10:30:00Z\",\n \"assigneeId\": 789\n }'" }, { "language": "typescript", "code": "const response = await fetch('https://api.qminder.com/v1/appointments', {\n method: 'POST',\n headers: {\n 'X-Qminder-REST-API-Key': 'YOUR_API_KEY',\n 'X-Qminder-API-Version': '2020-09-01',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n lineId: 12345,\n firstName: 'John',\n lastName: 'Doe',\n startTime: '2024-12-15T10:00:00Z',\n endTime: '2024-12-15T10:30:00Z',\n assigneeId: 789\n })\n});\n\nconst { id, publicId } = await response.json();" } ], "samples-languages": [ "curl", "typescript" ] }, "tags": [ "Appointments" ] } }, "/v1/appointments/auto-assign": { "post": { "summary": "Create an auto-assigning appointment", "description": "Creates a scheduled appointment that will be automatically assigned to an available user based on their availability.", "operationId": "create-auto-assign-appointment", "parameters": [ { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "lineId", "firstName", "startTime", "endTime" ], "properties": { "lineId": { "type": "integer", "description": "ID of the line to create the appointment in." }, "firstName": { "type": "string", "minLength": 2, "maxLength": 50, "description": "Visitor's first name (2-50 characters)." }, "lastName": { "type": "string", "maxLength": 50, "description": "Visitor's last name (max 50 characters)." }, "phoneNumber": { "type": "string", "pattern": "^(\\+)?([0-9]){5,20}$", "description": "Phone number with optional + prefix (5-20 digits)." }, "email": { "type": "string", "format": "email", "maxLength": 100, "description": "Visitor's email address." }, "languageCode": { "type": "string", "minLength": 2, "maxLength": 5, "default": "en", "description": "Language code for the visitor (default: en)." }, "startTime": { "type": "string", "format": "date-time", "description": "Appointment start time in ISO 8601 format." }, "endTime": { "type": "string", "format": "date-time", "description": "Appointment end time in ISO 8601 format." }, "fields": { "type": "array", "description": "Custom input fields for the appointment. See [Input Fields query](/reference/queries/input-fields) to discover available IDs.", "items": { "type": "object", "required": [ "inputFieldId" ], "properties": { "inputFieldId": { "type": "string", "format": "uuid", "description": "UUID of the input field." }, "value": { "type": "string", "maxLength": 500, "description": "Value for text input fields." }, "optionIds": { "type": "array", "items": { "type": "string", "format": "uuid" } } } } }, "labels": { "type": "array", "description": "Labels to attach to the appointment.", "items": { "type": "object", "required": [ "value" ], "properties": { "value": { "type": "string" } } } } } }, "example": { "lineId": 12345, "firstName": "John", "lastName": "Doe", "startTime": "2024-12-15T10:00:00Z", "endTime": "2024-12-15T10:30:00Z" } } } }, "responses": { "201": { "description": "Appointment created successfully", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "publicId": { "type": "string" } } }, "example": { "id": "226859", "publicId": "A-42" } } } }, "400": { "description": "Validation error - invalid input data" }, "404": { "description": "Line or input fields not found" }, "409": { "description": "Line is disabled or archived" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X POST https://api.qminder.com/v1/appointments/auto-assign \\\n -H \"X-Qminder-REST-API-Key: YOUR_API_KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"lineId\": 12345,\n \"firstName\": \"John\",\n \"startTime\": \"2024-12-15T10:00:00Z\",\n \"endTime\": \"2024-12-15T10:30:00Z\"\n }'" }, { "language": "typescript", "code": "const response = await fetch('https://api.qminder.com/v1/appointments/auto-assign', {\n method: 'POST',\n headers: {\n 'X-Qminder-REST-API-Key': 'YOUR_API_KEY',\n 'X-Qminder-API-Version': '2020-09-01',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n lineId: 12345,\n firstName: 'John',\n startTime: '2024-12-15T10:00:00Z',\n endTime: '2024-12-15T10:30:00Z'\n })\n});\n\nconst { id, publicId } = await response.json();" } ], "samples-languages": [ "curl", "typescript" ] }, "tags": [ "Appointments" ] } }, "/v1/appointments/{ticketId}": { "patch": { "summary": "Edit an appointment", "description": "Updates an appointment's time slot or assignee. Only include fields you want to change.", "operationId": "edit-appointment", "parameters": [ { "name": "ticketId", "in": "path", "description": "ID of the appointment ticket to update", "required": true, "schema": { "type": "string" } }, { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "startTime": { "type": "string", "format": "date-time", "description": "New appointment start time in ISO 8601 format." }, "endTime": { "type": "string", "format": "date-time", "description": "New appointment end time in ISO 8601 format." }, "assigneeId": { "type": "integer", "description": "ID of the user to reassign the appointment to." } } }, "example": { "startTime": "2024-12-15T11:00:00Z", "endTime": "2024-12-15T11:30:00Z" } } } }, "responses": { "200": { "description": "Appointment updated successfully" }, "404": { "description": "Appointment or user not found" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X PATCH https://api.qminder.com/v1/appointments/14848 \\\n -H \"X-Qminder-REST-API-Key: YOUR_API_KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"startTime\": \"2024-12-15T11:00:00Z\",\n \"endTime\": \"2024-12-15T11:30:00Z\"\n }'" }, { "language": "typescript", "code": "await fetch('https://api.qminder.com/v1/appointments/14848', {\n method: 'PATCH',\n headers: {\n 'X-Qminder-REST-API-Key': 'YOUR_API_KEY',\n 'X-Qminder-API-Version': '2020-09-01',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n startTime: '2024-12-15T11:00:00Z',\n endTime: '2024-12-15T11:30:00Z'\n })\n});" } ], "samples-languages": [ "curl", "typescript" ] }, "tags": [ "Appointments" ] } }, "/v1/appointments/{ticketId}/cancel": { "post": { "summary": "Cancel an appointment", "description": "Cancels a scheduled appointment.", "operationId": "cancel-appointment", "parameters": [ { "name": "ticketId", "in": "path", "description": "ID of the appointment ticket to cancel", "required": true, "schema": { "type": "string" } }, { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "responses": { "200": { "description": "Appointment cancelled successfully" }, "400": { "description": "Ticket is not in scheduled status" }, "404": { "description": "Appointment not found" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X POST https://api.qminder.com/v1/appointments/14848/cancel \\\n -H \"X-Qminder-REST-API-Key: YOUR_API_KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\"" }, { "language": "typescript", "code": "await fetch('https://api.qminder.com/v1/appointments/14848/cancel', {\n method: 'POST',\n headers: {\n 'X-Qminder-REST-API-Key': 'YOUR_API_KEY',\n 'X-Qminder-API-Version': '2020-09-01'\n }\n});" } ], "samples-languages": [ "curl", "typescript" ] }, "tags": [ "Appointments" ] } }, "/v1/appointments/{ticketId}/checkin": { "post": { "summary": "Check in an appointment", "description": "Checks in a visitor for their scheduled appointment, moving them to the queue.", "operationId": "checkin-appointment", "parameters": [ { "name": "ticketId", "in": "path", "description": "ID of the appointment ticket to check in", "required": true, "schema": { "type": "string" } }, { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "responses": { "200": { "description": "Appointment checked in successfully" }, "400": { "description": "Ticket is not in scheduled status" }, "404": { "description": "Appointment not found" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X POST https://api.qminder.com/v1/appointments/14848/checkin \\\n -H \"X-Qminder-REST-API-Key: YOUR_API_KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\"" }, { "language": "typescript", "code": "await fetch('https://api.qminder.com/v1/appointments/14848/checkin', {\n method: 'POST',\n headers: {\n 'X-Qminder-REST-API-Key': 'YOUR_API_KEY',\n 'X-Qminder-API-Version': '2020-09-01'\n }\n});" } ], "samples-languages": [ "curl", "typescript" ] }, "tags": [ "Appointments" ] } }, "/v1/appointments/{ticketId}/marknoshow": { "post": { "summary": "Mark appointment as no-show", "description": "Marks a scheduled appointment as no-show when the visitor doesn't arrive.", "operationId": "mark-appointment-noshow", "parameters": [ { "name": "ticketId", "in": "path", "description": "ID of the appointment ticket to mark as no-show", "required": true, "schema": { "type": "string" } }, { "name": "X-Qminder-API-Version", "in": "header", "description": "API version. Must be set to `2020-09-01`.", "required": true, "schema": { "type": "string", "enum": [ "2020-09-01" ], "default": "2020-09-01" } } ], "responses": { "200": { "description": "Appointment marked as no-show successfully" }, "400": { "description": "Ticket is not in scheduled status" }, "404": { "description": "Appointment not found" } }, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X POST https://api.qminder.com/v1/appointments/14848/marknoshow \\\n -H \"X-Qminder-REST-API-Key: YOUR_API_KEY\" \\\n -H \"X-Qminder-API-Version: 2020-09-01\"" }, { "language": "typescript", "code": "await fetch('https://api.qminder.com/v1/appointments/14848/marknoshow', {\n method: 'POST',\n headers: {\n 'X-Qminder-REST-API-Key': 'YOUR_API_KEY',\n 'X-Qminder-API-Version': '2020-09-01'\n }\n});" } ], "samples-languages": [ "curl", "typescript" ] }, "tags": [ "Appointments" ] } }, "/v1/users": { "post": { "summary": "Creating a user", "description": "", "operationId": "creating-a-user", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "email", "firstName", "lastName", "roles" ], "properties": { "email": { "type": "string", "description": "The email address of the new user. They must be able to receive an e-mail. The maximum length is 100 characters." }, "firstName": { "type": "string", "description": "The first name of the new user. The maximum length is 50 characters." }, "lastName": { "type": "string", "description": "The last name of the new user. The maximum length is 50 characters." }, "roles": { "type": "string", "description": "Array of access roles for the user. The array must have at least one access role. Access roles are JSON objects with the following fields: type (string) Mandatory. The access level. Either \"CLERK\", \"MANAGER\", or \"ADMIN\". location (number) Optional. The location where to grant access. Mandatory for CLERK and MANAGER access levels.", "format": "json" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "email", "firstName", "lastName", "roles" ], "properties": { "email": { "type": "string", "description": "The email address of the new user. They must be able to receive an e-mail. The maximum length is 100 characters." }, "firstName": { "type": "string", "description": "The first name of the new user. The maximum length is 50 characters." }, "lastName": { "type": "string", "description": "The last name of the new user. The maximum length is 50 characters." }, "roles": { "type": "string", "description": "Array of access roles for the user. The array must have at least one access role. Access roles are JSON objects with the following fields: type (string) Mandatory. The access level. Either \"CLERK\", \"MANAGER\", or \"ADMIN\". location (number) Optional. The location where to grant access. Mandatory for CLERK and MANAGER access levels.", "format": "json" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"id\": \"226859\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "id": { "type": "string", "example": "226859" } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl -X POST https://api.qminder.com/v1/users \\\n -d \"email=johnny@qminder.com\" \\\n -d \"firstName=Johnny\" \\\n -d \"lastName=Bravo\" \\\n -d 'roles=[{\"type\": \"CLERK\", \"location\": 1570 }]' \\\n -H \"X-Qminder-REST-API-Key: KEY\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Users" ] } }, "/v1/users/{id}": { "get": { "summary": "Getting details of a User", "description": "", "operationId": "getting-details-of-a-user", "parameters": [ { "name": "id", "in": "path", "description": "The ID or email of the User to query", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"id\": 111111,\n \"email\": \"test@qminder.com\",\n \"firstName\": \"Test\",\n \"lastName\": \"User\",\n \"selectedLocation\": 18588,\n \"roles\": [\n {\n \"id\": 1234,\n \"type\": \"ADMIN\"\n }\n ]\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "id": { "type": "integer", "example": 111111, "default": 0 }, "email": { "type": "string", "example": "test@qminder.com" }, "firstName": { "type": "string", "example": "Test" }, "lastName": { "type": "string", "example": "User" }, "selectedLocation": { "type": "integer", "example": 18588, "default": 0 }, "roles": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer", "example": 1234, "default": 0 }, "type": { "type": "string", "example": "ADMIN" } } } } } } } } } }, "deprecated": false, "tags": [ "Users" ] } }, "/v1/users/{id}/desk": { "get": { "summary": "Getting user's selected desk id", "description": "", "operationId": "getting-users-selected-desk-id", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the User to get selected desk of", "schema": { "type": "integer", "format": "int32" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"selectedDeskId\": 2442\n}" } }, "schema": { "type": "object", "properties": { "selectedDeskId": { "type": "integer", "example": 2442, "default": 0 } } } } } } }, "deprecated": false, "tags": [ "Users" ] }, "post": { "summary": "Changing the user's selected desk", "description": "", "operationId": "changing-the-users-selected-desk", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the User to change the desk for", "schema": { "type": "integer", "format": "int32" }, "required": true } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "desk" ], "properties": { "desk": { "type": "integer", "description": "The ID of the desk to select. The desk has to be in the User's selected location.", "format": "int32" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "desk" ], "properties": { "desk": { "type": "integer", "description": "The ID of the desk to select. The desk has to be in the User's selected location.", "format": "int32" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl \\\n -X POST \\\n https://api.qminder.com/v1/users/342/desk \\\n -d \"desk=58185\" \\\n -H \"X-Qminder-REST-API-Key: KEY\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Users" ] }, "delete": { "summary": "Clearing the user's selected desk", "description": "", "operationId": "clearing-the-users-selected-desk", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the User to remove the desk for", "schema": { "type": "integer", "format": "int32" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } } }, "deprecated": false, "tags": [ "Users" ] } }, "/v1/users/{id}/lines": { "get": { "summary": "Getting the user's selected lines", "description": "", "operationId": "getting-the-users-selected-lines", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the User to get lines for", "schema": { "type": "integer", "format": "int32" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"selectedLines\":[2342, 4245, 3214]\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "selectedLines": { "type": "array", "items": { "type": "integer", "example": 2342, "default": 0 } } } } } } } }, "deprecated": false, "tags": [ "Users" ] }, "post": { "summary": "Selecting lines", "description": "", "operationId": "selecting-lines", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the User to set the lines for", "schema": { "type": "string" }, "required": true } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "": { "properties": { "": { "properties": { "": { "type": "array", "description": "Array of Line IDs to set as the User's selected lines.", "items": { "type": "integer", "format": "int32" } } }, "required": [ "" ], "type": "object" } }, "required": [], "type": "object" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "properties": { "": { "properties": { "": { "properties": { "": { "type": "array", "description": "Array of Line IDs to set as the User's selected lines.", "items": { "type": "integer", "format": "int32" } } }, "required": [ "" ], "type": "object" } }, "required": [], "type": "object" } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } } }, "deprecated": false, "tags": [ "Users" ] } }, "/v1/webhooks": { "post": { "summary": "Adding a webhook", "description": "", "operationId": "adding-a-webhook", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "description": "The URL that Qminder will send HTTP requests to." } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "description": "The URL that Qminder will send HTTP requests to." } } } } } }, "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"id\": \"4ef258d7-e56e-4c9f-bb6e-4eaec6d9408e\",\n \"secret\": \"wfdfghfhfgdsfderthyndf4356hyfds\"\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "id": { "type": "string", "example": "4ef258d7-e56e-4c9f-bb6e-4eaec6d9408e" }, "secret": { "type": "string", "example": "wfdfghfhfgdsfderthyndf4356hyfds" } } } } } } }, "deprecated": false, "x-readme": { "code-samples": [ { "language": "curl", "code": "curl \\\n -X POST \\\n https://api.qminder.com/v1/webhooks \\\n --data \"url=https://www.example.com\" \\\n -H \"X-Qminder-REST-API-Key: KEY\"" } ], "samples-languages": [ "curl" ] }, "tags": [ "Webhooks" ] } }, "/v1/webhooks/{id}": { "delete": { "summary": "Removing a webhook", "description": "", "operationId": "removing-a-webhook", "parameters": [ { "name": "id", "in": "path", "description": "ID of a webhook to delete", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 } } } } } } }, "deprecated": false, "tags": [ "Webhooks" ] } }, "/v1/locations": { "get": { "summary": "Get the list of locations", "description": "", "operationId": "get-the-list-of-locations", "responses": { "200": { "description": "200", "content": { "application/json": { "examples": { "Result": { "value": "{\n \"statusCode\": 200,\n \"data\": [\n {\n \"id\": 28594,\n \"name\": \"White House\",\n \"latitude\": 38.8976763,\n \"longitude\": -77.0365298,\n \"country\": \"United States\",\n \"address\": \"1600 Pennsylvania Ave NW, Washington, DC 20500, United States\",\n \"selectingDeskMandatory\": false,\n \"timezoneOffset\": -240\n },\n {\n \"id\": 39599,\n \"name\": \"SF City Hall\",\n \"latitude\": 37.7792792,\n \"longitude\": -122.4214304,\n \"country\": \"United States\",\n \"address\": \"1 Dr Carlton B Goodlett Pl, San Francisco, CA 94102, United States\",\n \"selectingDeskMandatory\": false,\n \"timezoneOffset\": -420\n }\n ]\n}" } }, "schema": { "type": "object", "properties": { "statusCode": { "type": "integer", "example": 200, "default": 0 }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer", "example": 28594, "default": 0 }, "name": { "type": "string", "example": "White House" }, "latitude": { "type": "number", "example": 38.8976763, "default": 0 }, "longitude": { "type": "number", "example": -77.0365298, "default": 0 }, "country": { "type": "string", "example": "United States" }, "address": { "type": "string", "example": "1600 Pennsylvania Ave NW, Washington, DC 20500, United States" }, "selectingDeskMandatory": { "type": "boolean", "example": false, "default": true }, "timezoneOffset": { "type": "integer", "example": -240, "default": 0 } } } } } } } } } }, "deprecated": false, "tags": [ "Locations" ] } } }, "x-readme": { "headers": [], "explorer-enabled": false, "proxy-enabled": true }, "x-readme-fauxas": true, "tags": [ { "name": "Locations", "description": "Manage physical service locations" }, { "name": "Lines", "description": "Manage virtual queues within locations" }, { "name": "Input Fields", "description": "Manage custom data fields for locations" }, { "name": "Tickets", "description": "Manage visitor queue entries" }, { "name": "Appointments", "description": "Manage scheduled appointments" }, { "name": "Users", "description": "Manage user accounts and permissions" }, { "name": "Webhooks", "description": "Manage webhook subscriptions" } ] }