{
  "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"
    }
  ]
}
