{
  "openapi": "3.0.0",
  "paths": {
    "/v2/lots": {
      "post": {
        "description": "This endpoint allows the user to create lots",
        "operationId": "lots-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLotDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create lots",
        "tags": [
          "lots"
        ]
      },
      "get": {
        "description": "Lists the lots your token can see. Each lot has its own `spot_count` and `occupied_count` (see [Live occupancy](/guides/live-occupancy)) and its `timezone`.\n\n`detection_status` is `online` for lots with parking detection and `unkown` (sic) otherwise; `detection_implementation_status` is `implemented`, `not_implemented`, `pending` or `blocked`.",
        "operationId": "lots-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `anpr_presence`, `detection_implementation_status`, `lot_parking_detection`, `name`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "anprPresence": {
                "summary": "Filter by anpr_presence",
                "value": [
                  "anpr_presence:eq:true"
                ]
              },
              "detectionImplementationStatus": {
                "summary": "Filter by detection_implementation_status",
                "value": [
                  "detection_implementation_status:eq:true"
                ]
              },
              "lotParkingDetection": {
                "summary": "Filter by lot_parking_detection",
                "value": [
                  "lot_parking_detection:eq:true"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:defualt lot"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/LotDto"
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": [
                    {
                      "id": 7,
                      "account_id": 3,
                      "name": "Main garage",
                      "description": null,
                      "address": "Example street 1",
                      "latitude": 45.815,
                      "longitude": 15.982,
                      "timezone": "Europe/Zagreb",
                      "spot_count": 120,
                      "occupied_count": 42,
                      "detection_status": "unkown",
                      "detection_implementation_status": "not_implemented",
                      "lot_state_representation_vector": null,
                      "created_at": "2026-01-15T09:30:00.000Z",
                      "updated_at": "2026-01-15T09:30:00.000Z"
                    }
                  ],
                  "meta": {
                    "total": 1,
                    "per_page": 10,
                    "current_page": 1,
                    "last_page": 1,
                    "first_page": 1,
                    "first_page_url": "/?page=1",
                    "last_page_url": "/?page=1",
                    "next_page_url": "/?page=2",
                    "previous_page_url": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List lots",
        "tags": [
          "lots"
        ],
        "x-position": 1
      }
    },
    "/v2/parking-place-changes": {
      "get": {
        "description": "The history of every parking place's status changes, with how long each state lasted (`duration`, in seconds). Needs the `PARKING_DETECTION` feature. See the [Live occupancy](/guides/live-occupancy) guide.",
        "operationId": "parking-place-changes-find-all",
        "parameters": [
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `created_at`, `duration`, `end_time`, `lot_id`, `lot_ids`, `parking_place_name`, `occupancy_status`, `parking_place_id`, `parking_place_ids`, `zone_id`, `zone_ids`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "duration": {
                "summary": "Filter by duration",
                "value": [
                  "duration:eq:3600"
                ]
              },
              "endTime": {
                "summary": "Filter by end_time",
                "value": [
                  "end_time:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "lotIds": {
                "summary": "Filter by lot_ids",
                "value": [
                  "lot_ids:eq:1,2,3"
                ]
              },
              "parkingPlaceName": {
                "summary": "Filter by parking_place_name",
                "value": [
                  "parking_place_name:eq:john doe"
                ]
              },
              "occupancyStatus": {
                "summary": "Filter by occupancy_status",
                "value": [
                  "occupancy_status:eq:occupied"
                ]
              },
              "parkingPlaceId": {
                "summary": "Filter by parking_place_id",
                "value": [
                  "parking_place_id:eq:1"
                ]
              },
              "parkingPlaceIds": {
                "summary": "Filter by parking_place_ids",
                "value": [
                  "parking_place_ids:eq:1,2,3"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "zoneIds": {
                "summary": "Filter by zone_ids",
                "value": [
                  "zone_ids:eq:1,2,3"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ParkingPlaceChangeDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List parking place changes",
        "tags": [
          "parking place changes"
        ],
        "x-position": 1
      }
    },
    "/v2/auth/login": {
      "post": {
        "description": "Logs an account user in with email and password, and returns a **user token**.\n\nUse it **once**, by hand, as the account's Super Admin, to [create an API token](/api/endpoints/api-token-create). Don't log in at runtime with a person's credentials: logging in deletes that user's other tokens of the same type, which signs them out of the Connect app.\n\nAn unconfirmed email returns `403` with code `9`. See [Authentication](/api/authentication).",
        "operationId": "auth-login",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginDto"
              },
              "example": {
                "email": "admin@example.com",
                "password": "<your-password>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LoginResponseDto"
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": {
                    "id": 501,
                    "type": "bearer",
                    "token": "<user-token>",
                    "name": "Site Admin",
                    "email": "admin@example.com",
                    "account_id": 3,
                    "account_role_id": 2,
                    "account_user_role_id": 1,
                    "account_user_id": 17
                  }
                }
              }
            }
          },
          "403": {
            "description": "User has entered a wrong password. Due to security reason we should not specify this and instead say that the email/password combination is wrong.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 8,
                      "message": "Wrong email/password combination."
                    }
                  ]
                }
              }
            }
          }
        },
        "summary": "Log in",
        "tags": [
          "auth"
        ],
        "x-position": 1
      }
    },
    "/v2/api-tokens": {
      "post": {
        "description": "Creates an API token for the account. Call it with a **Super Admin's user token** (from [Log in](/api/endpoints/auth-login)); API tokens can't create API tokens.\n\nThe `token` is returned **only in this response**: store it in your secret manager. Tokens don't expire; revoke one with [Delete an API token](/api/endpoints/api-token-remove).\n\nAn API token acts as the account's first Super Admin, and sees the lots that user is assigned to. See [Authentication](/api/authentication).",
        "operationId": "api-token-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateApiTokenDto"
              },
              "example": {
                "name": "booking-backend"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The new API token. `token` is only ever returned here; store it now.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "success",
                    "data"
                  ],
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "required": [
                        "id",
                        "name",
                        "account_id",
                        "token",
                        "created_at",
                        "updated_at"
                      ],
                      "properties": {
                        "id": {
                          "type": "number",
                          "example": 12
                        },
                        "name": {
                          "type": "string",
                          "example": "my-integration"
                        },
                        "account_id": {
                          "type": "number",
                          "example": 3
                        },
                        "token": {
                          "type": "string",
                          "example": "q3Z8kP0v1yX4mN7rT2wB5cE9hJ6gL0sD8fA1uI3oK2e"
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2026-01-15T09:30:00.000Z"
                        },
                        "updated_at": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2026-01-15T09:30:00.000Z"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "success": true,
                  "data": {
                    "id": 12,
                    "name": "booking-backend",
                    "account_id": 3,
                    "token": "<your-api-token>",
                    "created_at": "2026-01-15T09:30:00.000Z",
                    "updated_at": "2026-01-15T09:30:00.000Z"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create an API token",
        "tags": [
          "api tokens"
        ],
        "x-position": 1
      },
      "get": {
        "description": "Lists the account's API tokens: names and ids only, never the token values. Only a Super Admin can call it.",
        "operationId": "api-token-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`, `created_at`, `updated_at`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "createdAtAscending": {
                "summary": "Sort by created_at ascending",
                "value": [
                  "created_at:asc"
                ]
              },
              "createdAtDescending": {
                "summary": "Sort by created_at descending",
                "value": [
                  "created_at:desc"
                ]
              },
              "updatedAtAscending": {
                "summary": "Sort by updated_at ascending",
                "value": [
                  "updated_at:asc"
                ]
              },
              "updatedAtDescending": {
                "summary": "Sort by updated_at descending",
                "value": [
                  "updated_at:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ApiTokenDto"
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": [
                    {
                      "id": 12,
                      "name": "booking-backend",
                      "account_id": 3,
                      "created_at": "2026-01-15T09:30:00.000Z",
                      "updated_at": "2026-01-15T09:30:00.000Z"
                    }
                  ],
                  "meta": {
                    "total": 1,
                    "per_page": 10,
                    "current_page": 1,
                    "last_page": 1,
                    "first_page": 1,
                    "first_page_url": "/?page=1",
                    "last_page_url": "/?page=1",
                    "next_page_url": "/?page=2",
                    "previous_page_url": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List API tokens",
        "tags": [
          "api tokens"
        ],
        "x-position": 2
      }
    },
    "/v2/gateways": {
      "get": {
        "description": "Lists your Gateways. `status` is `online` while the Gateway is connected to Parklio; filter with `status:eq:offline` to find the ones that aren't. The realtime `gateway_status` event identifies a Gateway by its `uuid`. See the [Monitor devices](/guides/monitor-devices) guide.",
        "operationId": "gateways-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `lot_id`, `name`, `status`, `uuid`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "status": {
                "summary": "Filter by status",
                "value": [
                  "status:eq:online"
                ]
              },
              "uuid": {
                "summary": "Filter by uuid",
                "value": [
                  "uuid:eq:123e4567-e89b-12d3-a456-426614174000"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`, `created_at`, `updated_at`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "createdAtAscending": {
                "summary": "Sort by created_at ascending",
                "value": [
                  "created_at:asc"
                ]
              },
              "createdAtDescending": {
                "summary": "Sort by created_at descending",
                "value": [
                  "created_at:desc"
                ]
              },
              "updatedAtAscending": {
                "summary": "Sort by updated_at ascending",
                "value": [
                  "updated_at:asc"
                ]
              },
              "updatedAtDescending": {
                "summary": "Sort by updated_at descending",
                "value": [
                  "updated_at:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/GatewayDto"
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": [
                    {
                      "id": 5,
                      "account_id": 3,
                      "lot_id": 7,
                      "uuid": "xgobgwEG7rmZ",
                      "name": "Garage entrance",
                      "firmware_version": "1.0.0",
                      "ip_address": "192.0.2.10",
                      "is_blocked": 0,
                      "mac": "00:1A:2B:3C:4D:5E",
                      "status": "online",
                      "created_at": "2026-01-15T09:30:00.000Z",
                      "updated_at": "2026-01-15T09:30:00.000Z",
                      "deleted_at": null
                    }
                  ],
                  "meta": {
                    "total": 1,
                    "per_page": 10,
                    "current_page": 1,
                    "last_page": 1,
                    "first_page": 1,
                    "first_page_url": "/?page=1",
                    "last_page_url": "/?page=1",
                    "next_page_url": "/?page=2",
                    "previous_page_url": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List Gateways",
        "tags": [
          "gateways"
        ],
        "x-position": 1
      }
    },
    "/v2/zones": {
      "post": {
        "description": "This endpoint allows the user to create zones",
        "operationId": "zones-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateZoneDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create zones",
        "tags": [
          "zones"
        ]
      },
      "get": {
        "description": "Lists zones: the areas of a lot that products, cameras, tariffs and counts belong to. Use `filter=lot_id:eq:<id>` for one lot's zones, and `spot_count` − `occupied_count` for free spaces. See [Live occupancy](/guides/live-occupancy).",
        "operationId": "zones-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `anpr_presence`, `lot_id`, `lot_ids`, `name`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "anprPresence": {
                "summary": "Filter by anpr_presence",
                "value": [
                  "anpr_presence:eq:true"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "lotIds": {
                "summary": "Filter by lot_ids",
                "value": [
                  "lot_ids:eq:1,2,3"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ZoneDto"
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": [
                    {
                      "id": 9,
                      "account_id": 3,
                      "lot_id": 7,
                      "name": "Level -1",
                      "description": null,
                      "spot_count": 120,
                      "occupied_count": 42,
                      "tariffs": [
                        {
                          "id": 4,
                          "name": "Weekdays",
                          "order": 0
                        }
                      ],
                      "max_levenshtein_distance": 1,
                      "vector_map": null,
                      "deleted_at": null,
                      "created_at": "2026-01-15T09:30:00.000Z",
                      "updated_at": "2026-01-15T09:30:00.000Z"
                    }
                  ],
                  "meta": {
                    "total": 1,
                    "per_page": 10,
                    "current_page": 1,
                    "last_page": 1,
                    "first_page": 1,
                    "first_page_url": "/?page=1",
                    "last_page_url": "/?page=1",
                    "next_page_url": "/?page=2",
                    "previous_page_url": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List zones",
        "tags": [
          "zones"
        ],
        "x-position": 1
      }
    },
    "/v2/tariffs": {
      "post": {
        "description": "Creates a tariff: when it applies (dates, season, weekly `schedules`), who it applies to (`group_ids`; none means everyone), and how a stay is priced. Only `name` is required. Assign it to zones with `PUT /v2/zones/{id}/tariffs/{tariffId}`.\n\nWhen an LPR camera reads a plate that isn't whitelisted, a matching tariff lets it in (reason `tariff`). In `schedules`, `weekday` 0 is **Monday**, and times are in the lot's time zone. Prices are calculated by payment machines, not by the API. See the [Sessions and tariffs](/guides/sessions-and-tariffs#3-set-up-tariffs) guide.",
        "operationId": "tariffs-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTariffDto"
              },
              "example": {
                "name": "Weekdays",
                "interval": 60,
                "price": 2,
                "entry_free_time_interval": 15,
                "price_progression_type": "flat",
                "schedules": [
                  {
                    "weekday": 0,
                    "start_time": "07:00:00",
                    "end_time": "19:00:00"
                  },
                  {
                    "weekday": 1,
                    "start_time": "07:00:00",
                    "end_time": "19:00:00"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TariffDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a tariff",
        "tags": [
          "tariffs"
        ],
        "x-position": 1
      },
      "get": {
        "description": "This endpoint allows the user to list all tariffs",
        "operationId": "tariffs-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `name`, `created_at`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/TariffDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all tariffs",
        "tags": [
          "tariffs"
        ]
      }
    },
    "/v2/members": {
      "post": {
        "description": "Registers a vehicle's license plate as a **member** of the account, optionally in groups. Groups decide which [tariffs](/api/endpoints/tariffs-create) apply to a plate; members don't open anything by themselves. See the [Sessions and tariffs](/guides/sessions-and-tariffs#4-members-and-groups) guide.",
        "operationId": "members-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMemberDto"
              },
              "example": {
                "license_plate": "ZG1234AB",
                "name": "Tenant 12",
                "group_ids": [
                  2
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/MemberDto"
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": {
                    "id": 40,
                    "name": "Tenant 12",
                    "description": null,
                    "email": null,
                    "license_plate": "ZG1234AB",
                    "account_id": 3,
                    "created_at": "2026-01-15T09:30:00.000Z",
                    "updated_at": "2026-01-15T09:30:00.000Z",
                    "groups": [
                      {
                        "id": 2,
                        "name": "Tenants"
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a member",
        "tags": [
          "members"
        ],
        "x-position": 1
      },
      "get": {
        "description": "This endpoint allows the user to list all members",
        "operationId": "members-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `name`, `license_plate`, `email`, `created_at`, `group_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "licensePlate": {
                "summary": "Filter by license_plate",
                "value": [
                  "license_plate:eq:AB123CD"
                ]
              },
              "email": {
                "summary": "Filter by email",
                "value": [
                  "email:eq:john.doe@example.com"
                ]
              },
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "groupId": {
                "summary": "Filter by group_id",
                "value": [
                  "group_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MemberDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all members",
        "tags": [
          "members"
        ]
      }
    },
    "/v2/plate-readings": {
      "get": {
        "description": "Lists license-plate reads by LPR cameras, with the access decision made for each: `access_decision` (`triggered` or `denied`) and `access_decision_reason`. The same data arrives in realtime as `plate_reading_create` and `plate_reading_update`. See the [Plate-based access](/guides/plate-based-access) guide.",
        "operationId": "plate-readings-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `access_decision`, `access_decision_reason`, `account_id`, `plate`, `zone_id`, `lpr_camera_id`, `direction`, `type`, `created_at`, `lot_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accessDecision": {
                "summary": "Filter by access_decision",
                "value": [
                  "access_decision:eq:triggered"
                ]
              },
              "accessDecisionReason": {
                "summary": "Filter by access_decision_reason",
                "value": [
                  "access_decision_reason:eq:tariff"
                ]
              },
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "plate": {
                "summary": "Filter by plate",
                "value": [
                  "plate:eq:DTPLATE-2"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "lprCameraId": {
                "summary": "Filter by lpr_camera_id",
                "value": [
                  "lpr_camera_id:eq:1"
                ]
              },
              "direction": {
                "summary": "Filter by direction",
                "value": [
                  "direction:eq:in"
                ]
              },
              "type": {
                "summary": "Filter by type",
                "value": [
                  "type:eq:car"
                ]
              },
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `created_at`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "createdAtAscending": {
                "summary": "Sort by created_at ascending",
                "value": [
                  "created_at:asc"
                ]
              },
              "createdAtDescending": {
                "summary": "Sort by created_at descending",
                "value": [
                  "created_at:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/PlateReadingDto"
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": [
                    {
                      "id": 9001,
                      "plate": "ZG1234AB",
                      "confidence": null,
                      "image_url": null,
                      "cropped_image_url": null,
                      "direction": "in",
                      "type": "car",
                      "make": null,
                      "color": null,
                      "model": null,
                      "country_code": "HR",
                      "session_id": null,
                      "access_decision": "triggered",
                      "access_decision_reason": "whitelist",
                      "plate_side": "front",
                      "lpr_camera_direction": "in",
                      "lpr_camera_id": 15,
                      "zone_id": 9,
                      "created_at": "2026-03-02T08:12:40.000Z",
                      "updated_at": "2026-03-02T08:12:41.000Z"
                    }
                  ],
                  "meta": {
                    "total": 1,
                    "per_page": 10,
                    "current_page": 1,
                    "last_page": 1,
                    "first_page": 1,
                    "first_page_url": "/?page=1",
                    "last_page_url": "/?page=1",
                    "next_page_url": "/?page=2",
                    "previous_page_url": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List plate readings",
        "tags": [
          "plate readings"
        ],
        "x-position": 1
      }
    },
    "/v2/sessions": {
      "post": {
        "description": "Starts a parking session by hand, for example for a vehicle a camera missed. The session is created in the zone of the camera you name. Send **both** `license_plate` and `lpr_camera_id`.\n\nNo whitelist, tariff or capacity check is made, and the zone's `occupied_count` doesn't change. `entry.type` is `account` for an API token, `attendant` for a user token. See the [Sessions and tariffs](/guides/sessions-and-tariffs) guide.",
        "operationId": "sessions-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserCreateSessionDto"
              },
              "example": {
                "license_plate": "ZG1234AB",
                "lpr_camera_id": 15
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/SessionDto"
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": {
                    "id": 501,
                    "public_id": "K7Q2M9X4TB",
                    "duration": 0,
                    "amount_paid": 0,
                    "exit_allowed": true,
                    "entry_license_plate": {
                      "id": 9001,
                      "plate": "ZG1234AB",
                      "image_url": null,
                      "cropped_image_url": null
                    },
                    "created_at": "2026-03-02T08:12:41.000Z",
                    "entry": {
                      "id": 3,
                      "type": "account"
                    },
                    "zone_id": 9
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Start a session",
        "tags": [
          "sessions"
        ],
        "x-position": 1
      },
      "get": {
        "description": "Lists parking sessions. Open sessions have no `ended_at`; filter them with `ended_at:eq:null`. `duration` is in seconds, `discount_time` in minutes (`-1` = unlimited). See the [Sessions and tariffs](/guides/sessions-and-tariffs) guide.",
        "operationId": "sessions-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `created_at`, `ended_at`, `license_plate`, `lot_id`, `lpr_camera_id`, `zone_id`, `public_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "endedAt": {
                "summary": "Filter by ended_at",
                "value": [
                  "ended_at:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "licensePlate": {
                "summary": "Filter by license_plate",
                "value": [
                  "license_plate:eq:AB123CD"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "lprCameraId": {
                "summary": "Filter by lpr_camera_id",
                "value": [
                  "lpr_camera_id:eq:1"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "publicId": {
                "summary": "Filter by public_id",
                "value": [
                  "public_id:eq:123e4567-e89b-12d3-a456-426614174000"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `created_at`, `id`, `ended_at`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "createdAtAscending": {
                "summary": "Sort by created_at ascending",
                "value": [
                  "created_at:asc"
                ]
              },
              "createdAtDescending": {
                "summary": "Sort by created_at descending",
                "value": [
                  "created_at:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "endedAtAscending": {
                "summary": "Sort by ended_at ascending",
                "value": [
                  "ended_at:asc"
                ]
              },
              "endedAtDescending": {
                "summary": "Sort by ended_at descending",
                "value": [
                  "ended_at:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/SessionDto"
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": [
                    {
                      "id": 501,
                      "public_id": "K7Q2M9X4TB",
                      "duration": 1800,
                      "amount_paid": 0,
                      "exit_allowed": true,
                      "entry_license_plate": {
                        "id": 9001,
                        "plate": "ZG1234AB",
                        "image_url": null,
                        "cropped_image_url": null
                      },
                      "created_at": "2026-03-02T08:12:41.000Z",
                      "entry": {
                        "id": 15,
                        "type": "lpr_camera"
                      },
                      "zone_id": 9
                    }
                  ],
                  "meta": {
                    "total": 1,
                    "per_page": 10,
                    "current_page": 1,
                    "last_page": 1,
                    "first_page": 1,
                    "first_page_url": "/?page=1",
                    "last_page_url": "/?page=1",
                    "next_page_url": "/?page=2",
                    "previous_page_url": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List sessions",
        "tags": [
          "sessions"
        ],
        "x-position": 2
      }
    },
    "/v2/lot-whitelists": {
      "post": {
        "description": "Adds up to 20 license plates to a lot's whitelist for a time window. While an entry is active, LPR cameras on the lot let the plate in (`access_decision` `triggered`, reason `whitelist`), and it can open [bound products](/api/endpoints/products-bind-license-for-product).\n\n- Always send `lot_id`.\n- Send **either** `end_time` (in the future) **or** `\"is_unlimited\": true`, not both.\n- Plates are 3–16 characters, stored in uppercase without hyphens.\n- The response has one item per plate. Keep each `license_id` to bind the plate to products, and check `success` on every item.\n\nEntries become `expired` (checked hourly) after `end_time`. See the [Plate-based access](/guides/plate-based-access) guide.",
        "operationId": "lot-whitelist-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLotWhitelistDto"
              },
              "example": {
                "lot_id": 7,
                "name": "Tenants",
                "license_plates": [
                  "ZG1234AB",
                  "ST-555-CD"
                ],
                "start_time": "2026-03-01T00:00:00.000Z",
                "end_time": "2026-04-01T00:00:00.000Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "success",
                    "data"
                  ],
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "success": {
                            "type": "boolean"
                          },
                          "whitelist_id": {
                            "type": "number",
                            "nullable": true
                          },
                          "license_id": {
                            "type": "number",
                            "nullable": true,
                            "description": "The plate record; use it with bind-licenses."
                          },
                          "plate": {
                            "type": "string"
                          },
                          "is_unlimited": {
                            "type": "number",
                            "nullable": true
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "success": true,
                  "data": [
                    {
                      "success": true,
                      "whitelist_id": 501,
                      "license_id": 88,
                      "plate": "ZG1234AB",
                      "is_unlimited": 0
                    },
                    {
                      "success": true,
                      "whitelist_id": 502,
                      "license_id": 89,
                      "plate": "ST555CD",
                      "is_unlimited": 0
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User is trying to create an entity where end time is before start time.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 405,
                      "message": "End time is before start time."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create lot whitelist entries",
        "tags": [
          "lot whitelists"
        ],
        "x-position": 1
      },
      "get": {
        "description": "Lists whitelist entries, with each plate's `license_plate_id` (the `license_id` to bind) and the products it's bound to.",
        "operationId": "lot-whitelist-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `end_time`, `license_plate`, `lot_id`, `name`, `start_time`, `status`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "endTime": {
                "summary": "Filter by end_time",
                "value": [
                  "end_time:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "licensePlate": {
                "summary": "Filter by license_plate",
                "value": [
                  "license_plate:eq:DTPLATE-2"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "startTime": {
                "summary": "Filter by start_time",
                "value": [
                  "start_time:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "status": {
                "summary": "Filter by status",
                "value": [
                  "status:eq:active"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/LotWhitelistDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List lot whitelist entries",
        "tags": [
          "lot whitelists"
        ],
        "x-position": 2
      }
    },
    "/v2/operation-tokens": {
      "post": {
        "description": "Creates a token that lets **your app** operate one product over Bluetooth, through the Parklio SDK, during a time window. Pass `token_open`, `token_close` and `token_status` to the app unchanged.\n\n- Send `end_time`, in the future and after `start_time`. `start_time` may be in the past.\n- **Revoking doesn't reach the device:** a token works until `end_time` even if you block or delete it. Create tokens just in time, with short windows, and avoid `is_unlimited` (valid until 2038).\n- Needs no plan feature and no Gateway.\n\nSee the [Operation tokens for your app](/guides/mobile-app-operation-tokens) guide.",
        "operationId": "operation-tokens-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOperationTokenDto"
              },
              "example": {
                "product_id": 123,
                "start_time": "2026-03-02T08:00:00.000Z",
                "end_time": "2026-03-02T10:00:00.000Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OperationTokenDto"
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": {
                    "id": 9001,
                    "product_id": 123,
                    "start_time": "2026-03-02T08:00:00.000Z",
                    "end_time": "2026-03-02T10:00:00.000Z",
                    "status": "active",
                    "used_count": 0,
                    "is_unlimited": 0,
                    "token_open": {
                      "token": "<hex>",
                      "status_key": "<hex>",
                      "challenge_key": "<hex>"
                    },
                    "token_close": {
                      "token": "<hex>",
                      "status_key": "<hex>",
                      "challenge_key": "<hex>"
                    },
                    "token_status": {
                      "token": "<hex>",
                      "status_key": "<hex>",
                      "challenge_key": "<hex>"
                    },
                    "product": {
                      "id": 123,
                      "device_id": "B1234567"
                    },
                    "created_at": "2026-03-02T07:59:58.000Z",
                    "updated_at": "2026-03-02T07:59:58.000Z"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create an operation token",
        "tags": [
          "operation tokens"
        ],
        "x-position": 1
      },
      "get": {
        "description": "Lists operation tokens. `status` becomes `expired` (checked hourly) after `end_time`, `blocked` when you block it, and `invalid` when the product is removed or paired again. `used_count` doesn't count uses over Bluetooth.",
        "operationId": "operation-tokens-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `product_id`, `status`, `date_from`, `date_to`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "productId": {
                "summary": "Filter by product_id",
                "value": [
                  "product_id:eq:1"
                ]
              },
              "status": {
                "summary": "Filter by status",
                "value": [
                  "status:eq:active"
                ]
              },
              "dateFrom": {
                "summary": "Filter by date_from",
                "value": [
                  "date_from:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "dateTo": {
                "summary": "Filter by date_to",
                "value": [
                  "date_to:eq:2024-01-31T00:00:00.000Z"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/OperationTokenDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List operation tokens",
        "tags": [
          "operation tokens"
        ],
        "x-position": 2
      }
    },
    "/v2/products": {
      "get": {
        "description": "Lists the products your token can see, with their current state.\n\n- Each product has exactly one **type block**, named after its type: `barrier`, `gate`, `chain`, `bollard` or `brain`. See [Products and operations](/concepts/products-and-operations).\n- `status` is `online` while a Gateway sees the product. `battery_status` (barriers only) and `rssi` are `null` while offline.\n- `lot_id` filters on the lot of the product's **zone**.\n- Products that aren't paired aren't listed.",
        "operationId": "products-find-all",
        "parameters": [
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`, `created_at`, `updated_at`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "createdAtAscending": {
                "summary": "Sort by created_at ascending",
                "value": [
                  "created_at:asc"
                ]
              },
              "createdAtDescending": {
                "summary": "Sort by created_at descending",
                "value": [
                  "created_at:desc"
                ]
              },
              "updatedAtAscending": {
                "summary": "Sort by updated_at ascending",
                "value": [
                  "updated_at:asc"
                ]
              },
              "updatedAtDescending": {
                "summary": "Sort by updated_at descending",
                "value": [
                  "updated_at:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `lot_id`, `name`, `product_type_id`, `zone_id`, `device_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "productTypeId": {
                "summary": "Filter by product_type_id",
                "value": [
                  "product_type_id:eq:1"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "deviceId": {
                "summary": "Filter by device_id",
                "value": [
                  "device_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ProductDto"
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": [
                    {
                      "id": 123,
                      "device_id": "B1234567",
                      "name": "Entrance barrier",
                      "power_type": "battery",
                      "lot_id": 7,
                      "zone_id": 9,
                      "product_type_id": 2,
                      "hardware_version": null,
                      "firmware_version": null,
                      "latitude": 45.815,
                      "longitude": 15.982,
                      "status": "online",
                      "advertisement_data": "<base64>",
                      "battery_status": 80,
                      "rssi": -70,
                      "product_error": null,
                      "created_at": "2026-01-15T09:30:00.000Z",
                      "updated_at": "2026-01-15T09:30:00.000Z",
                      "barrier": {
                        "id": 41,
                        "product_id": 123,
                        "state": "closed",
                        "is_autoclose": 1,
                        "is_car_on_top": 0,
                        "autoclose_time": 45,
                        "created_at": "2026-01-15T09:30:00.000Z",
                        "updated_at": "2026-01-15T09:30:00.000Z"
                      }
                    }
                  ],
                  "meta": {
                    "total": 1,
                    "per_page": 10,
                    "current_page": 1,
                    "last_page": 1,
                    "first_page": 1,
                    "first_page_url": "/?page=1",
                    "last_page_url": "/?page=1",
                    "next_page_url": "/?page=2",
                    "previous_page_url": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List products",
        "tags": [
          "products"
        ],
        "x-position": 1
      }
    },
    "/v2/weblinks": {
      "post": {
        "description": "Emails a link that lets the receiver operate products from a browser, through the cloud and a Gateway, during a time window. One weblink is created per product.\n\n- **Parklio always sends the email** to `receiver_email`; you can't send the link yourself.\n- `start_time` and `end_time` are both required. `max_uses` defaults to 1; `null` means unlimited.\n- Revocation is immediate.\n\nThe response has one item per product; check `success` on each. See [Access and keys](/concepts/access-and-keys#weblinks).",
        "operationId": "weblinks-bulk-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkCreateWeblinkDto"
              },
              "example": {
                "products": [
                  123
                ],
                "receiver_email": "guest@example.com",
                "start_time": "2026-03-02T08:00:00.000Z",
                "end_time": "2026-03-02T18:00:00.000Z",
                "max_uses": 2
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "success",
                    "data"
                  ],
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "success": {
                            "type": "boolean"
                          },
                          "product_id": {
                            "type": "number"
                          },
                          "receiver_email": {
                            "type": "string",
                            "nullable": true
                          },
                          "product_name": {
                            "type": "string",
                            "nullable": true
                          },
                          "url": {
                            "type": "string",
                            "nullable": true
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "success": true,
                  "data": [
                    {
                      "success": true,
                      "product_id": 123,
                      "receiver_email": "guest@example.com",
                      "product_name": "Entrance barrier",
                      "url": "<weblink-url>"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create weblinks",
        "tags": [
          "weblinks"
        ],
        "x-position": 1
      },
      "get": {
        "description": "This endpoint allows the user to list all weblinks",
        "operationId": "weblinks-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `product_id`, `receiver_identifier`, `receiver_identifier_type`, `date_from`, `date_to`, `status`, `lot_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "productId": {
                "summary": "Filter by product_id",
                "value": [
                  "product_id:eq:1"
                ]
              },
              "receiverIdentifier": {
                "summary": "Filter by receiver_identifier",
                "value": [
                  "receiver_identifier:eq:john.doe@example.com"
                ]
              },
              "receiverIdentifierType": {
                "summary": "Filter by receiver_identifier_type",
                "value": [
                  "receiver_identifier_type:eq:email"
                ]
              },
              "dateFrom": {
                "summary": "Filter by date_from",
                "value": [
                  "date_from:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "dateTo": {
                "summary": "Filter by date_to",
                "value": [
                  "date_to:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "status": {
                "summary": "Filter by status",
                "value": [
                  "status:eq:active"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/WeblinkDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all weblinks",
        "tags": [
          "weblinks"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to bulk update weblinks by using their ids",
        "operationId": "weblinks-bulk-update",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateWeblinkDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/BulkUpdateWeblinkDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk update weblinks",
        "tags": [
          "weblinks"
        ]
      }
    },
    "/v2/parking-places": {
      "post": {
        "description": "This endpoint allows the user to bulk create parking places",
        "operationId": "parking-places-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateParkingPlaceDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ParkingPlaceDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Requested zone resource does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 303,
                      "message": "Zone not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk create parking places",
        "tags": [
          "parking places"
        ]
      },
      "get": {
        "description": "Lists the parking places of lots with parking detection, with each place's `occupancy_status`: `free`, `occupied` or `unknown`. Without the `PARKING_DETECTION` feature, every place reads `unknown`. See the [Live occupancy](/guides/live-occupancy) guide.",
        "operationId": "parking-places-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `lot_id`, `lot_ids`, `name`, `occupancy_status`, `uuid`, `zone_id`, `zone_ids`, `external_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "lotIds": {
                "summary": "Filter by lot_ids",
                "value": [
                  "lot_ids:eq:1,2,3"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "occupancyStatus": {
                "summary": "Filter by occupancy_status",
                "value": [
                  "occupancy_status:eq:occupied"
                ]
              },
              "uuid": {
                "summary": "Filter by uuid",
                "value": [
                  "uuid:eq:123e4567-e89b-12d3-a456-426614174000"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "zoneIds": {
                "summary": "Filter by zone_ids",
                "value": [
                  "zone_ids:eq:1,2,3"
                ]
              },
              "externalId": {
                "summary": "Filter by external_id",
                "value": [
                  "external_id:eq:EXT-12345"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ParkingPlaceDto"
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": [
                    {
                      "id": 301,
                      "lot_id": 7,
                      "zone_id": 9,
                      "name": "Spot 12",
                      "occupancy_status": "occupied",
                      "external_id": null,
                      "uuid": "10ba038e-48da-487b-96e8-8d3b99b6d18a",
                      "deleted_at": null,
                      "created_at": "2026-01-15T09:30:00.000Z",
                      "updated_at": "2026-03-02T08:12:40.000Z"
                    }
                  ],
                  "meta": {
                    "total": 1,
                    "per_page": 10,
                    "current_page": 1,
                    "last_page": 1,
                    "first_page": 1,
                    "first_page_url": "/?page=1",
                    "last_page_url": "/?page=1",
                    "next_page_url": "/?page=2",
                    "previous_page_url": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List parking places",
        "tags": [
          "parking places"
        ],
        "x-position": 1
      }
    },
    "/v2/lot-share-views": {
      "post": {
        "description": "Creates a **public** web page with live occupancy for some zones of a lot, viewable without logging in. The response's `url` is the page: share it as you would a password.\n\n- `zone_ids`: at least one zone of the lot.\n- `lot_share_view_type`: `counts_only`, `live_camera` (needs a parking-detection camera in a zone) or `vector_map` (needs zones with a map).\n\nRevoke it with `PATCH /v2/lot-share-views/{id}` and `{\"revoked\": true}`. See the [Live occupancy](/guides/live-occupancy#6-share-a-live-view) guide.",
        "operationId": "lot-share-views-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLotShareViewDto"
              },
              "example": {
                "lot_id": 7,
                "zone_ids": [
                  9,
                  10
                ],
                "lot_share_view_type": "counts_only"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotShareViewDto"
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": {
                    "id": 21,
                    "revoked": false,
                    "url": "https://api.parklio.com/v2/lot-share-views/display/<share-token>",
                    "lot_share_view_type": "counts_only",
                    "lot": {
                      "id": 7,
                      "name": "Main garage",
                      "spot_count": 120,
                      "occupied_count": 42
                    },
                    "zones": [
                      {
                        "id": 9,
                        "name": "Level -1",
                        "spot_count": 80,
                        "occupied_count": 30
                      },
                      {
                        "id": 10,
                        "name": "Level -2",
                        "spot_count": 40,
                        "occupied_count": 12
                      }
                    ],
                    "created_at": "2026-01-15T09:30:00.000Z",
                    "updated_at": "2026-01-15T09:30:00.000Z"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a lot share view",
        "tags": [
          "lot share views"
        ],
        "x-position": 1
      },
      "get": {
        "description": "This endpoint allows the user to list all lot share views",
        "operationId": "lot-share-views-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `is_revoked`, `zone_id`, `lot_id`, `lot_share_view_type`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "isRevoked": {
                "summary": "Filter by is_revoked",
                "value": [
                  "is_revoked:eq:true"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "lotShareViewType": {
                "summary": "Filter by lot_share_view_type",
                "value": [
                  "lot_share_view_type:eq:counts_only"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/LotShareViewDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all lot share views",
        "tags": [
          "lot share views"
        ]
      }
    },
    "/v2/lots/{id}": {
      "patch": {
        "description": "This endpoint allows the user to update lots by id",
        "operationId": "lots-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLotDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "You cannot update lot detection parameters without an valid lot detection on the lot. Please add parking detection to the lot first.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 304,
                      "message": "No Parking detection active for lot."
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update lots",
        "tags": [
          "lots"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete lots by id",
        "operationId": "lots-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete lots",
        "tags": [
          "lots"
        ]
      },
      "get": {
        "description": "Returns one lot, with its occupancy totals. See [Live occupancy](/guides/live-occupancy).",
        "operationId": "lots-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The lot's `id`."
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a lot",
        "tags": [
          "lots"
        ],
        "x-position": 2
      }
    },
    "/v2/gateways/{id}": {
      "get": {
        "description": "Returns one Gateway and its `status`.",
        "operationId": "gateways-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The Gateway's `id`."
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GatewayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a Gateway",
        "tags": [
          "gateways"
        ],
        "x-position": 2
      },
      "patch": {
        "description": "This endpoint allows the user to update gateways by id",
        "operationId": "gateways-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGatewayDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GatewayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update gateways",
        "tags": [
          "gateways"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete gateways by id",
        "operationId": "gateways-unassign",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gateway successfuly unassigned.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Gateway successfuly unassigned."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete gateways",
        "tags": [
          "gateways"
        ]
      }
    },
    "/v2/zones/{id}": {
      "get": {
        "description": "Returns one zone, with its counts and assigned tariffs.",
        "operationId": "zones-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The zone's `id`."
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a zone",
        "tags": [
          "zones"
        ],
        "x-position": 2
      },
      "patch": {
        "description": "This endpoint allows the user to update zones by id",
        "operationId": "zones-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateZoneDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update zones",
        "tags": [
          "zones"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete zones by id",
        "operationId": "zones-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete zones",
        "tags": [
          "zones"
        ]
      }
    },
    "/v2/products/{id}": {
      "get": {
        "description": "Returns one product with its current state, type block and error flags. Re-read a product with it when you gave up waiting for a command's result. See [Products and operations](/concepts/products-and-operations).",
        "operationId": "products-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The product's `id`."
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProductDto"
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": {
                    "id": 124,
                    "device_id": "G7654321",
                    "name": "Main gate",
                    "power_type": "grid",
                    "lot_id": 7,
                    "zone_id": 9,
                    "product_type_id": 3,
                    "hardware_version": null,
                    "firmware_version": null,
                    "latitude": 45.815,
                    "longitude": 15.982,
                    "status": "online",
                    "advertisement_data": "<base64>",
                    "battery_status": null,
                    "rssi": -64,
                    "product_error": null,
                    "created_at": "2026-01-15T09:30:00.000Z",
                    "updated_at": "2026-01-15T09:30:00.000Z",
                    "gate": {
                      "id": 12,
                      "product_id": 124,
                      "state": "closed",
                      "permanent_position": "disabled",
                      "deleted_at": null,
                      "created_at": "2026-01-15T09:30:00.000Z",
                      "updated_at": "2026-01-15T09:30:00.000Z"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a product",
        "tags": [
          "products"
        ],
        "x-position": 2
      },
      "patch": {
        "description": "This endpoint allows the user to patch a product assigned to his account",
        "operationId": "products-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProductDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProductDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Cannot be moved between different lots.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1000,
                      "message": "Cannot move to different lot."
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Patch a product",
        "tags": [
          "products"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to unassign a product from his\n    account. Allowing the other users to add it to their accounts.",
        "operationId": "products-unassign",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unassign a product",
        "tags": [
          "products"
        ]
      }
    },
    "/v2/api-tokens/{id}": {
      "get": {
        "description": "This endpoint allows the user to get api-tokens by id",
        "operationId": "api-token-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ApiTokenDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get api-tokens",
        "tags": [
          "api tokens"
        ]
      },
      "delete": {
        "description": "Revokes an API token. Requests made with it fail from then on. Only a Super Admin can call it.",
        "operationId": "api-token-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The API token's `id` (not the token value)."
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete an API token",
        "tags": [
          "api tokens"
        ],
        "x-position": 3
      }
    },
    "/v2/sessions/{id}": {
      "get": {
        "description": "Returns one session.",
        "operationId": "sessions-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The session's `id`."
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/SessionDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a session",
        "tags": [
          "sessions"
        ],
        "x-position": 3
      },
      "patch": {
        "description": "This endpoint allows the user to update sessions by id",
        "operationId": "sessions-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSessionDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/SessionDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update sessions",
        "tags": [
          "sessions"
        ]
      }
    },
    "/v2/lot-whitelists/{id}": {
      "get": {
        "description": "This endpoint allows the user to get lot whitelists by id",
        "operationId": "lot-whitelist-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotWhitelistDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get lot whitelists",
        "tags": [
          "lot whitelists"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update lot whitelists by id",
        "operationId": "lot-whitelist-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLotWhitelistDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotWhitelistDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update lot whitelists",
        "tags": [
          "lot whitelists"
        ]
      },
      "delete": {
        "description": "Removes a plate's whitelist entry, so the plate no longer gets in through the whitelist. Its product bindings stay, and apply again if the plate is whitelisted later.",
        "operationId": "lot-whitelist-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The entry's `id` (`whitelist_id` in the create response)."
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete a lot whitelist entry",
        "tags": [
          "lot whitelists"
        ],
        "x-position": 3
      }
    },
    "/v2/operation-tokens/{id}": {
      "get": {
        "description": "Returns one operation token.",
        "operationId": "operation-tokens-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The operation token's `id`."
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OperationTokenDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get an operation token",
        "tags": [
          "operation tokens"
        ],
        "x-position": 3
      },
      "patch": {
        "description": "Marks a token `blocked`. The only accepted body is `{\"status\": \"blocked\"}`.\n\n**This doesn't reach the device:** a copy your app already holds keeps working until `end_time`. Keep windows short instead. See [Operation tokens for your app](/guides/mobile-app-operation-tokens#2-keep-windows-short).",
        "operationId": "operation-tokens-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The operation token's `id`."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateOperationTokenDto"
              },
              "example": {
                "status": "blocked"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OperationTokenDto"
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": {
                    "id": 9001,
                    "product_id": 123,
                    "start_time": "2026-03-02T08:00:00.000Z",
                    "end_time": "2026-03-02T10:00:00.000Z",
                    "status": "blocked",
                    "used_count": 0,
                    "is_unlimited": 0,
                    "token_open": {
                      "token": "<hex>",
                      "status_key": "<hex>",
                      "challenge_key": "<hex>"
                    },
                    "token_close": {
                      "token": "<hex>",
                      "status_key": "<hex>",
                      "challenge_key": "<hex>"
                    },
                    "token_status": {
                      "token": "<hex>",
                      "status_key": "<hex>",
                      "challenge_key": "<hex>"
                    },
                    "product": {
                      "id": 123,
                      "device_id": "B1234567"
                    },
                    "created_at": "2026-03-02T07:59:58.000Z",
                    "updated_at": "2026-03-02T08:30:00.000Z"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Block an operation token",
        "tags": [
          "operation tokens"
        ],
        "x-position": 4
      },
      "delete": {
        "description": "This endpoint allows the user to delete operation tokens by id",
        "operationId": "operation-tokens-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete operation tokens",
        "tags": [
          "operation tokens"
        ]
      }
    },
    "/v2/products/{id}/state": {
      "post": {
        "description": "Sends an operation to a product through a Gateway. **Asynchronous:** the response is an `event_id`, and the result arrives later over [realtime](/realtime/connecting): a `lot_change` with the same `event_id` on success, or a `gateway_error` on failure. Connect to realtime **before** you call this.\n\n| Operation | Barrier | Gate, chain, bollard, brain |\n| --- | --- | --- |\n| `open` | arm lowers | passage opens |\n| `close` | arm rises | passage closes |\n| `force_close` | ✅ | — |\n| `stay_open`, `stay_close`, `clear_stay_open`, `clear_stay_close` | — | ✅ |\n\nThe API doesn't check the combination: check it yourself. Needs the `REMOTE_CONTROL` feature.\n\nErrors before anything is sent: `214` (an operation on this product is still running), `704` (no Gateway sees the product), `206` (not paired), `30` (no remote control in the subscription).\n\nSee [Asynchronous operations](/concepts/asynchronous-operations) and the [Remote control](/guides/remote-control) guide.",
        "operationId": "products-change-state",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The product's `id`."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeProductStateDto"
              },
              "example": {
                "operation": "open"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/EventDto"
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": {
                    "event_id": "a1b2c3d4"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Operate a product",
        "tags": [
          "products"
        ],
        "x-position": 3
      }
    },
    "/v2/sessions/{id}/close": {
      "post": {
        "description": "Ends a session now: sets `ended_at`, and `exit` with type `account` (API token) or `attendant` (user token). No body.\n\nIt doesn't check that the session is still open, and doesn't change the zone's `occupied_count`: check `ended_at` first.",
        "operationId": "sessions-close",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The session's `id`."
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/SessionDto"
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": {
                    "id": 501,
                    "public_id": "K7Q2M9X4TB",
                    "duration": 7200,
                    "amount_paid": 0,
                    "exit_allowed": false,
                    "entry_license_plate": {
                      "id": 9001,
                      "plate": "ZG1234AB",
                      "image_url": null,
                      "cropped_image_url": null
                    },
                    "created_at": "2026-03-02T08:12:41.000Z",
                    "entry": {
                      "id": 3,
                      "type": "account"
                    },
                    "zone_id": 9,
                    "ended_at": "2026-03-02T10:12:41.000Z",
                    "exit": {
                      "id": 3,
                      "type": "account"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Close a session",
        "tags": [
          "sessions"
        ],
        "x-position": 4
      }
    },
    "/v2/products/{id}/settings": {
      "post": {
        "description": "Changes a barrier's auto-close, through a Gateway. Send **one** setting per call:\n\n- `is_autoclose`: `true` or `false` (a JSON boolean, not `1`/`0`);\n- `autoclose_time`: the delay in seconds, 5–60.\n\nIf you send both, only `is_autoclose` is applied. An empty body fails.\n\n**Asynchronous**, like [Operate a product](/api/endpoints/products-change-state): the response is an `event_id`, and the result arrives as a realtime `lot_change` or `gateway_error`. In `lot_change`, the barrier block calls these fields `is_auto_close` and `auto_close_time`. Needs the `REMOTE_CONTROL` feature.",
        "operationId": "products-change-settings",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The barrier's product `id`."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeProductSettingsDto"
              },
              "example": {
                "autoclose_time": 30
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/EventDto"
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "success": true,
                  "data": {
                    "event_id": "a1b2c3d4"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Change barrier settings",
        "tags": [
          "products"
        ],
        "x-position": 4
      }
    },
    "/v2/products/errors": {
      "get": {
        "description": "Lists the products that currently report at least one error flag (`jammed`, `sensor_dirty`, `pin_broken`, `rtcc_invalid`, `battery_empty`, `master_key_not_set`). Use it for a maintenance view. See the [Monitor devices](/guides/monitor-devices) guide.",
        "operationId": "products-find-all-product-errors",
        "parameters": [
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`, `created_at`, `updated_at`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "createdAtAscending": {
                "summary": "Sort by created_at ascending",
                "value": [
                  "created_at:asc"
                ]
              },
              "createdAtDescending": {
                "summary": "Sort by created_at descending",
                "value": [
                  "created_at:desc"
                ]
              },
              "updatedAtAscending": {
                "summary": "Sort by updated_at ascending",
                "value": [
                  "updated_at:asc"
                ]
              },
              "updatedAtDescending": {
                "summary": "Sort by updated_at descending",
                "value": [
                  "updated_at:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `lot_id`, `name`, `product_type_id`, `zone_id`, `device_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "productTypeId": {
                "summary": "Filter by product_type_id",
                "value": [
                  "product_type_id:eq:1"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "deviceId": {
                "summary": "Filter by device_id",
                "value": [
                  "device_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ProductErrorDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List products with errors",
        "tags": [
          "products"
        ],
        "x-position": 5
      }
    },
    "/v2/products/{id}/bind-licenses": {
      "post": {
        "description": "Lets whitelisted license plates open this product. When an LPR camera in the product's **zone** reads a bound plate on the way **in**, and the plate is on an active [lot whitelist](/api/endpoints/lot-whitelist-create) entry, Parklio opens the first bound product that's online and closed.\n\n`license_ids` are the `license_id` values returned by [Create lot whitelist entries](/api/endpoints/lot-whitelist-create). Unknown ids are ignored silently: check with [`GET /v2/products/{id}/bound-licenses`](/api/endpoints/products-find-all-binds). See the [Plate-based access](/guides/plate-based-access) guide.",
        "operationId": "products-bind-license-for-product",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "description": "The product's `id`."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BindLicenseDto"
              },
              "example": {
                "license_ids": [
                  88,
                  89
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Bind success",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Bind success"
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bind plates to a product",
        "tags": [
          "products"
        ],
        "x-position": 6
      }
    },
    "/v2/products/bind-licenses": {
      "post": {
        "description": "Binds the same plates to several products at once. Same rules as [Bind plates to a product](/api/endpoints/products-bind-license-for-product): `license_ids` are `license_id` values from the lot whitelist, and unknown ids are ignored silently.",
        "operationId": "products-bind-license-for-products",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BindLicensesDto"
              },
              "example": {
                "product_ids": [
                  123,
                  124
                ],
                "license_ids": [
                  88,
                  89
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Bind success",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Bind success"
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bind plates to several products",
        "tags": [
          "products"
        ],
        "x-position": 7
      }
    },
    "/v2/accounts/auto-extend": {
      "post": {
        "description": "Accept auto extend barrier option",
        "operationId": "accounts-accept-auto-extend",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Auto extended accepted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Auto extended accepted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Accept auto extend",
        "tags": [
          "accounts"
        ]
      }
    },
    "/v2/accounts/profile": {
      "get": {
        "description": "Get self account profile data",
        "operationId": "accounts-profile",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/AccountDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get profile",
        "tags": [
          "accounts"
        ]
      },
      "patch": {
        "description": "Update self account profile data",
        "operationId": "accounts-update-profile",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAccountDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/AccountDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update profile",
        "tags": [
          "accounts"
        ]
      }
    },
    "/v2/accounts/product-counts": {
      "get": {
        "description": "Get produt count for authorized account",
        "operationId": "accounts-get-product-count-for-profile",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ActiveProductsDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get product count",
        "tags": [
          "accounts"
        ]
      }
    },
    "/v2/accounts/product-licenses": {
      "get": {
        "description": "Get product licenses for authorized account",
        "operationId": "accounts-get-product-licenses-for-profile",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProductLicenseSummaryDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get product licenses for account",
        "tags": [
          "accounts"
        ]
      }
    },
    "/v2/lots/{id}/managers": {
      "get": {
        "description": "This endpoint allows the user to list all lot managers",
        "operationId": "lots-find-managers-by-lot",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `email`, `name`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "email": {
                "summary": "Filter by email",
                "value": [
                  "email:eq:john.doe@example.com"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:defualt lot"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `email`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "emailAscending": {
                "summary": "Sort by email ascending",
                "value": [
                  "email:asc"
                ]
              },
              "emailDescending": {
                "summary": "Sort by email descending",
                "value": [
                  "email:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ListLotManagersDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all lot managers",
        "tags": [
          "lots"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update lot managers by id",
        "operationId": "lots-update-managers",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLotManagersDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "example": {
                    "success": true,
                    "data": [
                      {
                        "success": true,
                        "id": 1,
                        "account_user_id": 1
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update lot managers",
        "tags": [
          "lots"
        ]
      }
    },
    "/v2/lots/{id}/managers/{managerId}": {
      "delete": {
        "description": "This endpoint allows the user to delete lot managers by id",
        "operationId": "lots-remove-lot-manager",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "managerId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete lot managers",
        "tags": [
          "lots"
        ]
      }
    },
    "/v2/parking-place-changes/export": {
      "get": {
        "description": "This endpoint allows the user to get the parking place changes CSV file",
        "operationId": "parking-place-changes-export-to-csv",
        "parameters": [
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `duration`, `lot_id`, `lot_ids`, `parking_place_id`, `parking_place_ids`, `occupancy_status`, `zone_id`, `zone_ids`, `created_at`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "duration": {
                "summary": "Filter by duration",
                "value": [
                  "duration:eq:3600"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "lotIds": {
                "summary": "Filter by lot_ids",
                "value": [
                  "lot_ids:eq:1,2,3"
                ]
              },
              "parkingPlaceId": {
                "summary": "Filter by parking_place_id",
                "value": [
                  "parking_place_id:eq:1"
                ]
              },
              "parkingPlaceIds": {
                "summary": "Filter by parking_place_ids",
                "value": [
                  "parking_place_ids:eq:1,2,3"
                ]
              },
              "occupancyStatus": {
                "summary": "Filter by occupancy_status",
                "value": [
                  "occupancy_status:eq:occupied"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "zoneIds": {
                "summary": "Filter by zone_ids",
                "value": [
                  "zone_ids:eq:1,2,3"
                ]
              },
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get parking place changes CSV file",
        "tags": [
          "parking place changes"
        ]
      }
    },
    "/v2/parking-place-changes/{id}": {
      "get": {
        "description": "This endpoint allows the user to get parking place changes by id",
        "operationId": "parking-place-changes-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ParkingPlaceChangeDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get parking place changes",
        "tags": [
          "parking place changes"
        ]
      }
    },
    "/v2/account-users/profile": {
      "get": {
        "description": "Get self account user data",
        "operationId": "account-users-profile",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/AccountUserDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get self account user",
        "tags": [
          "account users"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update account users profile by id",
        "operationId": "account-users-update-self",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProfileDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/AccountUserDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update account users profile",
        "tags": [
          "account users"
        ]
      }
    },
    "/v2/account-users": {
      "post": {
        "description": "Invite an account user to Parklio™ system under specific account user role",
        "operationId": "account-users-invite-account-uer",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InviteAccountUserDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Account user successfully invited.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Account user successfully invited."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Invite Account user",
        "tags": [
          "account users"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all account users",
        "operationId": "account-users-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `name`, `email`, `account_role_id`, `account_name`, `lots`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "email": {
                "summary": "Filter by email",
                "value": [
                  "email:eq:john.doe@example.com"
                ]
              },
              "accountRoleId": {
                "summary": "Filter by account_role_id",
                "value": [
                  "account_role_id:eq:1"
                ]
              },
              "accountName": {
                "summary": "Filter by account_name",
                "value": [
                  "account_name:eq:Acme Inc"
                ]
              },
              "lots": {
                "summary": "Filter by lots",
                "value": [
                  "lots:eq:1,2,3"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`, `email`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "emailAscending": {
                "summary": "Sort by email ascending",
                "value": [
                  "email:asc"
                ]
              },
              "emailDescending": {
                "summary": "Sort by email descending",
                "value": [
                  "email:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/AccountUserDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all account users",
        "tags": [
          "account users"
        ]
      }
    },
    "/v2/account-users/{id}": {
      "get": {
        "description": "This endpoint allows the user to get account users by id",
        "operationId": "account-users-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/AccountUserDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get account users",
        "tags": [
          "account users"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update account users by id",
        "operationId": "account-users-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAccountUserDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/AccountUserDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update account users",
        "tags": [
          "account users"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete account users by id",
        "operationId": "account-users-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "400": {
            "description": "This is a generic bad request error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponseDto"
                },
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 33,
                      "message": "This is a generic bad request error"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete account users",
        "tags": [
          "account users"
        ]
      }
    },
    "/v2/gateways/{id}/operation": {
      "post": {
        "description": "This endpoint serves as the command center for managing a \n      gateway device, enabling users to execute essential operations such as\n      rebooting, info or forcing a scan.\n    ",
        "operationId": "gateways-run-operation",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GatewayOperationDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GatewayOperationResponseDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Run a operation on a gateway",
        "tags": [
          "gateways"
        ]
      }
    },
    "/v2/zones/{id}/vector": {
      "get": {
        "description": "Returns the zone's vector map as a raw SVG, with each parking place dot colored according to its current occupancy status.",
        "operationId": "zones-get-vector",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The populated vector map SVG"
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get populated vector map for a zone",
        "tags": [
          "zones"
        ]
      }
    },
    "/v2/zones/{id}/tariffs/{tariffId}": {
      "put": {
        "description": "This endpoint allows the user to assign zone tariffs by id",
        "operationId": "zones-assign-member",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "tariffId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Assign zone tariffs",
        "tags": [
          "zones"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to unassign zone tariffs by id",
        "operationId": "zones-unassign-member",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tariffId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unassign zone tariffs",
        "tags": [
          "zones"
        ]
      }
    },
    "/v2/zones/{id}/tariffs": {
      "post": {
        "description": "This endpoint allows the user to bulk assign zone tariffs by using their ids",
        "operationId": "zones-assign-members",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignTariffsToZoneDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk assign zone tariffs",
        "tags": [
          "zones"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to bulk unassign zone tariffs by using their ids",
        "operationId": "zones-unassign-members",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnssignTariffsFromZoneDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk unassign zone tariffs",
        "tags": [
          "zones"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to replace zone tariffs by id",
        "operationId": "zones-replace-members",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceTariffsForZone"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Replace zone tariffs",
        "tags": [
          "zones"
        ]
      }
    },
    "/v2/zones/{zone_id}/tariffs/{tariff_id}": {
      "patch": {
        "description": "This endpoint allows the user to update zone tariff order by id",
        "operationId": "zones-update-order",
        "parameters": [
          {
            "name": "zone_id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tariff_id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTariffOrderDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update zone tariff order",
        "tags": [
          "zones"
        ]
      }
    },
    "/v2/tariffs/{id}": {
      "get": {
        "description": "This endpoint allows the user to get tariffs by id",
        "operationId": "tariffs-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TariffDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get tariffs",
        "tags": [
          "tariffs"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to replace tariffs by id",
        "operationId": "tariffs-replace-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceTariffDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TariffDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Replace tariffs",
        "tags": [
          "tariffs"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update tariffs by id",
        "operationId": "tariffs-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTariffDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TariffDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update tariffs",
        "tags": [
          "tariffs"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete tariffs by id",
        "operationId": "tariffs-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete tariffs",
        "tags": [
          "tariffs"
        ]
      }
    },
    "/v2/tariffs/{id}/groups/{groupId}": {
      "put": {
        "description": "This endpoint allows the user to assign tariff groups by id",
        "operationId": "tariffs-assign-member",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "groupId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TariffDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Assign tariff groups",
        "tags": [
          "tariffs"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to unassign tariff groups by id",
        "operationId": "tariffs-unassign-member",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "groupId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TariffDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unassign tariff groups",
        "tags": [
          "tariffs"
        ]
      }
    },
    "/v2/tariffs/{id}/groups": {
      "post": {
        "description": "This endpoint allows the user to bulk assign tariff groups by using their ids",
        "operationId": "tariffs-assign-members",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignGroupsToTariffDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TariffDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk assign tariff groups",
        "tags": [
          "tariffs"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to bulk unassign tariff groups by using their ids",
        "operationId": "tariffs-unassign-members",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignGroupsToTariffDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TariffDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk unassign tariff groups",
        "tags": [
          "tariffs"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to replace tariff groups by id",
        "operationId": "tariffs-replace-members",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceGroupsForTariffDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TariffDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Replace tariff groups",
        "tags": [
          "tariffs"
        ]
      }
    },
    "/v2/groups": {
      "post": {
        "description": "This endpoint allows the user to create groups",
        "operationId": "groups-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateGroupDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GroupDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create groups",
        "tags": [
          "groups"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all groups",
        "operationId": "groups-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `name`, `created_at`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/GroupDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all groups",
        "tags": [
          "groups"
        ]
      }
    },
    "/v2/groups/{id}": {
      "get": {
        "description": "This endpoint allows the user to get groups by id",
        "operationId": "groups-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GroupDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get groups",
        "tags": [
          "groups"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to replace groups by id",
        "operationId": "groups-replace-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceGroupDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GroupDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Replace groups",
        "tags": [
          "groups"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update groups by id",
        "operationId": "groups-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGroupDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GroupDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update groups",
        "tags": [
          "groups"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete groups by id",
        "operationId": "groups-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete groups",
        "tags": [
          "groups"
        ]
      }
    },
    "/v2/groups/{id}/members/{memberId}": {
      "put": {
        "description": "This endpoint allows the user to assign group members by id",
        "operationId": "groups-assign-member",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "memberId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GroupDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Assign group members",
        "tags": [
          "groups"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to unassign group members by id",
        "operationId": "groups-unassign-member",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "memberId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GroupDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unassign group members",
        "tags": [
          "groups"
        ]
      }
    },
    "/v2/groups/{id}/members": {
      "post": {
        "description": "This endpoint allows the user to bulk assign group members by using their ids",
        "operationId": "groups-assign-members",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignMembersToGroupDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GroupDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk assign group members",
        "tags": [
          "groups"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to bulk unassign group members by using their ids",
        "operationId": "groups-unassign-members",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignMembersToGroupDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GroupDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk unassign group members",
        "tags": [
          "groups"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to replace group members by id",
        "operationId": "groups-replace-members",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceMembersForGroupDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GroupDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Replace group members",
        "tags": [
          "groups"
        ]
      }
    },
    "/v2/members/upload": {
      "post": {
        "operationId": "members-create-from-file",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Upload a CSV file"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/FileUploadResponse"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create new members from a CSV file",
        "tags": [
          "members"
        ]
      }
    },
    "/v2/members/sample/export": {
      "get": {
        "description": "This endpoint provides a sample CSV file formatted for creating new members. Use this file as a template for uploading members.",
        "operationId": "members-export-sample-csv",
        "parameters": [],
        "responses": {
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Download members sample CSV file",
        "tags": [
          "members"
        ]
      }
    },
    "/v2/members/{id}": {
      "get": {
        "description": "This endpoint allows the user to get members by id",
        "operationId": "members-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/MemberDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get members",
        "tags": [
          "members"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to replace members by id",
        "operationId": "members-replace-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceMemberDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/MemberDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Replace members",
        "tags": [
          "members"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update members by id",
        "operationId": "members-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMemberDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/MemberDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update members",
        "tags": [
          "members"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete members by id",
        "operationId": "members-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete members",
        "tags": [
          "members"
        ]
      }
    },
    "/v2/lpr-cameras": {
      "post": {
        "description": "This endpoint serves the purpose of assigning a parklio lpr\n    camera to the account of the authorised user. Assigning is done by scanning\n    the UUID sticker located on the LPR Camera.",
        "operationId": "lpr-cameras-assign",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignLprCameraDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LprCameraDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Assign a new LPR Camera to an account",
        "tags": [
          "lpr cameras"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all lpr cameras",
        "operationId": "lpr-cameras-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `lot_id`, `name`, `position`, `status`, `zone_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "position": {
                "summary": "Filter by position",
                "value": [
                  "position:eq:in"
                ]
              },
              "status": {
                "summary": "Filter by status",
                "value": [
                  "status:eq:online"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`, `updated_at`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "updatedAtAscending": {
                "summary": "Sort by updated_at ascending",
                "value": [
                  "updated_at:asc"
                ]
              },
              "updatedAtDescending": {
                "summary": "Sort by updated_at descending",
                "value": [
                  "updated_at:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/LprCameraDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all lpr cameras",
        "tags": [
          "lpr cameras"
        ]
      }
    },
    "/v2/lpr-cameras/axis": {
      "post": {
        "description": "This endpoint serves the purpose of assigning a parklio lpr\n    camera to the account of the authorised user. Assigning is done by scanning\n    the UUID sticker located on the LPR Camera.",
        "operationId": "lpr-cameras-axis-assign",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignAxisLprCameraDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LprCameraDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "LPR has owner already set and trying to set another one won't work. User should first unassign LPR owner before trying again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 223,
                      "message": "Lpr camera owner already set."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Assign a new Axis LPR Camera to an account",
        "tags": [
          "lpr cameras"
        ]
      }
    },
    "/v2/lpr-cameras/{id}/state-changes": {
      "get": {
        "description": "This endpoint allows the user to list all lpr camera state changes",
        "operationId": "lpr-cameras-find-state-changes",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`, `created_at`, `status`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "createdAtAscending": {
                "summary": "Sort by created_at ascending",
                "value": [
                  "created_at:asc"
                ]
              },
              "createdAtDescending": {
                "summary": "Sort by created_at descending",
                "value": [
                  "created_at:desc"
                ]
              },
              "statusAscending": {
                "summary": "Sort by status ascending",
                "value": [
                  "status:asc"
                ]
              },
              "statusDescending": {
                "summary": "Sort by status descending",
                "value": [
                  "status:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/LprCameraStateChangeDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all lpr camera state changes",
        "tags": [
          "lpr cameras"
        ]
      }
    },
    "/v2/lpr-cameras/{id}": {
      "get": {
        "description": "This endpoint allows the user to get lpr cameras by id",
        "operationId": "lpr-cameras-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LprCameraDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get lpr cameras",
        "tags": [
          "lpr cameras"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update lpr cameras by id",
        "operationId": "lpr-cameras-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLprCameraDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LprCameraDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have sufficient account role to perform the desired action. Parklio could upgrade his account role.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 11,
                      "message": "Not allowed for undefined account role."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update lpr cameras",
        "tags": [
          "lpr cameras"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete lpr cameras by id",
        "operationId": "lpr-cameras-unassign",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have sufficient account role to perform the desired action. Parklio could upgrade his account role.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 11,
                      "message": "Not allowed for undefined account role."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete lpr cameras",
        "tags": [
          "lpr cameras"
        ]
      }
    },
    "/v2/lpr-cameras/{id}/informations": {
      "get": {
        "description": "This endpoint returns the credentials used for the LPR Camera\n    setup. Using this information, the camera can be authenticated to the\n    Parklio Server",
        "operationId": "lpr-cameras-get-information",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/InformationLprCameraDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get the setup information for the LPR Camera.",
        "tags": [
          "lpr cameras"
        ]
      }
    },
    "/v2/lpr-cameras/{id}/state": {
      "post": {
        "description": "This enpoint sends a OPEN operation to the camera. The open\n      operation will trigger a signal on the LPR Camera output which can be\n      used as input into any supported hardware, triggering an operation on the\n      device. For example, if the LPR Cameras output is connected to a Gate\n      input, it will trigger a change of state on the Gate.",
        "operationId": "lpr-cameras-change-state",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeLprCameraStateDto"
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "LPR camera is not connected.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 802,
                      "message": "LPR camera is offline."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Send the open signal to the camera",
        "tags": [
          "lpr cameras"
        ]
      }
    },
    "/v2/lpr-cameras/{id}/reboot": {
      "post": {
        "description": "This enpoint sends a REBOOT comand to the LPR Camera, the\n    camera will reboot and come back online after a minute. Useful when an\n    problem happens with the camera.",
        "operationId": "lpr-cameras-reboot",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "LPR camera is not connected.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 802,
                      "message": "LPR camera is offline."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Reboot the LPR Camera",
        "tags": [
          "lpr cameras"
        ]
      }
    },
    "/v2/logs/lpr-remote-controls": {
      "get": {
        "description": "This endpoint allows the user to list all lpr remote controls",
        "operationId": "lpr-remote-control-logs-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `lot_id`, `zone_id`, `lpr_camera_device_id`, `lpr_camera_name`, `account_user_id`, `account_user_name`, `operation`, `date_from`, `date_to`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "lprCameraDeviceId": {
                "summary": "Filter by lpr_camera_device_id",
                "value": [
                  "lpr_camera_device_id:eq:1"
                ]
              },
              "lprCameraName": {
                "summary": "Filter by lpr_camera_name",
                "value": [
                  "lpr_camera_name:eq:john doe"
                ]
              },
              "accountUserId": {
                "summary": "Filter by account_user_id",
                "value": [
                  "account_user_id:eq:1"
                ]
              },
              "accountUserName": {
                "summary": "Filter by account_user_name",
                "value": [
                  "account_user_name:eq:john doe"
                ]
              },
              "operation": {
                "summary": "Filter by operation",
                "value": [
                  "operation:eq:open"
                ]
              },
              "dateFrom": {
                "summary": "Filter by date_from",
                "value": [
                  "date_from:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "dateTo": {
                "summary": "Filter by date_to",
                "value": [
                  "date_to:eq:2024-01-31T00:00:00.000Z"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/LprRemoteControlLogDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all lpr remote controls",
        "tags": [
          "logs"
        ]
      }
    },
    "/v2/logs/lpr-remote-controls/{id}": {
      "get": {
        "description": "This endpoint allows the user to get lpr remote controls by id",
        "operationId": "lpr-remote-control-logs-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LprRemoteControlLogDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get lpr remote controls",
        "tags": [
          "logs"
        ]
      }
    },
    "/v2/plate-readings/{id}": {
      "get": {
        "description": "This endpoint allows the user to get plate-readings by id",
        "operationId": "plate-readings-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/PlateReadingDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get plate-readings",
        "tags": [
          "plate readings"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update plate-readings by id",
        "operationId": "plate-readings-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePlateReadingDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/PlateReadingDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update plate-readings",
        "tags": [
          "plate readings"
        ]
      }
    },
    "/v2/proactive-alerts/{id}/receivers": {
      "post": {
        "description": "This endpoint allows the user to bulk create proactive alerts",
        "operationId": "proactive-alerts-assign-receivers",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignProactiveAlertReciversDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProactiveAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk create proactive alerts",
        "tags": [
          "proactive alerts"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to bulk put proactive alerts",
        "operationId": "proactive-alerts-replace-receivers",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignProactiveAlertReciversDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProactiveAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk put proactive alerts",
        "tags": [
          "proactive alerts"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to bulk unassign proactive alert receivers by using their ids",
        "operationId": "proactive-alerts-unassign-recivers",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnassignReceiversProacticeAlertDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProactiveAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk unassign proactive alert receivers",
        "tags": [
          "proactive alerts"
        ]
      }
    },
    "/v2/proactive-alerts/{alertId}/receivers/{receiverId}": {
      "put": {
        "description": "This endpoint allows the user to put proactive alerts receivers by id",
        "operationId": "proactive-alerts-assign-single",
        "parameters": [
          {
            "name": "alertId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "receiverId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProactiveAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Put proactive alerts receivers",
        "tags": [
          "proactive alerts"
        ]
      }
    },
    "/v2/proactive-alerts/{id}": {
      "put": {
        "description": "This endpoint allows the user to put proactive alerts by id",
        "operationId": "proactive-alerts-replace-alerts",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceProactiveAlertsDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProactiveAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Put proactive alerts",
        "tags": [
          "proactive alerts"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to get proactive alerts by id",
        "operationId": "proactive-alerts-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProactiveAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get proactive alerts",
        "tags": [
          "proactive alerts"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update proactive alerts by id",
        "operationId": "proactive-alerts-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProactiveAlertDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProactiveAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update proactive alerts",
        "tags": [
          "proactive alerts"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete proactive alerts by id",
        "operationId": "proactive-alerts-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete proactive alerts",
        "tags": [
          "proactive alerts"
        ]
      }
    },
    "/v2/proactive-alerts": {
      "post": {
        "description": "This endpoint allows the user to create proactive alerts",
        "operationId": "proactive-alerts-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProactiveAlertDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProactiveAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create proactive alerts",
        "tags": [
          "proactive alerts"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all proactive alerts",
        "operationId": "proactive-alerts-find-all",
        "parameters": [
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `created_at`, `lot_id`, `zone_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ProactiveAlertDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all proactive alerts",
        "tags": [
          "proactive alerts"
        ]
      }
    },
    "/v2/proactive-alerts/{id}/receivers/{reciverId}": {
      "delete": {
        "description": "This endpoint allows the user to unassign proactive alert receivers by id",
        "operationId": "proactive-alerts-unassign-single-reciver",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reciverId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProactiveAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unassign proactive alert receivers",
        "tags": [
          "proactive alerts"
        ]
      }
    },
    "/v2/sessions/vehicle-analytics": {
      "get": {
        "description": "Returns paginated analytics grouped by license plate, including visit count, total/average/longest stay duration, and last seen time.",
        "operationId": "sessions-vehicles-analytics",
        "parameters": [
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `plate`, `visits`, `total_time_seconds`, `avg_stay_seconds`, `longest_stay_seconds`, `last_seen`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "plateAscending": {
                "summary": "Sort by plate ascending",
                "value": [
                  "plate:asc"
                ]
              },
              "plateDescending": {
                "summary": "Sort by plate descending",
                "value": [
                  "plate:desc"
                ]
              },
              "visitsAscending": {
                "summary": "Sort by visits ascending",
                "value": [
                  "visits:asc"
                ]
              },
              "visitsDescending": {
                "summary": "Sort by visits descending",
                "value": [
                  "visits:desc"
                ]
              },
              "totalTimeSecondsAscending": {
                "summary": "Sort by total_time_seconds ascending",
                "value": [
                  "total_time_seconds:asc"
                ]
              },
              "totalTimeSecondsDescending": {
                "summary": "Sort by total_time_seconds descending",
                "value": [
                  "total_time_seconds:desc"
                ]
              },
              "avgStaySecondsAscending": {
                "summary": "Sort by avg_stay_seconds ascending",
                "value": [
                  "avg_stay_seconds:asc"
                ]
              },
              "avgStaySecondsDescending": {
                "summary": "Sort by avg_stay_seconds descending",
                "value": [
                  "avg_stay_seconds:desc"
                ]
              },
              "longestStaySecondsAscending": {
                "summary": "Sort by longest_stay_seconds ascending",
                "value": [
                  "longest_stay_seconds:asc"
                ]
              },
              "longestStaySecondsDescending": {
                "summary": "Sort by longest_stay_seconds descending",
                "value": [
                  "longest_stay_seconds:desc"
                ]
              },
              "lastSeenAscending": {
                "summary": "Sort by last_seen ascending",
                "value": [
                  "last_seen:asc"
                ]
              },
              "lastSeenDescending": {
                "summary": "Sort by last_seen descending",
                "value": [
                  "last_seen:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `created_at`, `plate`, `lot_ids`, `zone_ids`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "plate": {
                "summary": "Filter by plate",
                "value": [
                  "plate:eq:AB123CD"
                ]
              },
              "lotIds": {
                "summary": "Filter by lot_ids",
                "value": [
                  "lot_ids:eq:1,2,3"
                ]
              },
              "zoneIds": {
                "summary": "Filter by zone_ids",
                "value": [
                  "zone_ids:eq:1,2,3"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated vehicle analytics, grouped by plate.",
            "content": {
              "application/json": {
                "schema": {
                  "example": {
                    "success": true,
                    "data": [
                      {
                        "plate": "DTPLATE2",
                        "vehicle_label": "Red Peugeot 206SW",
                        "visits": 3,
                        "total_time_seconds": 10800,
                        "avg_stay_seconds": 5400,
                        "longest_stay_seconds": 7200,
                        "last_seen": "2026-08-24T14:00:00.000Z"
                      }
                    ],
                    "meta": {
                      "total": 1,
                      "perPage": 10,
                      "currentPage": 1,
                      "lastPage": 1,
                      "firstPage": 1,
                      "firstPageUrl": "/?page=1",
                      "lastPageUrl": "/?page=1",
                      "nextPageUrl": null,
                      "previousPageUrl": null
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get vehicle analytics",
        "tags": [
          "sessions"
        ]
      }
    },
    "/v2/sessions/vehicle-analytics/export": {
      "get": {
        "description": "This endpoint allows the user to get the vehicle analytics CSV file",
        "operationId": "sessions-export-vehicles-analytics-to-csv",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `created_at`, `plate`, `lot_ids`, `zone_ids`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "plate": {
                "summary": "Filter by plate",
                "value": [
                  "plate:eq:DTPLATE-2"
                ]
              },
              "lotIds": {
                "summary": "Filter by lot_ids",
                "value": [
                  "lot_ids:eq:1,2,3"
                ]
              },
              "zoneIds": {
                "summary": "Filter by zone_ids",
                "value": [
                  "zone_ids:eq:1,2,3"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `plate`, `visits`, `total_time_seconds`, `avg_stay_seconds`, `longest_stay_seconds`, `last_seen`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "plateAscending": {
                "summary": "Sort by plate ascending",
                "value": [
                  "plate:asc"
                ]
              },
              "plateDescending": {
                "summary": "Sort by plate descending",
                "value": [
                  "plate:desc"
                ]
              },
              "visitsAscending": {
                "summary": "Sort by visits ascending",
                "value": [
                  "visits:asc"
                ]
              },
              "visitsDescending": {
                "summary": "Sort by visits descending",
                "value": [
                  "visits:desc"
                ]
              },
              "totalTimeSecondsAscending": {
                "summary": "Sort by total_time_seconds ascending",
                "value": [
                  "total_time_seconds:asc"
                ]
              },
              "totalTimeSecondsDescending": {
                "summary": "Sort by total_time_seconds descending",
                "value": [
                  "total_time_seconds:desc"
                ]
              },
              "avgStaySecondsAscending": {
                "summary": "Sort by avg_stay_seconds ascending",
                "value": [
                  "avg_stay_seconds:asc"
                ]
              },
              "avgStaySecondsDescending": {
                "summary": "Sort by avg_stay_seconds descending",
                "value": [
                  "avg_stay_seconds:desc"
                ]
              },
              "longestStaySecondsAscending": {
                "summary": "Sort by longest_stay_seconds ascending",
                "value": [
                  "longest_stay_seconds:asc"
                ]
              },
              "longestStaySecondsDescending": {
                "summary": "Sort by longest_stay_seconds descending",
                "value": [
                  "longest_stay_seconds:desc"
                ]
              },
              "lastSeenAscending": {
                "summary": "Sort by last_seen ascending",
                "value": [
                  "last_seen:asc"
                ]
              },
              "lastSeenDescending": {
                "summary": "Sort by last_seen descending",
                "value": [
                  "last_seen:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get vehicle analytics CSV file",
        "tags": [
          "sessions"
        ]
      }
    },
    "/v2/sessions/analytics": {
      "get": {
        "description": "Returns parking analytics data based on the provided filters.\n\n---\n\n### Metrics (`metric` filter)\n\n| Metric | Description |\n|--------|-------------|\n| `entry_count` |  The total number of vehicles that entered over a given period |\n| `exit_count` | The total number of vehicles that exited over a given period |\n| `peak_entry_time` | The hour of the day (0–23) with the highest number of vehicle entries |\n| `peak_exit_time` | The hour of the day (0–23) with the highest number of vehicle exits |\n\n---\n\n### Scopes (`scope` filter)\n\n| Scope | Description | ID filter |\n|-------|-------------|-----------|\n| `lot` | Aggregates data per parking lot | `lot_ids` |\n| `zone` | Aggregates data per zone within a lot | `zone_ids` |\n| *(none)* | No scope provided — returns a single aggregated result across all matched entities | — |\n\n---\n\n### Intervals (`interval` filter)\n\n| Interval | Description | Response shape |\n|----------|-------------|----------------|\n| *(none)* | No interval — returns a single cumulative value | `number` |\n| `hour` | Breaks data down by hour of the day | `number[]` with 24 values (index 0 = midnight, 23 = 11PM) |\n| `day` | Breaks data down by day of the week | `number[]` with 7 values (index 0 = Sunday, 6 = Saturday) |\n| `month` | Breaks data down by month of the year | `number[]` with 12 values (index 0 = January, 11 = December) |\n\n---\n\n> **Note:** `peak_entry_time and peak_exit_time` does not support intervals — it always returns a single `number | null` value regardless of the `interval` filter.",
        "operationId": "sessions-get-analytics",
        "parameters": [
          {
            "name": "filter",
            "required": true,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. See [Filtering](/api/conventions#filtering).",
            "schema": {
              "example": [
                "scope:eq:zone",
                "lot_ids:eq:1,2,3",
                "zone_ids:eq:1,2,3",
                "created_at:gte:2025-09-17T10:15:25",
                "created_at:lte:2025-09-18T10:15:25",
                "metric:eq:entry_count",
                "interval:eq:hour"
              ],
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns analytics data based on the provided filters.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/LotScopeNoIntervalExitCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeHourIntervalExitCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeDayIntervalExitCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeMonthIntervalExitCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeNoIntervalExitCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeHourIntervalExitCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeDayIntervalExitCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeMonthIntervalExitCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeNoIntervalEntryCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeHourIntervalEntryCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeDayIntervalEntryCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeMonthIntervalEntryCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeNoIntervalEntryCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeHourIntervalEntryCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeDayIntervalEntryCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeMonthIntervalEntryCountResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopePeakEntryTimeResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopePeakEntryTimeResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/NoScopePeakEntryTimeResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopePeakExitTimeResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopePeakExitTimeResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/NoScopePeakExitTimeResponseDto"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get session analytics",
        "tags": [
          "sessions"
        ]
      }
    },
    "/v2/sessions/export": {
      "get": {
        "description": "This endpoint allows the user to get the sessions CSV file",
        "operationId": "sessions-export-to-csv",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `lot_id`, `lot_ids`, `zone_id`, `zone_ids`, `created_at`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "lotIds": {
                "summary": "Filter by lot_ids",
                "value": [
                  "lot_ids:eq:1,2,3"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "zoneIds": {
                "summary": "Filter by zone_ids",
                "value": [
                  "zone_ids:eq:1,2,3"
                ]
              },
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get sessions CSV file",
        "tags": [
          "sessions"
        ]
      }
    },
    "/v2/terminals": {
      "post": {
        "description": "This endpoint allows the user to create terminals",
        "operationId": "terminals-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTerminalDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TerminalDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create terminals",
        "tags": [
          "terminals"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all terminals",
        "operationId": "terminals-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `lot_id`, `zone_id`, `device_id`, `name`, `is_master`, `pos_serial_number`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "deviceId": {
                "summary": "Filter by device_id",
                "value": [
                  "device_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "isMaster": {
                "summary": "Filter by is_master",
                "value": [
                  "is_master:eq:true"
                ]
              },
              "posSerialNumber": {
                "summary": "Filter by pos_serial_number",
                "value": [
                  "pos_serial_number:eq:SN-123456"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`, `created_at`, `updated_at`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "createdAtAscending": {
                "summary": "Sort by created_at ascending",
                "value": [
                  "created_at:asc"
                ]
              },
              "createdAtDescending": {
                "summary": "Sort by created_at descending",
                "value": [
                  "created_at:desc"
                ]
              },
              "updatedAtAscending": {
                "summary": "Sort by updated_at ascending",
                "value": [
                  "updated_at:asc"
                ]
              },
              "updatedAtDescending": {
                "summary": "Sort by updated_at descending",
                "value": [
                  "updated_at:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/TerminalDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all terminals",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/terminals/{id}": {
      "get": {
        "description": "This endpoint allows the user to get terminals by id",
        "operationId": "terminals-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TerminalDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get terminals",
        "tags": [
          "terminals"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update terminals by id",
        "operationId": "terminals-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTerminalDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TerminalDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update terminals",
        "tags": [
          "terminals"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete terminals by id",
        "operationId": "terminals-unassign",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Terminal successfuly unassigned.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Terminal successfuly unassigned."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete terminals",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/terminals/{id}/sessions/{session_id}/details": {
      "get": {
        "description": "This endpoint allows the user to get terminal sessions details by id",
        "operationId": "terminals-get-session-detials",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "session_id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/SessionDetailsDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get terminal sessions details",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/terminals/{id}/sessions": {
      "get": {
        "description": "This endpoint allows the user to list all sessions from terminal",
        "operationId": "terminals-get-session",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `session_id`, `started_at`, `ended_at`, `entry_type`, `duration`, `payments.paid_at`, `license_plate`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "sessionId": {
                "summary": "Filter by session_id",
                "value": [
                  "session_id:eq:1"
                ]
              },
              "startedAt": {
                "summary": "Filter by started_at",
                "value": [
                  "started_at:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "endedAt": {
                "summary": "Filter by ended_at",
                "value": [
                  "ended_at:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "entryType": {
                "summary": "Filter by entry_type",
                "value": [
                  "entry_type:eq:TICKET"
                ]
              },
              "duration": {
                "summary": "Filter by duration",
                "value": [
                  "duration:eq:3600"
                ]
              },
              "payments.paidAt": {
                "summary": "Filter by payments.paid_at",
                "value": [
                  "payments.paid_at:eq:2024-01-15T00:00:00.000Z"
                ]
              },
              "licensePlate": {
                "summary": "Filter by license_plate",
                "value": [
                  "license_plate:eq:AB123CD"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `session_id`, `duration`, `ended_at`, `started_at`, `license_plate`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "sessionIdAscending": {
                "summary": "Sort by session_id ascending",
                "value": [
                  "session_id:asc"
                ]
              },
              "sessionIdDescending": {
                "summary": "Sort by session_id descending",
                "value": [
                  "session_id:desc"
                ]
              },
              "durationAscending": {
                "summary": "Sort by duration ascending",
                "value": [
                  "duration:asc"
                ]
              },
              "durationDescending": {
                "summary": "Sort by duration descending",
                "value": [
                  "duration:desc"
                ]
              },
              "endedAtAscending": {
                "summary": "Sort by ended_at ascending",
                "value": [
                  "ended_at:asc"
                ]
              },
              "endedAtDescending": {
                "summary": "Sort by ended_at descending",
                "value": [
                  "ended_at:desc"
                ]
              },
              "startedAtAscending": {
                "summary": "Sort by started_at ascending",
                "value": [
                  "started_at:asc"
                ]
              },
              "startedAtDescending": {
                "summary": "Sort by started_at descending",
                "value": [
                  "started_at:desc"
                ]
              },
              "licensePlateAscending": {
                "summary": "Sort by license_plate ascending",
                "value": [
                  "license_plate:asc"
                ]
              },
              "licensePlateDescending": {
                "summary": "Sort by license_plate descending",
                "value": [
                  "license_plate:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/TerminalDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all sessions from terminal",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/terminals/{id}/lpr-cameras": {
      "get": {
        "description": "This endpoint allows the user to list all lpr cameras by terminal ids",
        "operationId": "terminals-list-lpr-cameras",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `direction`, `name`, `sn`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "direction": {
                "summary": "Filter by direction",
                "value": [
                  "direction:eq:IN"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "sn": {
                "summary": "Filter by sn",
                "value": [
                  "sn:eq:L12345678"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/TerminalLprCameraDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all lpr cameras by terminal ids",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/terminals/{id}/lpr-cameras/{lprCameraId}/live/{size}": {
      "get": {
        "description": "This endpoint allows the user to get lpr cameras live feed by terminal and lpr cameras ids by id",
        "operationId": "terminals-get-lpr-camera-live-image",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lprCameraId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "size",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TerminalLprCameraDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get lpr cameras live feed by terminal and lpr cameras ids",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/terminals/{id}/plate-readings": {
      "get": {
        "description": "This endpoint allows the user to list all plater readings by terminal id",
        "operationId": "terminals-get-license-plates",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `direction`, `plate`, `session_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "direction": {
                "summary": "Filter by direction",
                "value": [
                  "direction:eq:IN"
                ]
              },
              "plate": {
                "summary": "Filter by plate",
                "value": [
                  "plate:eq:DTPLATE-2"
                ]
              },
              "sessionId": {
                "summary": "Filter by session_id",
                "value": [
                  "session_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `created_at`, `id`, `plate`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "createdAtAscending": {
                "summary": "Sort by created_at ascending",
                "value": [
                  "created_at:asc"
                ]
              },
              "createdAtDescending": {
                "summary": "Sort by created_at descending",
                "value": [
                  "created_at:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "plateAscending": {
                "summary": "Sort by plate ascending",
                "value": [
                  "plate:asc"
                ]
              },
              "plateDescending": {
                "summary": "Sort by plate descending",
                "value": [
                  "plate:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/TerminalSessionDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all plater readings by terminal id",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/terminals/{id}/plate-readings/{plateid}/{size}": {
      "get": {
        "description": "Endpoint allows the user to get all the sessions associated with that terminal",
        "operationId": "terminals-get-license-plate-image",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "plateid",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "size",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TerminalSessionDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get terminal camera reading pictures",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/terminals/{id}/session": {
      "post": {
        "description": "This endpoint allows the user to create terminal sessions",
        "operationId": "terminals-create-session",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTerminalSessionDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TerminalSessionDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create terminal sessions",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/terminals/{terminal_id}/sessions/{session_id}/payments": {
      "post": {
        "description": "This endpoint allows the user to create session payments",
        "operationId": "terminals-create-session-payment",
        "parameters": [
          {
            "name": "terminal_id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "session_id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTerminalSessionPaymentDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TerminalSessionPaymentDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create session payments",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/terminals/{id}/sessions/{sessionId}": {
      "patch": {
        "description": "This endpoint allows the user to update terminal sessions by id",
        "operationId": "terminals-update-session",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sessionId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTerminalSessionDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TerminalSessionDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "the device might not be connected or an internal error happened",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 40,
                      "message": "the message to the remote device timed out"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update terminal sessions",
        "tags": [
          "terminals"
        ]
      }
    },
    "/v2/lot-whitelists/upload/lot/{id}": {
      "post": {
        "operationId": "lot-whitelist-create-from-file",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Upload a CSV file"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/FileUploadResponse"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create new lot whitelists from a CSV file",
        "tags": [
          "lot whitelists"
        ]
      }
    },
    "/v2/lot-whitelists/export": {
      "get": {
        "description": "This endpoint allows the user to get the lot whitelists CSV file",
        "operationId": "lot-whitelist-export-to-csv",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `start_time`, `end_time`, `lot_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "startTime": {
                "summary": "Filter by start_time",
                "value": [
                  "start_time:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "endTime": {
                "summary": "Filter by end_time",
                "value": [
                  "end_time:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get lot whitelists CSV file",
        "tags": [
          "lot whitelists"
        ]
      }
    },
    "/v2/lot-whitelists/sample/export": {
      "get": {
        "description": "This endpoint provides a sample CSV file formatted for creating new lot whitelists. Use this file as a template for uploading lot whitelists.",
        "operationId": "lot-whitelist-export-sample-csv",
        "parameters": [],
        "responses": {
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Download lot whitelists sample CSV file",
        "tags": [
          "lot whitelists"
        ]
      }
    },
    "/v2/lot-whitelists/bulk": {
      "delete": {
        "description": "This endpoint allows the user to bulk delete lot whitelists by using their ids",
        "operationId": "lot-whitelist-bulk-remove",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDeleteLotWhitelistDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk delete lot whitelists",
        "tags": [
          "lot whitelists"
        ]
      }
    },
    "/v2/logs/lot-whitelists": {
      "get": {
        "description": "This endpoint allows the user to list all logs",
        "operationId": "logs-find-all-lot-whitelists",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `lot_id`, `account_user_id`, `account_user_name`, `license_plate`, `operation`, `start_time`, `end_time`, `is_unlimited`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "accountUserId": {
                "summary": "Filter by account_user_id",
                "value": [
                  "account_user_id:eq:1"
                ]
              },
              "accountUserName": {
                "summary": "Filter by account_user_name",
                "value": [
                  "account_user_name:eq:john doe"
                ]
              },
              "licensePlate": {
                "summary": "Filter by license_plate",
                "value": [
                  "license_plate:eq:AB123CD"
                ]
              },
              "operation": {
                "summary": "Filter by operation",
                "value": [
                  "operation:eq:added"
                ]
              },
              "startTime": {
                "summary": "Filter by start_time",
                "value": [
                  "start_time:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "endTime": {
                "summary": "Filter by end_time",
                "value": [
                  "end_time:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "isUnlimited": {
                "summary": "Filter by is_unlimited",
                "value": [
                  "is_unlimited:eq:true"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/LotWhitelistLogDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all logs",
        "tags": [
          "logs"
        ]
      }
    },
    "/v2/logs/lot-whitelists/{id}": {
      "get": {
        "description": "This endpoint allows the user to get logs by id",
        "operationId": "logs-find-one-lot-whitelist",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotWhitelistLogDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get logs",
        "tags": [
          "logs"
        ]
      }
    },
    "/v2/license-plate-alerts/{id}/receivers": {
      "post": {
        "description": "This endpoint allows the user to bulk create license plate alerts",
        "operationId": "license-plate-alerts-assign-receivers",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignLicensePlateAlertReciversDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LicensePlateAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk create license plate alerts",
        "tags": [
          "license plate alerts"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to bulk put license plate alerts",
        "operationId": "license-plate-alerts-replace-receivers",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignLicensePlateAlertReciversDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LicensePlateAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk put license plate alerts",
        "tags": [
          "license plate alerts"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to bulk unassign license plate alert receivers by using their ids",
        "operationId": "license-plate-alerts-unassign-recivers",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnassignReceiversLicensePlateAlertDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LicensePlateAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk unassign license plate alert receivers",
        "tags": [
          "license plate alerts"
        ]
      }
    },
    "/v2/license-plate-alerts/{alertId}/receivers/{receiverId}": {
      "put": {
        "description": "This endpoint allows the user to put license plate alerts receivers by id",
        "operationId": "license-plate-alerts-assign-single",
        "parameters": [
          {
            "name": "alertId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "receiverId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LicensePlateAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Put license plate alerts receivers",
        "tags": [
          "license plate alerts"
        ]
      }
    },
    "/v2/license-plate-alerts/{id}": {
      "put": {
        "description": "This endpoint allows the user to put license plate alerts by id",
        "operationId": "license-plate-alerts-replace-alerts",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceLicensePlateAlertsDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LicensePlateAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Put license plate alerts",
        "tags": [
          "license plate alerts"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to get license plate alerts by id",
        "operationId": "license-plate-alerts-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LicensePlateAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get license plate alerts",
        "tags": [
          "license plate alerts"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update license plate alerts by id",
        "operationId": "license-plate-alerts-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLicensePlateAlertDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LicensePlateAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Cannot be moved between different lots.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1000,
                      "message": "Cannot move to different lot."
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update license plate alerts",
        "tags": [
          "license plate alerts"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete license plate alerts by id",
        "operationId": "license-plate-alerts-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete license plate alerts",
        "tags": [
          "license plate alerts"
        ]
      }
    },
    "/v2/license-plate-alerts": {
      "post": {
        "description": "This endpoint allows the user to create license plate alerts",
        "operationId": "license-plate-alerts-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLicensePlateAlertDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create license plate alerts",
        "tags": [
          "license plate alerts"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all license plate alerts",
        "operationId": "license-plate-alerts-find-all",
        "parameters": [
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`, `plate`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "plateAscending": {
                "summary": "Sort by plate ascending",
                "value": [
                  "plate:asc"
                ]
              },
              "plateDescending": {
                "summary": "Sort by plate descending",
                "value": [
                  "plate:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `lot_id`, `name`, `plate`, `zone_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "plate": {
                "summary": "Filter by plate",
                "value": [
                  "plate:eq:DTPLATE-2"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/LicensePlateAlertDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all license plate alerts",
        "tags": [
          "license plate alerts"
        ]
      }
    },
    "/v2/license-plate-alerts/{id}/receivers/{reciverId}": {
      "delete": {
        "description": "This endpoint allows the user to unassign license plate alert receivers by id",
        "operationId": "license-plate-alerts-unassign-single-reciver",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reciverId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LicensePlateAlertDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unassign license plate alert receivers",
        "tags": [
          "license plate alerts"
        ]
      }
    },
    "/v2/key-invitations": {
      "get": {
        "description": "This endpoint allows the user to list all key invitations",
        "operationId": "key-invitations-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `product_id`, `status`, `receiver_identifier`, `date_from`, `date_to`, `lot_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "productId": {
                "summary": "Filter by product_id",
                "value": [
                  "product_id:eq:1"
                ]
              },
              "status": {
                "summary": "Filter by status",
                "value": [
                  "status:eq:pending"
                ]
              },
              "receiverIdentifier": {
                "summary": "Filter by receiver_identifier",
                "value": [
                  "receiver_identifier:eq:john.doe@example.com"
                ]
              },
              "dateFrom": {
                "summary": "Filter by date_from",
                "value": [
                  "date_from:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "dateTo": {
                "summary": "Filter by date_to",
                "value": [
                  "date_to:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `status`, `receiver_identifier`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "statusAscending": {
                "summary": "Sort by status ascending",
                "value": [
                  "status:asc"
                ]
              },
              "statusDescending": {
                "summary": "Sort by status descending",
                "value": [
                  "status:desc"
                ]
              },
              "receiverIdentifierAscending": {
                "summary": "Sort by receiver_identifier ascending",
                "value": [
                  "receiver_identifier:asc"
                ]
              },
              "receiverIdentifierDescending": {
                "summary": "Sort by receiver_identifier descending",
                "value": [
                  "receiver_identifier:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/KeyInvitationDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all key invitations",
        "tags": [
          "key invitations"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to bulk update key invitations by using their ids",
        "operationId": "key-invitations-bulk-update",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateKeyInvitationDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "example": {
                    "success": true,
                    "data": [
                      {
                        "success": true,
                        "id": 1
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk update key invitations",
        "tags": [
          "key invitations"
        ]
      }
    },
    "/v2/key-invitations/receiver-emails": {
      "get": {
        "description": "This endpoint allows the user to list all key log receiver emails",
        "operationId": "key-invitations-receiver-emails",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ReceiverEmailsDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all key log receiver emails",
        "tags": [
          "key invitations"
        ]
      }
    },
    "/v2/key-invitations/{id}": {
      "get": {
        "description": "This endpoint allows the user to get key invitations by id",
        "operationId": "key-invitations-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/KeyInvitationDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get key invitations",
        "tags": [
          "key invitations"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update key invitations by id",
        "operationId": "key-invitations-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateKeyInvitationDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/KeyInvitationDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update key invitations",
        "tags": [
          "key invitations"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete key invitations by id",
        "operationId": "key-invitations-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete key invitations",
        "tags": [
          "key invitations"
        ]
      }
    },
    "/v2/key-invitations/resend": {
      "post": {
        "description": "This endpoint allows the user to resend key invitations by ids",
        "operationId": "key-invitations-resend-invites",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestResendKeysDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "example": {
                    "success": true,
                    "data": [
                      {
                        "success": true,
                        "id": 1
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Resend key invitations",
        "tags": [
          "key invitations"
        ]
      }
    },
    "/v2/key-logs": {
      "get": {
        "description": "This endpoint allows the user to list all key logs",
        "operationId": "key-logs-find-all",
        "parameters": [
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `date_from`, `date_to`, `lot_id`, `name`, `product_id`, `receiver_identifier`, `status`, `zone_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "dateFrom": {
                "summary": "Filter by date_from",
                "value": [
                  "date_from:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "dateTo": {
                "summary": "Filter by date_to",
                "value": [
                  "date_to:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "productId": {
                "summary": "Filter by product_id",
                "value": [
                  "product_id:eq:1"
                ]
              },
              "receiverIdentifier": {
                "summary": "Filter by receiver_identifier",
                "value": [
                  "receiver_identifier:eq:john.doe@example.com"
                ]
              },
              "status": {
                "summary": "Filter by status",
                "value": [
                  "status:eq:blocked"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/KeyLogDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all key logs",
        "tags": [
          "key logs"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to bulk update key logs by using their ids",
        "operationId": "key-logs-bulk-update",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateKeyLogsDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "example": {
                    "success": true,
                    "data": [
                      {
                        "success": true,
                        "id": 1
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk update key logs",
        "tags": [
          "key logs"
        ]
      }
    },
    "/v2/key-logs/receiver-emails": {
      "get": {
        "description": "This endpoint allows the user to list all key invitation receiver emails",
        "operationId": "key-logs-receiver-emails",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ReceiverEmailsDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all key invitation receiver emails",
        "tags": [
          "key logs"
        ]
      }
    },
    "/v2/key-logs/{id}": {
      "get": {
        "description": "This endpoint allows the user to get key logs by id",
        "operationId": "key-logs-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/KeyLogDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get key logs",
        "tags": [
          "key logs"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update key logs by id",
        "operationId": "key-logs-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateKeyLogDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/KeyLogDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update key logs",
        "tags": [
          "key logs"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete key logs by id",
        "operationId": "key-logs-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete key logs",
        "tags": [
          "key logs"
        ]
      }
    },
    "/v2/key-logs/resend": {
      "post": {
        "description": "Resend key logs",
        "operationId": "key-logs-resend",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResendKeyDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "example": {
                    "success": true,
                    "data": [
                      {
                        "success": true,
                        "id": 1
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Resend key logs",
        "tags": [
          "key logs"
        ]
      }
    },
    "/v2/operation-keys/sample/export": {
      "get": {
        "description": "This endpoint provides a sample CSV file formatted for creating new operation keys. Use this file as a template for uploading operation keys.",
        "operationId": "operation-keys-export-sample-csv",
        "parameters": [],
        "responses": {
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Download operation keys sample CSV file",
        "tags": [
          "operation keys"
        ]
      }
    },
    "/v2/operation-keys/file/upload": {
      "post": {
        "operationId": "operation-keys-create-from-file",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Upload a CSV file"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/FileUploadResponse"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create new operation keys from a CSV file",
        "tags": [
          "operation keys"
        ]
      }
    },
    "/v2/operation-keys/single": {
      "post": {
        "description": "This endpoint allows the user to create single operation keys",
        "operationId": "operation-keys-create-one",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOneOperationKeyDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OperationKeyDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "summary": "Create single operation keys",
        "tags": [
          "operation keys"
        ]
      }
    },
    "/v2/operation-keys": {
      "post": {
        "description": "This endpoint allows the user to create operations keys",
        "operationId": "operation-keys-create-many",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOperationKeyDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "example": {
                    "email": "example@example.com",
                    "invited": true
                  }
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "summary": "Create operations keys",
        "tags": [
          "operation keys"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all operation keys",
        "operationId": "operation-keys-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `date_from`, `date_to`, `lot_id`, `product_id`, `receiver_email`, `receiver_id`, `sender_email`, `sender_id`, `status`, `zone_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "dateFrom": {
                "summary": "Filter by date_from",
                "value": [
                  "date_from:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "dateTo": {
                "summary": "Filter by date_to",
                "value": [
                  "date_to:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "productId": {
                "summary": "Filter by product_id",
                "value": [
                  "product_id:eq:1"
                ]
              },
              "receiverEmail": {
                "summary": "Filter by receiver_email",
                "value": [
                  "receiver_email:eq:john.doe@example.com"
                ]
              },
              "receiverId": {
                "summary": "Filter by receiver_id",
                "value": [
                  "receiver_id:eq:1"
                ]
              },
              "senderEmail": {
                "summary": "Filter by sender_email",
                "value": [
                  "sender_email:eq:john.doe@example.com"
                ]
              },
              "senderId": {
                "summary": "Filter by sender_id",
                "value": [
                  "sender_id:eq:1"
                ]
              },
              "status": {
                "summary": "Filter by status",
                "value": [
                  "status:eq:active"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/OperationKeyDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all operation keys",
        "tags": [
          "operation keys"
        ]
      }
    },
    "/v2/operation-keys/{id}": {
      "get": {
        "description": "This endpoint allows the user to get operation keys by id",
        "operationId": "operation-keys-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OperationKeyDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get operation keys",
        "tags": [
          "operation keys"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update operation keys by id",
        "operationId": "operation-keys-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateOperationKeyDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OperationKeyDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update operation keys",
        "tags": [
          "operation keys"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete operation keys by id",
        "operationId": "operation-keys-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete operation keys",
        "tags": [
          "operation keys"
        ]
      }
    },
    "/v2/products/{id}/bound-licenses": {
      "get": {
        "description": "Endpoint returns all the license plates bound to the product.",
        "operationId": "products-find-all-binds",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`, `created_at`, `updated_at`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              },
              "createdAtAscending": {
                "summary": "Sort by created_at ascending",
                "value": [
                  "created_at:asc"
                ]
              },
              "createdAtDescending": {
                "summary": "Sort by created_at descending",
                "value": [
                  "created_at:desc"
                ]
              },
              "updatedAtAscending": {
                "summary": "Sort by updated_at ascending",
                "value": [
                  "updated_at:asc"
                ]
              },
              "updatedAtDescending": {
                "summary": "Sort by updated_at descending",
                "value": [
                  "updated_at:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotWhitelistLicenseDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List all bound license plates on a product",
        "tags": [
          "products"
        ]
      }
    },
    "/v2/products/bound-licenses/{licenseId}": {
      "delete": {
        "description": "This endpoint unbinds multiple products from a license",
        "operationId": "products-unbind-licenses-for-products",
        "parameters": [
          {
            "name": "licenseId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnbindProductsDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Licenses have been unbound",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Licenses have been unbound"
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unbinds multiple Products from a License Plate",
        "tags": [
          "products"
        ]
      }
    },
    "/v2/products/{id}/bound-licenses/{licenseId}": {
      "delete": {
        "description": "This endpoint unbinds a product from a license",
        "operationId": "products-unbind-license-for-product",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "licenseId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Licence has been unbound",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Licence has been unbound"
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unbinds a Product from a License Plate",
        "tags": [
          "products"
        ]
      }
    },
    "/v2/logs/product/operation/{id}": {
      "get": {
        "description": "This endpoint allows the user to get logs/product/operation by id",
        "operationId": "product-logs-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ProductLogDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get logs/product/operation",
        "tags": [
          "logs"
        ]
      }
    },
    "/v2/logs/product/operation": {
      "get": {
        "description": "This endpoint allows the user to list all logs/product/operation",
        "operationId": "product-logs-find-all-logs",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `account_user_email`, `account_user_id`, `account_user_name`, `account_user_role_id`, `created_at`, `device_id`, `lot_id`, `operation_type`, `product_id`, `type_of_access`, `zone_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "accountUserEmail": {
                "summary": "Filter by account_user_email",
                "value": [
                  "account_user_email:eq:john.doe@example.com"
                ]
              },
              "accountUserId": {
                "summary": "Filter by account_user_id",
                "value": [
                  "account_user_id:eq:1"
                ]
              },
              "accountUserName": {
                "summary": "Filter by account_user_name",
                "value": [
                  "account_user_name:eq:john doe"
                ]
              },
              "accountUserRoleId": {
                "summary": "Filter by account_user_role_id",
                "value": [
                  "account_user_role_id:eq:1"
                ]
              },
              "createdAt": {
                "summary": "Filter by created_at",
                "value": [
                  "created_at:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "deviceId": {
                "summary": "Filter by device_id",
                "value": [
                  "device_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "operationType": {
                "summary": "Filter by operation_type",
                "value": [
                  "operation_type:eq:open"
                ]
              },
              "productId": {
                "summary": "Filter by product_id",
                "value": [
                  "product_id:eq:1"
                ]
              },
              "typeOfAccess": {
                "summary": "Filter by type_of_access",
                "value": [
                  "type_of_access:eq:app"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ProductLogDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all logs/product/operation",
        "tags": [
          "logs"
        ]
      }
    },
    "/v2/weblinks/metadata": {
      "get": {
        "description": "This endpoint allows the user to get weblinks metadata.",
        "operationId": "weblinks-metadata",
        "parameters": [
          {
            "name": "token",
            "required": false,
            "in": "query",
            "schema": {
              "example": "jQgwb9uY7Jxqa78nD9hjplshrZ3pRf",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/WeblinkMetadataDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User is trying to use a product weblink that has expired or has a wrong signature. User should request a new product weblink.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 212,
                      "message": "Product weblink not valid."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "summary": "Get weblinks metadata",
        "tags": [
          "weblinks"
        ]
      }
    },
    "/v2/weblinks/{id}": {
      "get": {
        "description": "This endpoint allows the user to get weblinks by id",
        "operationId": "weblinks-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/WeblinkDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get weblinks",
        "tags": [
          "weblinks"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update weblinks by id",
        "operationId": "weblinks-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWeblinkDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/WeblinkDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update weblinks",
        "tags": [
          "weblinks"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete weblinks by id",
        "operationId": "weblinks-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete weblinks",
        "tags": [
          "weblinks"
        ]
      }
    },
    "/v2/weblinks/resend": {
      "post": {
        "description": "This endpoint allows the user to resend weblinks by ids",
        "operationId": "weblinks-resend",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResendWeblinkDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/BulkUpdateWeblinksSuccessResponseDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Resend weblinks",
        "tags": [
          "weblinks"
        ]
      }
    },
    "/v2/weblinks/{id}/operation": {
      "post": {
        "description": "Use the weblink to operate a Parklio™ product",
        "operationId": "weblinks-operation",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OperateWeblinkDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/SuccessResponseDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Product operation was not emitted due to no rssi signal. Gateway does not have a good enough signal with the product.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 704,
                      "message": "No rssi signal."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "summary": "Operate product with the weblink",
        "tags": [
          "weblinks"
        ]
      }
    },
    "/v2/qr-codes": {
      "post": {
        "description": "This endpoint allows the user to create qr codes",
        "operationId": "qr-codes-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateQrCodeDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/QrCodeDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create qr codes",
        "tags": [
          "qr codes"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all qr codes",
        "operationId": "qr-codes-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_user_id`, `product_id`, `lot_id`, `zone_id`, `start_time`, `end_time`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountUserId": {
                "summary": "Filter by account_user_id",
                "value": [
                  "account_user_id:eq:1"
                ]
              },
              "productId": {
                "summary": "Filter by product_id",
                "value": [
                  "product_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "startTime": {
                "summary": "Filter by start_time",
                "value": [
                  "start_time:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "endTime": {
                "summary": "Filter by end_time",
                "value": [
                  "end_time:eq:2024-01-31T00:00:00.000Z"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/QrCodeDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all qr codes",
        "tags": [
          "qr codes"
        ]
      }
    },
    "/v2/qr-codes/{id}": {
      "get": {
        "description": "This endpoint allows the user to get qr codes by id",
        "operationId": "qr-codes-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/QrCodeDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get qr codes",
        "tags": [
          "qr codes"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete qr codes by id",
        "operationId": "qr-codes-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete qr codes",
        "tags": [
          "qr codes"
        ]
      }
    },
    "/v2/qr-codes/render/{uuid}": {
      "get": {
        "description": "Generates and streams a JPEG image of the QR code identified by uuid, rendered with an optional timezone offset used for any time-based content in the code.",
        "operationId": "qr-codes-find-by-uuid",
        "parameters": [
          {
            "name": "uuid",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "Render a QR code image",
        "tags": [
          "qr codes"
        ]
      }
    },
    "/v2/qr-codes/bulk": {
      "delete": {
        "description": "This endpoint allows the user to bulk delete qr codes by using their ids",
        "operationId": "qr-codes-bulk-remove",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDeleteQrCodeDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk delete qr codes",
        "tags": [
          "qr codes"
        ]
      }
    },
    "/v2/parking-detection-cameras": {
      "get": {
        "description": "This endpoint allows the user to list all parking detection cameras",
        "operationId": "parking-detection-cameras-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `lot_id`, `account_id`, `uuid`, `zone_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "uuid": {
                "summary": "Filter by uuid",
                "value": [
                  "uuid:eq:123e4567-e89b-12d3-a456-426614174000"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ParkingDetectionCameraDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all parking detection cameras",
        "tags": [
          "parking detection cameras"
        ]
      }
    },
    "/v2/parking-detection-cameras/{id}": {
      "get": {
        "description": "This endpoint allows the user to get parking detection cameras by id",
        "operationId": "parking-detection-cameras-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ParkingDetectionCameraDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get parking detection cameras",
        "tags": [
          "parking detection cameras"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update parking detection cameras by id",
        "operationId": "parking-detection-cameras-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateParkingDetectionCameraDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ParkingDetectionCameraDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update parking detection cameras",
        "tags": [
          "parking detection cameras"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete parking detection cameras by id",
        "operationId": "parking-detection-cameras-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete parking detection cameras",
        "tags": [
          "parking detection cameras"
        ]
      }
    },
    "/v2/parking-detection-cameras/{id}/frame": {
      "get": {
        "description": "Get parking detection camera frame by id",
        "operationId": "parking-detection-cameras-frame",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ParkingDetectionCameraDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get camera frame",
        "tags": [
          "parking detection cameras"
        ]
      }
    },
    "/v2/parking-detection-cameras/{id}/upload-view-schema": {
      "post": {
        "description": "Upload view schema to detection camera frame by id",
        "operationId": "parking-detection-cameras-upload-view-schema",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "description": "Parking detection camera ID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ParkingDetectionCameraDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The file uploaded is not valid or corrupted",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 27,
                      "message": "The file you uploaded is malformed"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Upload view schema by id",
        "tags": [
          "parking detection cameras"
        ]
      }
    },
    "/v2/parking-detection-gateways": {
      "get": {
        "description": "This endpoint allows the user to list all parking detection gateways",
        "operationId": "parking-detection-gateways-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `lot_id`, `uuid`, `status`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "uuid": {
                "summary": "Filter by uuid",
                "value": [
                  "uuid:eq:123e4567-e89b-12d3-a456-426614174000"
                ]
              },
              "status": {
                "summary": "Filter by status",
                "value": [
                  "status:eq:online"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ParkingDetectionGatewayDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all parking detection gateways",
        "tags": [
          "parking detection gateways"
        ]
      }
    },
    "/v2/parking-detection-gateways/{id}": {
      "get": {
        "description": "This endpoint allows the user to get parking detection gateways by id",
        "operationId": "parking-detection-gateways-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ParkingDetectionGatewayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get parking detection gateways",
        "tags": [
          "parking detection gateways"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update parking detection gateways by id",
        "operationId": "parking-detection-gateways-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateParkingDetectionGatewayDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ParkingDetectionGatewayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update parking detection gateways",
        "tags": [
          "parking detection gateways"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete parking detection gateways by id",
        "operationId": "parking-detection-gateways-remove-parking-detection-gateways",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete parking detection gateways",
        "tags": [
          "parking detection gateways"
        ]
      }
    },
    "/v2/parking-places/{id}": {
      "get": {
        "description": "This endpoint allows the user to get parking places by id",
        "operationId": "parking-places-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ParkingPlaceDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get parking places",
        "tags": [
          "parking places"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update parking places by id",
        "operationId": "parking-places-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateParkingPlaceDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ParkingPlaceDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Cannot be moved between different lots.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1000,
                      "message": "Cannot move to different lot."
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update parking places",
        "tags": [
          "parking places"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete parking places by id",
        "operationId": "parking-places-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete parking places",
        "tags": [
          "parking places"
        ]
      }
    },
    "/v2/violation-zone-events": {
      "get": {
        "description": "This endpoint allows the user to list all violation zone events",
        "operationId": "violation-zone-events-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `color`, `license_plate`, `lot_id`, `model`, `parking_detection_camera_id`, `start_time`, `end_time`, `stationary_time_above`, `stationary_time_bellow`, `violation_zone_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "color": {
                "summary": "Filter by color",
                "value": [
                  "color:eq:red"
                ]
              },
              "licensePlate": {
                "summary": "Filter by license_plate",
                "value": [
                  "license_plate:eq:DTPLATE-2"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "model": {
                "summary": "Filter by model",
                "value": [
                  "model:eq:206SW"
                ]
              },
              "parkingDetectionCameraId": {
                "summary": "Filter by parking_detection_camera_id",
                "value": [
                  "parking_detection_camera_id:eq:1"
                ]
              },
              "startTime": {
                "summary": "Filter by start_time",
                "value": [
                  "start_time:eq:2024-01-01T00:00:00.000Z"
                ]
              },
              "endTime": {
                "summary": "Filter by end_time",
                "value": [
                  "end_time:eq:2024-01-31T00:00:00.000Z"
                ]
              },
              "stationaryTimeAbove": {
                "summary": "Filter by stationary_time_above",
                "value": [
                  "stationary_time_above:eq:300"
                ]
              },
              "stationaryTimeBellow": {
                "summary": "Filter by stationary_time_bellow",
                "value": [
                  "stationary_time_bellow:eq:600"
                ]
              },
              "violationZoneId": {
                "summary": "Filter by violation_zone_id",
                "value": [
                  "violation_zone_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ViolationZoneEventDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all violation zone events",
        "tags": [
          "violation zone events"
        ]
      }
    },
    "/v2/violation-zone-events/{id}": {
      "get": {
        "description": "This endpoint allows the user to get violation zone events by id",
        "operationId": "violation-zone-events-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ViolationZoneEventDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get violation zone events",
        "tags": [
          "violation zone events"
        ]
      }
    },
    "/v2/violation-zones": {
      "post": {
        "description": "This endpoint allows the user to create violation zones",
        "operationId": "violation-zones-create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateViolationZoneDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Create violation zones",
        "tags": [
          "violation zones"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all violation zones",
        "operationId": "violation-zones-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `lot_id`, `name`, `uuid`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "uuid": {
                "summary": "Filter by uuid",
                "value": [
                  "uuid:eq:123e4567-e89b-12d3-a456-426614174000"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ViolationZoneDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all violation zones",
        "tags": [
          "violation zones"
        ]
      }
    },
    "/v2/violation-zones/{id}": {
      "get": {
        "description": "This endpoint allows the user to get violation zones by id",
        "operationId": "violation-zones-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ViolationZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get violation zones",
        "tags": [
          "violation zones"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update violation zones by id",
        "operationId": "violation-zones-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateViolationZoneDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ViolationZoneDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Cannot be moved between different lots.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1000,
                      "message": "Cannot move to different lot."
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update violation zones",
        "tags": [
          "violation zones"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete violation zones by id",
        "operationId": "violation-zones-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete violation zones",
        "tags": [
          "violation zones"
        ]
      }
    },
    "/v2/statistics/remote-control": {
      "get": {
        "description": "This endpoint allows the user to list all remote control logs",
        "operationId": "remote-control-logs-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_user_id`, `product_id`, `operation`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountUserId": {
                "summary": "Filter by account_user_id",
                "value": [
                  "account_user_id:eq:1"
                ]
              },
              "productId": {
                "summary": "Filter by product_id",
                "value": [
                  "product_id:eq:1"
                ]
              },
              "operation": {
                "summary": "Filter by operation",
                "value": [
                  "operation:eq:open"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/RemoteControlLogDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all remote control logs",
        "tags": [
          "statistics"
        ]
      }
    },
    "/v2/rotaries/parking-places": {
      "post": {
        "description": "This endpoint allows the user to create rotaries parking places",
        "operationId": "rotaries-create-rotary-parking-places",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRotaryParkingPlaceDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RotaryParkingPlaceDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create rotaries parking places",
        "tags": [
          "rotaries"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all rotaries parking places",
        "operationId": "rotaries-find-all-rotary-parking-places",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `rotary_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "rotaryId": {
                "summary": "Filter by rotary_id",
                "value": [
                  "rotary_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/RotaryParkingPlaceDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all rotaries parking places",
        "tags": [
          "rotaries"
        ]
      },
      "patch": {
        "description": "This endpoint updates the values of a rotary parking place by ids",
        "operationId": "rotaries-bulk-update",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateRotaryParkingPlaceDto"
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Bulk update a rotary parking places",
        "tags": [
          "rotaries"
        ]
      }
    },
    "/v2/rotaries/parking-places/{id}": {
      "get": {
        "description": "This endpoint allows the user to get rotaries parking places by id",
        "operationId": "rotaries-find-one-rotary-parking-places",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RotaryParkingPlaceDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get rotaries parking places",
        "tags": [
          "rotaries"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update rotaries parking places by id",
        "operationId": "rotaries-update-rotary-parking-places",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRotaryParkingPlaceDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RotaryParkingPlaceDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update rotaries parking places",
        "tags": [
          "rotaries"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete rotaries parking places by id",
        "operationId": "rotaries-remove-rotary-parking-places",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete rotaries parking places",
        "tags": [
          "rotaries"
        ]
      }
    },
    "/v2/rotaries": {
      "post": {
        "description": "This endpoint allows the user to create rotaries",
        "operationId": "rotaries-create-rotaries",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRotaryDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RotaryDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create rotaries",
        "tags": [
          "rotaries"
        ]
      },
      "get": {
        "description": "This endpoint allows the user to list all rotaries",
        "operationId": "rotaries-find-all-rotaries",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `lot_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/RotaryDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all rotaries",
        "tags": [
          "rotaries"
        ]
      }
    },
    "/v2/rotaries/{id}": {
      "get": {
        "description": "This endpoint allows the user to get rotaries by id",
        "operationId": "rotaries-find-one-rotaries",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RotaryDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get rotaries",
        "tags": [
          "rotaries"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update rotaries by id",
        "operationId": "rotaries-update-rotaries",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRotaryDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/UpdateRotaryDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update rotaries",
        "tags": [
          "rotaries"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete rotaries by id",
        "operationId": "rotaries-remove-rotaries",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete rotaries",
        "tags": [
          "rotaries"
        ]
      }
    },
    "/v2/parking-analytics": {
      "get": {
        "description": "Returns parking analytics data based on the provided filters.\n\n---\n\n### Metrics (`metric` filter)\n\n| Metric | Description |\n|--------|-------------|\n| `average_duration` | The average time (in minutes) a vehicle spends parked |\n| `average_duration_percentage` | The average duration as a percentage of the maximum allowed parking time |\n| `total_duration` | The total cumulative time (in minutes) all vehicles spent parked |\n| `turnover_rate` | The number of different vehicles that occupied a spot over a given period |\n| `peak_occupancy_hour` | The hour of the day (0–23) with the highest occupancy |\n\n---\n\n### Scopes (`scope` filter)\n\n| Scope | Description | ID filter |\n|-------|-------------|-----------|\n| `lot` | Aggregates data per parking lot | `lot_ids` |\n| `zone` | Aggregates data per zone within a lot | `zone_ids` |\n| `place` | Aggregates data per individual parking place | `parking_place_ids` |\n| *(none)* | No scope provided — returns a single aggregated result across all matched entities | — |\n\n---\n\n### Intervals (`interval` filter)\n\n| Interval | Description | Response shape |\n|----------|-------------|----------------|\n| *(none)* | No interval — returns a single cumulative value | `number` |\n| `hour` | Breaks data down by hour of the day | `number[]` with 24 values (index 0 = midnight, 23 = 11PM) |\n| `day` | Breaks data down by day of the week | `number[]` with 7 values (index 0 = Sunday, 6 = Saturday) |\n| `month` | Breaks data down by month of the year | `number[]` with 12 values (index 0 = January, 11 = December) |\n\n---\n\n> **Note:** `peak_occupancy_hour` does not support intervals — it always returns a single `number | null` value regardless of the `interval` filter.",
        "operationId": "parking-analytics-get-analytics",
        "parameters": [
          {
            "name": "filter",
            "required": true,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. See [Filtering](/api/conventions#filtering).",
            "schema": {
              "example": [
                "scope:eq:zone",
                "lot_ids:eq:1,2,3",
                "zone_ids:eq:1,2,3",
                "parking_place_ids:eq:1,2,3",
                "created_at:gte:2025-09-17T10:15:25",
                "created_at:lte:2025-09-18T10:15:25",
                "metric:eq:average_duration",
                "interval:eq:hour"
              ],
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns analytics data based on the provided filters.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/LotScopeNoIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeHourIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeDayIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeMonthIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeNoIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeHourIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeDayIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeMonthIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeNoIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeHourIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeDayIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeMonthIntervalAverageDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeNoIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeHourIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeDayIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeMonthIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeNoIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeHourIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeDayIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeMonthIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeNoIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeHourIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeDayIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeMonthIntervalAverageDurationPercentageResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeNoIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeHourIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeDayIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeMonthIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeNoIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeHourIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeDayIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeMonthIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeNoIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeHourIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeDayIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeMonthIntervalTotalDurationResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeNoIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeHourIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeDayIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopeMonthIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeNoIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeHourIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeDayIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopeMonthIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeNoIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeHourIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeDayIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopeMonthIntervalTurnoverRateResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/LotScopePeakOccupancyHourResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/ZoneScopePeakOccupancyHourResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/PlaceScopePeakOccupancyHourResponseDto"
                      },
                      {
                        "$ref": "#/components/schemas/NoScopePeakOccupancyHourResponseDto"
                      }
                    ]
                  }
                }
              }
            }
          },
          "403": {
            "description": "User is trying to filter where end time is before start time.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 306,
                      "message": "End time is before start time."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get parking analytics",
        "tags": [
          "parking analytics"
        ]
      }
    },
    "/v2/lot-share-views/{id}/zones": {
      "post": {
        "description": "This endpoint allows the user to assign zones to lot share view by id",
        "operationId": "lot-share-views-assign-zones",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignZonesToLotShareViewDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotShareViewDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Assign zones to lot share view",
        "tags": [
          "lot share views"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to replace zones for lot share view by id",
        "operationId": "lot-share-views-replace-members",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceZonesForLotShareViewDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotShareViewDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Replace zones for lot share view",
        "tags": [
          "lot share views"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to unassign zones from lot share view by id",
        "operationId": "lot-share-views-unassign-zones",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnassignZonesToLotShareViewDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotShareViewDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unassign zones from lot share view",
        "tags": [
          "lot share views"
        ]
      }
    },
    "/v2/lot-share-views/{id}": {
      "get": {
        "description": "This endpoint allows the user to get lot share views by id",
        "operationId": "lot-share-views-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotShareViewDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get lot share views",
        "tags": [
          "lot share views"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update lot share views by id",
        "operationId": "lot-share-views-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLotShareViewDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotShareViewDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update lot share views",
        "tags": [
          "lot share views"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete lot share views by id",
        "operationId": "lot-share-views-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete lot share views",
        "tags": [
          "lot share views"
        ]
      }
    },
    "/v2/lot-share-views/display/{token}": {
      "get": {
        "description": "Returns an HTML page showing the current occupancy state of a parking lot. The view type (counts only, live camera, or vector map) is determined by the share link configuration. This endpoint is public and requires no authentication.",
        "operationId": "lot-share-views-render",
        "parameters": [
          {
            "name": "token",
            "required": true,
            "in": "path",
            "description": "The unique token used for the share link",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "darkmode",
            "required": false,
            "in": "query",
            "description": "Pass darkmode=true to force dark mode in the rendered page",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "navbar",
            "required": false,
            "in": "query",
            "description": "Pass navbar=hidden to hide the header/navbar in the rendered page",
            "schema": {
              "enum": [
                "hidden"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "summary": "Render the current visual state of a lot for a given share link token (public, unauthenticated)",
        "tags": [
          "lot share views"
        ]
      }
    },
    "/v2/lot-share-views/{id}/zones/{zoneId}": {
      "put": {
        "description": "This endpoint allows the user to assign zone to lot share view by id",
        "operationId": "lot-share-views-assign-zone",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "zoneId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotShareViewDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Assign zone to lot share view",
        "tags": [
          "lot share views"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to unassign zone from lot share view by id",
        "operationId": "lot-share-views-unassign-zone",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "zoneId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LotShareViewDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unassign zone from lot share view",
        "tags": [
          "lot share views"
        ]
      }
    },
    "/v2/rgb-displays": {
      "get": {
        "description": "This endpoint allows the user to list all rgb displays",
        "operationId": "rgb-displays-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `name`, `lot_id`, `zone_id`, `serial_number`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "serialNumber": {
                "summary": "Filter by serial_number",
                "value": [
                  "serial_number:eq:D123456"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/RgbDisplayDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all rgb displays",
        "tags": [
          "rgb displays"
        ]
      }
    },
    "/v2/rgb-displays/{id}/source-zones": {
      "post": {
        "description": "This endpoint allows the user to add source zones to an existing rgb display.",
        "operationId": "rgb-displays-assign-source-zones",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignSourceZonesToRgbDisplayDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Add a source zones to an rgb display",
        "tags": [
          "rgb displays"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to unassign unassign source zones from rgb displays by id",
        "operationId": "rgb-displays-unassign-source-zones",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnassignSourceZonesFromRgbDisplaysDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unassign unassign source zones from rgb displays",
        "tags": [
          "rgb displays"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to create replace source zones on rgb display",
        "operationId": "rgb-displays-replace-source-zones",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceSourceZonesToRgbDisplayDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create replace source zones on rgb display",
        "tags": [
          "rgb displays"
        ]
      }
    },
    "/v2/rgb-displays/{id}/simulate": {
      "post": {
        "description": "This endpoint allows the user to simulate the rgb display response by available count",
        "operationId": "rgb-displays-simulate",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SimulateRgbDisplayDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Simulate result for rgb displays",
        "tags": [
          "rgb displays"
        ]
      }
    },
    "/v2/rgb-displays/{id}": {
      "get": {
        "description": "This endpoint allows the user to get rgb displays by id",
        "operationId": "rgb-displays-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get rgb displays",
        "tags": [
          "rgb displays"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update rgb displays by id",
        "operationId": "rgb-displays-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRgbDisplayDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update rgb displays",
        "tags": [
          "rgb displays"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete rgb displays by id",
        "operationId": "rgb-displays-unassign",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Rgb display successfuly unassigned.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Rgb display successfuly unassigned."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete rgb displays",
        "tags": [
          "rgb displays"
        ]
      },
      "put": {
        "description": "Fully replaces an RGB display's configuration, including its name, default message, and source zones. The provided sourceZoneIds list completely replaces the existing source zones",
        "operationId": "rgb-displays-replace-display",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "description": "The ID of the RGB display to replace",
            "schema": {
              "example": 1,
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceRgbDisplayDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Replace an RGB display",
        "tags": [
          "rgb displays"
        ]
      }
    },
    "/v2/rgb-displays/{id}/source-zones/{sourceZoneId}": {
      "delete": {
        "description": "This endpoint allows the user to unassign unassign source zones by source zone id from rgb displays by id",
        "operationId": "rgb-displays-unassign-source-zone",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sourceZoneId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unassign unassign source zones by source zone id from rgb displays",
        "tags": [
          "rgb displays"
        ]
      },
      "put": {
        "description": "This endpoint allows the user to create assign source zones to rgb displays",
        "operationId": "rgb-displays-replace-single-source-zone",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sourceZoneId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create assign source zones to rgb displays",
        "tags": [
          "rgb displays"
        ]
      }
    },
    "/v2/rgb-display-rules": {
      "get": {
        "description": "This endpoint allows the user to list all rgb display rules",
        "operationId": "rgb-display-rules-find-all",
        "parameters": [
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "example": 1,
              "type": "number"
            },
            "description": "Page number, starting at 1. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "size",
            "required": false,
            "in": "query",
            "schema": {
              "example": 200,
              "type": "number"
            },
            "description": "Items per page: 10 by default, at most 300. See [Paging](/api/conventions#paging)."
          },
          {
            "name": "filter",
            "required": false,
            "in": "query",
            "description": "Filter as `field:rule:value`, for example `lot_id:eq:7`. Repeat `filter` to combine filters; all must match. Fields: `account_id`, `name`, `lot_id`, `zone_id`, `rgb_display_id`. See [Filtering](/api/conventions#filtering).",
            "examples": {
              "accountId": {
                "summary": "Filter by account_id",
                "value": [
                  "account_id:eq:1"
                ]
              },
              "name": {
                "summary": "Filter by name",
                "value": [
                  "name:eq:john doe"
                ]
              },
              "lotId": {
                "summary": "Filter by lot_id",
                "value": [
                  "lot_id:eq:1"
                ]
              },
              "zoneId": {
                "summary": "Filter by zone_id",
                "value": [
                  "zone_id:eq:1"
                ]
              },
              "rgbDisplayId": {
                "summary": "Filter by rgb_display_id",
                "value": [
                  "rgb_display_id:eq:1"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "required": false,
            "in": "query",
            "description": "Sort as `field:asc` or `field:desc`. Send it once. Fields: `order`, `name`, `id`. See [Sorting](/api/conventions#sorting).",
            "examples": {
              "orderAscending": {
                "summary": "Sort by order ascending",
                "value": [
                  "order:asc"
                ]
              },
              "orderDescending": {
                "summary": "Sort by order descending",
                "value": [
                  "order:desc"
                ]
              },
              "nameAscending": {
                "summary": "Sort by name ascending",
                "value": [
                  "name:asc"
                ]
              },
              "nameDescending": {
                "summary": "Sort by name descending",
                "value": [
                  "name:desc"
                ]
              },
              "idAscending": {
                "summary": "Sort by id ascending",
                "value": [
                  "id:asc"
                ]
              },
              "idDescending": {
                "summary": "Sort by id descending",
                "value": [
                  "id:desc"
                ]
              }
            },
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PaginatedResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/RgbDisplayRuleDto"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get all rgb display rules",
        "tags": [
          "rgb display rules"
        ]
      }
    },
    "/v2/rgb-display-rules/{id}": {
      "get": {
        "description": "This endpoint allows the user to get rgb display rules by id",
        "operationId": "rgb-display-rules-find-one",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayRuleDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get rgb display rules",
        "tags": [
          "rgb display rules"
        ]
      },
      "patch": {
        "description": "This endpoint allows the user to update rgb display rules by id",
        "operationId": "rgb-display-rules-update",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRgbDisplayRuleDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/SuccessResponseDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RgbDisplayRuleDto"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Some of the provided request parameters are missing or are invalid. User should add/change them according to response message.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 23,
                      "message": "Validation error",
                      "field": "field"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update rgb display rules",
        "tags": [
          "rgb display rules"
        ]
      },
      "delete": {
        "description": "This endpoint allows the user to delete rgb display rules by id",
        "operationId": "rgb-display-rules-remove",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted.",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "Successfully deleted."
                }
              }
            }
          },
          "401": {
            "description": "Account user is not logged in and they should log in again.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 1,
                      "message": "Unauthorized access."
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "User does not have permission to access requested resource.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 4,
                      "message": "No permission."
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource that has been requested does not exist. User should not try to repeat this request.",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "errors": [
                    {
                      "code": 6,
                      "message": "Resource not found."
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete rgb display rules",
        "tags": [
          "rgb display rules"
        ]
      }
    }
  },
  "info": {
    "title": "Parklio API",
    "description": "The Parklio API controls and monitors Parklio parking hardware — barriers, gates, chains,\nbollards, Brains, LPR cameras, parking-detection cameras and payment terminals — and manages\nthe access you share with drivers and guests.\n\n- **Base URL:** `https://api.parklio.com/v2`\n- **Auth:** `Authorization: Bearer <api-token>` on every request.\n- **Responses:** `{ \"success\": true, \"data\": … }`; errors are `{ \"success\": false, \"errors\": [{ \"code\", \"message\", \"field\" }] }`. Branch on `code`, not on the HTTP status.\n- **Hardware operations are asynchronous:** a state change returns an `event_id`; the result arrives as a realtime event.\n\nNew here? Start with *Get started*: it explains which integration path fits your product and what you need before your first call.",
    "version": "1.0",
    "contact": {
      "name": "Parklio support",
      "url": "https://tickets.parklio.com"
    }
  },
  "tags": [
    {
      "name": "auth",
      "description": "Authentication endpoints issue and revoke the bearer tokens Account\n  Users use to access Parklio Connect and PMS: password login, PMS login,\n  logout, and social login via supported third-party providers (creating a\n  Connect account automatically on first sign-in). Successful\n  authentication returns an Account User token that identifies the user\n  for all subsequent authenticated requests.",
      "x-displayName": "Authentication"
    },
    {
      "name": "api tokens",
      "description": "An API Token is a long-lived credential issued to an\n  Account for machine-to-machine access, used in place of an Account\n  User's password login. It is the mechanism behind the API account role:\n  any account holding a valid API Token can call the same v2 endpoints as\n  an authenticated Account User, scoped to that account's own resources.",
      "x-displayName": "API tokens"
    },
    {
      "name": "accounts",
      "description": "An Account is the top-level tenant in Parklio: it owns lots, products,\n  and the Account Users who manage them, and carries billing/contact\n  details plus an Account Role (PARKLIO_INTERNAL, PMS, CONNECT, or API)\n  that determines what kind of tenant it is. Feature access is granted\n  through Account Authorities derived from product licenses, and an\n  Account can be linked to a Space Invoice organisation or myPOS provider\n  for invoicing and payments.",
      "x-displayName": "Accounts"
    },
    {
      "name": "account users",
      "description": "An Account User is a human login identity belonging to an Account, used\n  to sign in to the Parklio PMS/Connect applications with an email and\n  password. Each Account User holds an Account User Role (SUPER_ADMIN,\n  ADMIN, or OPERATOR) that governs their permissions, and can be scoped to\n  specific lots, invited by email or phone, and subscribed to proactive or\n  license-plate alerts.",
      "x-displayName": "Account users"
    },
    {
      "name": "lots",
      "description": "A Lot is the top-level parking site an account manages — a physical\n  location such as a garage or parking lot, identified by name and\n  address. Zones and parking places are organized underneath a lot, and\n  aggregate counters (spot count, occupied count) roll up to it.",
      "x-displayName": "Lots"
    },
    {
      "name": "zones",
      "description": "A Zone is a subdivision of a Lot (e.g. a floor or section) that groups\n  parking places and the cameras/tariffs that apply to them. It tracks\n  its own spot/occupied counters, can have LPR presence, and is the\n  level at which tariffs are assigned and zone-specific settings live.",
      "x-displayName": "Zones"
    },
    {
      "name": "lot share views",
      "description": "A Lot Share View is a public, tokenized link for a lot that renders\n  its live occupancy state without authentication, scoped to a set of\n  zones. The view type (counts only, live camera, or vector map)\n  controls what is shown, and the link can be revoked at any time.",
      "x-displayName": "Lot share views"
    },
    {
      "name": "products",
      "description": "A Product is a physical Parklio hardware device (e.g. a barrier, gate,\n  bollard, chain, or brain) that has been paired with an account through\n  master-key exchange in the Parklio Connect App. Once assigned to a lot,\n  a product can be remotely operated (e.g. opened/closed), configured,\n  and monitored through this API.",
      "x-displayName": "Products"
    },
    {
      "name": "gateways",
      "description": "A Gateway is a physical Parklio bridge device that connects\n  Bluetooth-based products (barriers, gates, chains, brains, etc.) on\n  a lot to the Parklio backend over the network. Identified by a\n  hardware UUID and public key, it reports an online/offline status\n  and firmware/network details, and can be remotely operated (reboot,\n  info, force scan) once assigned to a lot and account.",
      "x-displayName": "Gateways"
    },
    {
      "name": "lpr cameras",
      "description": "An LPR (license-plate recognition) Camera is a Parklio hardware device\n  paired to an account via its UUID sticker and assigned to a zone. It\n  watches an IN/OUT/IN-OUT lane, reads passing plates, and can trigger a\n  connected barrier, gate, chain, or bollard to open; its status (online,\n  offline, sleeping, resetting) and input signal state are reported and\n  it can be remotely rebooted or opened through this API.",
      "x-displayName": "LPR cameras"
    },
    {
      "name": "rotaries",
      "description": "A Rotary is a multi-space Parklio parking product that groups\n  several individually named Rotary Parking Places under one physical\n  unit, each tracked as occupied or free. Rotaries are scoped to a lot\n  and account; this endpoint group manages both rotaries and their\n  parking places, including bulk occupancy updates.",
      "x-displayName": "Rotaries"
    },
    {
      "name": "operation tokens",
      "description": "An Operation Token is the underlying credential that authorizes a\n  guest to remotely operate (open/close/check status) a single Product\n  during a defined time window, or without expiry. It stores the signed\n  open/close/status payloads sent to the device, tracks how many times\n  it has been used, and its status (active, depleted, expired, blocked,\n  etc.) drives what a linked Operation Key or Key Log is allowed to do.",
      "x-displayName": "Operation tokens"
    },
    {
      "name": "operation keys",
      "description": "An Operation Key is a guest access grant shared directly between two\n  Parklio Connect App users: a sender (the product's owner or admin)\n  grants a receiver (another registered account user) the right to\n  remotely operate a Product. It is backed one-to-one by an Operation\n  Token, which carries the actual time window and the signed\n  open/close/status credentials, and can be created singly, in bulk, or\n  imported from a CSV file.",
      "x-displayName": "Operation keys"
    },
    {
      "name": "key logs",
      "description": "A Key Log records a guest's granted access to a Product where the\n  receiver is identified by an email, phone number, or license plate\n  rather than an app account. It is backed one-to-one by an Operation\n  Token, which holds the actual validity window and the signed\n  open/close/status credentials used to remotely operate the device, so\n  a key log's status and dates are driven by its token. Key logs can be\n  resent, bulk-updated, or blocked by the sender.",
      "x-displayName": "Key logs"
    },
    {
      "name": "key invitations",
      "description": "A Key Invitation is a pending guest-access invite sent to someone who\n  does not yet have a Parklio account, identified by an email, phone\n  number, or license plate. It carries its own validity window\n  (start/end time, or unlimited) and a lifecycle status (pending,\n  activated, blocked, invalid, expired, deleted) tracking whether the\n  receiver has redeemed it to gain remote-operate access to a Product.",
      "x-displayName": "Key invitations"
    },
    {
      "name": "weblinks",
      "description": "A Weblink is a shareable, time-boxed link generated for a Product and\n  sent by an account user to a receiver identified by email, phone, or\n  license plate. It lets the receiver remotely operate the product (e.g.\n  open a barrier) a limited number of times without a platform login,\n  and tracks its own status such as active, blocked, depleted, or\n  expired.",
      "x-displayName": "Weblinks"
    },
    {
      "name": "qr codes",
      "description": "A QR Code is a time-boxed access credential generated by an account\n  user for a Product, valid between a start and end time. A guest scans\n  it to remotely operate the product (e.g. open a gate) without needing\n  an account login, making it useful for one-off or short-lived visitor\n  access.",
      "x-displayName": "QR codes"
    },
    {
      "name": "members",
      "description": "A Member is a person or vehicle registered under an Account by license\n  plate, optionally with a name, description, and email, used to grant\n  recognized access (e.g. via LPR) independent of a login account.\n  Members can be organized into Groups and are commonly bulk-created or\n  exported via CSV upload/download.",
      "x-displayName": "Members"
    },
    {
      "name": "groups",
      "description": "A Group is a named collection of Members under an Account, used to\n  apply shared behavior, such as a Tariff, to all its members at once.\n  This API covers Group CRUD plus assigning, unassigning, and replacing\n  the set of Members belonging to a Group.",
      "x-displayName": "Groups"
    },
    {
      "name": "lot whitelists",
      "description": "A Lot Whitelist entry grants a license plate free, unmonitored access\n  to a lot for a given time window (or indefinitely, when unlimited),\n  bound to the account user who owns the plate. It works only in\n  conjunction with Parklio ANPR, which checks incoming plates against\n  active whitelist entries before raising a violation.",
      "x-displayName": "Lot whitelists"
    },
    {
      "name": "plate readings",
      "description": "A Plate Reading is a single license-plate detection recorded by an LPR\n  Camera in a zone: the normalized plate number, a confidence score,\n  captured vehicle attributes (type, make, color, model), lane direction,\n  and the access decision made at the time (e.g. triggered, or denied for\n  reasons like no active session, no tariff, or max capacity). Readings\n  are linked to the parking Session they open or close.",
      "x-displayName": "Plate readings"
    },
    {
      "name": "license plate alerts",
      "description": "A License Plate Alert watches a set of license plates within a zone\n  and notifies its assigned account-user receivers by email when one of\n  those plates is detected by LPR, throttled by a configurable minimum\n  interval between emails per plate.",
      "x-displayName": "License plate alerts"
    },
    {
      "name": "sessions",
      "description": "A Session represents a single vehicle's stay in a Zone, from entry to\n  exit. It is opened by an entry event (an LPR camera plate read,\n  terminal, product, payment, or attendant action) and, once the vehicle\n  leaves, closed by a matching exit; it tracks duration, amount paid, and\n  the plate readings recorded over the course of the stay.",
      "x-displayName": "Sessions"
    },
    {
      "name": "tariffs",
      "description": "A Tariff defines the pricing rules for a parking session on an account:\n  price per interval, free-time allowances, a maximum stay/price (\"maxima\"),\n  and an optional season window and price-progression curve (flat, linear,\n  exponential, or incremental). Tariffs can be scheduled, applied to zones,\n  and restricted to specific member groups.",
      "x-displayName": "Tariffs"
    },
    {
      "name": "terminals",
      "description": "A Terminal is a physical Parklio kiosk (an exit/entry/payment station)\n  installed at a Zone, identified by its device ID, MAC address, and\n  public key, and tracked as online/offline via heartbeat. This API\n  manages the terminal's lifecycle (create, update, unassign, operate,\n  reboot) plus the parking sessions, payments, LPR camera feeds, and\n  plate readings it reports once connected.",
      "x-displayName": "Terminals"
    },
    {
      "name": "parking places",
      "description": "A Parking Place is a single, individually trackable parking spot\n  belonging to a zone and lot, identified by name and UUID. Its\n  occupancy status (occupied, free, or unknown) is updated by parking\n  detection hardware and is the atomic unit that zone/lot occupancy\n  counts are aggregated from.",
      "x-displayName": "Parking places"
    },
    {
      "name": "parking place changes",
      "description": "A Parking Place Change is a historical record of a parking place's\n  occupancy transitioning (occupied/free/unknown), capturing when it\n  started, how long it lasted, and the place it belongs to. These\n  records back occupancy-history and average-occupied-duration reporting\n  for a lot or zone.",
      "x-displayName": "Parking place changes"
    },
    {
      "name": "parking analytics",
      "description": "Parking Analytics computes aggregate metrics over parking activity\n  recorded in Sessions and occupancy data, such as turnover rate,\n  average/total occupancy duration, and peak occupancy hour. Metrics can\n  be scoped to a lot, zone, or individual parking place and bucketed into\n  time intervals (e.g. hourly), rather than exposing a persisted entity\n  of their own.",
      "x-displayName": "Parking analytics"
    },
    {
      "name": "proactive alerts",
      "description": "A Proactive Alert watches a zone's occupancy and notifies its\n  assigned account-user receivers by email once occupancy crosses a\n  configurable threshold percentage, throttled by a minimum interval\n  between emails so the same alert doesn't re-fire too often.",
      "x-displayName": "Proactive alerts"
    },
    {
      "name": "rgb displays",
      "description": "An RGB Display is a Parklio LED signage device installed in a zone\n  that shows a free/occupied space count (or a custom default message)\n  sourced from one or more source zones. Its displayed text is driven\n  by an ordered set of RGB Display Rules evaluated against the current\n  occupancy count.",
      "x-displayName": "RGB displays"
    },
    {
      "name": "rgb display rules",
      "description": "An RGB Display Rule defines the text an RGB Display shows for a\n  given occupancy condition — an operator (equals, less-than,\n  greater-than, or between) compared against an occupied value (or\n  range), optionally scoped to a start/end time. Rules are ordered per\n  display and evaluated in that order to pick the message to render.",
      "x-displayName": "RGB display rules"
    },
    {
      "name": "parking detection cameras",
      "description": "A Parking Detection Camera is a Parklio hardware device attached to a\n  Parking Detection Gateway that watches a zone's parking spaces and\n  determines occupancy using computer vision. It can be configured with a\n  view schema describing how the frame maps to individual spaces, and\n  exposes its live camera frame through this API for setup and\n  monitoring.",
      "x-displayName": "Parking detection cameras"
    },
    {
      "name": "parking detection gateways",
      "description": "A Parking Detection Gateway is the on-site hub that connects one or\n  more Parking Detection Cameras to a Lot and relays their occupancy\n  data back to the platform. It is identified by a UUID assigned during\n  setup and reports an online/offline connectivity status.",
      "x-displayName": "Parking detection gateways"
    },
    {
      "name": "violation zones",
      "description": "A Violation Zone is an area monitored by a parking detection camera\n  for unauthorized or overstaying vehicles, identified by name and\n  UUID. It is the parent resource for Violation Zone Events, which\n  record the individual stationary-vehicle detections raised within it.",
      "x-displayName": "Violation zones"
    },
    {
      "name": "violation zone events",
      "description": "A Violation Zone Event is a single detection raised within a\n  Violation Zone when a vehicle (identified by license plate, make,\n  model, color) is found stationary for longer than allowed, captured\n  with a start/end time, stationary duration, and an evidence image.",
      "x-displayName": "Violation zone events"
    },
    {
      "name": "logs",
      "description": "LOGS is an umbrella tag for the platform's audit trails: internal\n  master-key exchanges between a Product and an Account, product\n  operation logs (open/close/force-open/force-close and similar\n  actions, tagged with the access channel used), LPR camera\n  remote-control logs, and lot whitelist logs. Each entry is an\n  immutable, timestamped record of who performed what action and on\n  which resource, used for troubleshooting and compliance.",
      "x-displayName": "Logs"
    },
    {
      "name": "statistics",
      "description": "STATISTICS surfaces aggregate operational data derived from device\n  activity, starting with remote-control logs: a record of every\n  open/close command issued to a Product through a Gateway, together\n  with the Account and AccountUser that triggered it and when it\n  happened. These records are indexed for fast querying by account,\n  operation type, and time, powering usage reporting rather than\n  real-time control.",
      "x-displayName": "Statistics"
    }
  ],
  "servers": [
    {
      "url": "https://api.parklio.com"
    }
  ],
  "components": {
    "securitySchemes": {
      "bearer": {
        "scheme": "bearer",
        "type": "http",
        "description": "An API token (or an account-user token) sent as `Authorization: Bearer <token>`. See Authentication."
      }
    },
    "schemas": {
      "SuccessResponseDto": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          }
        },
        "required": [
          "success"
        ]
      },
      "AccountDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "account_role_id": {
            "type": "number",
            "example": 2
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "contact_name": {
            "type": "string",
            "example": "John Doe"
          },
          "contact_email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "contact_phone": {
            "type": "string",
            "example": "+385 555 5555"
          },
          "auto_extend": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "billing_title": {
            "type": "string",
            "example": "monthly"
          },
          "vat": {
            "type": "string",
            "example": "25%"
          },
          "address": {
            "type": "string",
            "example": "Put Stinica 12"
          },
          "city": {
            "type": "string",
            "example": "Split"
          },
          "zip_code": {
            "type": "string",
            "example": "21000"
          },
          "infinite_shares": {
            "type": "number"
          },
          "created_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "account_role": {
            "type": "object",
            "example": {
              "id": 2,
              "name": "PMS"
            }
          },
          "authorities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "organisation_id": {
            "type": "string"
          },
          "additional_custom_fee": {
            "type": "number"
          },
          "my_pos_client_id": {
            "type": "string"
          },
          "my_pos_secret": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "account_role_id",
          "name",
          "contact_name",
          "contact_email",
          "contact_phone",
          "auto_extend",
          "billing_title",
          "vat",
          "address",
          "city",
          "zip_code",
          "infinite_shares",
          "created_at",
          "updated_at",
          "account_role",
          "authorities",
          "organisation_id",
          "additional_custom_fee",
          "my_pos_client_id",
          "my_pos_secret"
        ]
      },
      "UpdateAccountDto": {
        "type": "object",
        "properties": {
          "account_role_id": {
            "type": "number",
            "example": 2
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "contact_name": {
            "type": "string",
            "example": "John Doe"
          },
          "contact_email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "contact_phone": {
            "type": "string",
            "example": "+385 555 5555"
          },
          "billing_title": {
            "type": "string",
            "example": "monthly"
          },
          "vat": {
            "type": "string",
            "example": "25%"
          },
          "address": {
            "type": "string",
            "example": "Put Stinica 12"
          },
          "city": {
            "type": "string",
            "example": "Split"
          },
          "zip_code": {
            "type": "string",
            "example": "21000"
          },
          "organisation_id": {
            "type": "string",
            "example": "2481289123"
          },
          "additional_custom_fee": {
            "type": "number",
            "example": "2.55"
          },
          "my_pos_client_id": {
            "type": "string",
            "example": "NDQ5XjTbF3G5Yk9qwu7Yzg"
          },
          "my_pos_secret": {
            "type": "string",
            "example": "ryIOXX5zVbJ2cmzxx6s6Sw"
          }
        }
      },
      "ActiveProductsDto": {
        "type": "object",
        "properties": {
          "products": {
            "type": "number"
          },
          "barriers": {
            "type": "number"
          },
          "gates": {
            "type": "number"
          },
          "bollards": {
            "type": "number"
          },
          "chains": {
            "type": "number"
          },
          "brains": {
            "type": "number"
          },
          "lprs": {
            "type": "number"
          },
          "parking_places": {
            "type": "number"
          }
        },
        "required": [
          "products",
          "barriers",
          "gates",
          "bollards",
          "chains",
          "brains",
          "lprs",
          "parking_places"
        ]
      },
      "SignupDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "password": {
            "type": "string"
          },
          "phone": {
            "type": "string",
            "example": "+385 555 5555"
          }
        },
        "required": [
          "email",
          "password"
        ]
      },
      "ProductLicenseSummaryDto": {
        "type": "object",
        "properties": {
          "account_id": {
            "type": "number"
          },
          "barriers": {
            "type": "number"
          },
          "bollards": {
            "type": "number"
          },
          "brains": {
            "type": "number"
          },
          "chains": {
            "type": "number"
          },
          "gates": {
            "type": "number"
          },
          "lpr_cameras": {
            "type": "number"
          },
          "parking_places": {
            "type": "number"
          }
        },
        "required": [
          "account_id",
          "barriers",
          "bollards",
          "brains",
          "chains",
          "gates",
          "lpr_cameras",
          "parking_places"
        ]
      },
      "MessageDto": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          }
        },
        "required": [
          "message"
        ]
      },
      "SyncDto": {
        "type": "object",
        "properties": {
          "dry_run": {
            "type": "boolean",
            "example": false
          }
        }
      },
      "MetaDto": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number",
            "example": 100
          },
          "per_page": {
            "type": "number",
            "example": 10
          },
          "current_page": {
            "type": "number",
            "example": 1
          },
          "last_page": {
            "type": "number",
            "example": 1
          },
          "first_page": {
            "type": "number",
            "example": 1
          },
          "first_page_url": {
            "type": "string",
            "example": "/?page=2"
          },
          "last_page_url": {
            "type": "string",
            "example": "/?page=10"
          },
          "next_page_url": {
            "type": "string",
            "example": "/?page=3"
          },
          "previous_page_url": {
            "type": "string",
            "example": "/?page=1"
          }
        },
        "required": [
          "total",
          "per_page",
          "current_page",
          "last_page",
          "first_page",
          "first_page_url",
          "last_page_url",
          "next_page_url",
          "previous_page_url"
        ]
      },
      "PaginatedResponseDto": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "meta": {
            "$ref": "#/components/schemas/MetaDto"
          }
        },
        "required": [
          "success",
          "meta"
        ]
      },
      "AccountUserDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "account_user_role_id": {
            "type": "number",
            "example": 1
          },
          "account_id": {
            "type": "number"
          },
          "email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "phone": {
            "type": "string",
            "example": "+385 555 5555"
          },
          "language_tag": {
            "type": "string",
            "example": "fr-BE",
            "description": "BCP 47 language tag",
            "nullable": true
          },
          "country_code": {
            "type": "string",
            "example": "BE",
            "description": "ISO 3166-1 alpha-2 country code",
            "nullable": true
          },
          "email_confirmed": {
            "type": "number",
            "example": 1
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "account": {
            "type": "object",
            "example": {
              "id": 1,
              "account_role_id": 1,
              "auto_extend": {},
              "name": "John Doe",
              "contact_name": "John Doe",
              "contact_email": "john.doe@example.com",
              "contact_phone": "+385 666 6666",
              "billing_title": "string",
              "vat": "25%",
              "address": "Put Stinica 12",
              "city": "Split",
              "zip_code": "21000",
              "created_at": {},
              "updated_at": {},
              "infinite_shares": 0,
              "account_role": {
                "id": 2,
                "name": "PMS",
                "created_at": {},
                "updated_at": {}
              },
              "authorities": []
            }
          },
          "account_user_role": {
            "type": "object",
            "example": {
              "id": 1,
              "name": "Super Admin",
              "created_at": {},
              "updated_at": {}
            }
          },
          "lots": {
            "example": {
              "id": 1,
              "name": "Default Lot",
              "address": "Put Stinica 12"
            },
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "account_user_role_id",
          "account_id",
          "email",
          "name",
          "phone",
          "email_confirmed",
          "created_at",
          "updated_at",
          "account",
          "account_user_role",
          "lots"
        ]
      },
      "CreateAccountDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "login_name": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "login_password": {
            "type": "string"
          },
          "contact_name": {
            "type": "string",
            "example": "John Doe"
          },
          "contact_email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "login_email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "contact_phone": {
            "type": "string",
            "example": "+385 555 5555"
          },
          "billing_title": {
            "type": "string",
            "example": "monthly"
          },
          "vat": {
            "type": "string",
            "example": "25%"
          },
          "address": {
            "type": "string",
            "example": "Put Stinica 12"
          },
          "city": {
            "type": "string",
            "example": "Split"
          },
          "zip_code": {
            "type": "string",
            "example": "21000"
          }
        },
        "required": [
          "name",
          "login_name",
          "contact_name",
          "contact_email",
          "login_email"
        ]
      },
      "ProductLicenseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "account_id": {
            "type": "number"
          },
          "barriers": {
            "type": "number"
          },
          "lpr_cameras": {
            "type": "number"
          },
          "brains": {
            "type": "number"
          },
          "gates": {
            "type": "number"
          },
          "chains": {
            "type": "number"
          },
          "bollards": {
            "type": "number"
          },
          "parking_places": {
            "type": "number"
          },
          "active": {
            "type": "number"
          },
          "created_by": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "account_id",
          "barriers",
          "lpr_cameras",
          "brains",
          "gates",
          "chains",
          "bollards",
          "parking_places",
          "active",
          "created_by",
          "created_at",
          "updated_at"
        ]
      },
      "CreateProductLicenseDto": {
        "type": "object",
        "properties": {
          "account_id": {
            "type": "number",
            "example": 1,
            "description": "The ID of the account. Must be a non-negative number. Defaults to 0 if not provided."
          },
          "barriers": {
            "type": "number",
            "example": 1,
            "description": "The number of barriers. Must be a non-negative number. Defaults to 0 if not provided."
          },
          "lpr_cameras": {
            "type": "number",
            "example": 1,
            "description": "The number of lpr cameras. Must be a non-negative number. Defaults to 0 if not provided."
          },
          "brains": {
            "type": "number",
            "example": 1,
            "description": "The number of brains. Must be a non-negative number. Defaults to 0 if not provided."
          },
          "gates": {
            "type": "number",
            "example": 1,
            "description": "The number of gates. Must be a non-negative number. Defaults to 0 if not provided."
          },
          "bollards": {
            "type": "number",
            "example": 1,
            "description": "The number of bollards. Must be a non-negative number. Defaults to 0 if not provided."
          },
          "chains": {
            "type": "number",
            "example": 1,
            "description": "The number of chains. Must be a non-negative number. Defaults to 0 if not provided."
          },
          "parking_places": {
            "type": "number",
            "example": 1,
            "description": "The number of parking places. Must be a non-negative number. Defaults to 0 if not provided."
          }
        }
      },
      "UpdateProductLicenseDto": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          }
        },
        "required": [
          "active"
        ]
      },
      "ListLotManagersDto": {
        "type": "object",
        "properties": {
          "account_user": {
            "$ref": "#/components/schemas/AccountUserDto"
          },
          "account_user_id": {
            "type": "number"
          },
          "lot_id": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          }
        },
        "required": [
          "account_user",
          "account_user_id",
          "lot_id",
          "created_at",
          "updated_at",
          "deleted_at"
        ]
      },
      "UpdateLotManagersDto": {
        "type": "object",
        "properties": {
          "managers": {
            "example": [
              1,
              2,
              3
            ],
            "description": "Set of Account User IDs targeted for updates.",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "managers"
        ]
      },
      "LotDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "account_id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "description": {
            "type": "string",
            "example": "Lot description"
          },
          "address": {
            "type": "string",
            "example": "Lot address"
          },
          "latitude": {
            "type": "number",
            "example": 45.14270079621355
          },
          "longitude": {
            "type": "number",
            "example": 24.789809374999987
          },
          "timezone": {
            "type": "string",
            "example": "Europe/Zagreb"
          },
          "spot_count": {
            "type": "number",
            "example": 10
          },
          "occupied_count": {
            "type": "number",
            "example": 0
          },
          "detection_status": {
            "type": "string"
          },
          "detection_implementation_status": {
            "type": "string"
          },
          "lot_state_representation_vector": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "deleted_at": {
            "type": "string",
            "example": null
          }
        },
        "required": [
          "id",
          "account_id",
          "name",
          "description",
          "address",
          "latitude",
          "longitude",
          "timezone",
          "spot_count",
          "occupied_count",
          "detection_status",
          "detection_implementation_status",
          "lot_state_representation_vector",
          "created_at",
          "updated_at",
          "deleted_at"
        ]
      },
      "CreateLotDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Lot name"
          },
          "description": {
            "type": "string",
            "example": "Lot description"
          },
          "address": {
            "type": "string",
            "example": "Lot address"
          },
          "latitude": {
            "type": "number",
            "example": 43.52652359
          },
          "longitude": {
            "type": "number",
            "example": 16.450813293
          }
        },
        "required": [
          "name",
          "address"
        ]
      },
      "UpdateLotDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "description": {
            "type": "string",
            "example": "Lot description"
          },
          "address": {
            "type": "string",
            "example": "Lot address"
          },
          "timezone": {
            "type": "string",
            "example": "Europe/Zagreb"
          },
          "latitude": {
            "type": "number",
            "example": 43.52652359
          },
          "longitude": {
            "type": "number",
            "example": 16.450813293
          }
        }
      },
      "LotFreeSpotsDto": {
        "type": "object",
        "properties": {
          "spots": {
            "type": "string",
            "example": "10"
          }
        },
        "required": [
          "spots"
        ]
      },
      "ParkingPlacePartialDto": {
        "type": "object",
        "properties": {}
      },
      "ParkingPlaceChangeDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "lot_id": {
            "type": "number",
            "example": 1
          },
          "parking_place_id": {
            "type": "number",
            "example": 1
          },
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "duration": {
            "type": "number",
            "example": 1,
            "description": "in seconds"
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "occupancy_status": {
            "type": "string",
            "enum": [
              "occupied",
              "free",
              "unknown"
            ]
          },
          "parking_place": {
            "example": {
              "id": 1,
              "name": "Parking place"
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/ParkingPlacePartialDto"
              }
            ]
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "lot_id",
          "parking_place_id",
          "zone_id",
          "duration",
          "end_time",
          "occupancy_status",
          "parking_place",
          "created_at",
          "updated_at"
        ]
      },
      "AcceptAccountUserInvitationPasswordDto": {
        "type": "object",
        "properties": {
          "password": {
            "type": "string",
            "example": "12345678"
          },
          "password_confirmation": {
            "type": "string",
            "example": "12345678"
          }
        },
        "required": [
          "password",
          "password_confirmation"
        ]
      },
      "ResendAccountUserInvitationDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "john.doe@example.com"
          }
        },
        "required": [
          "email"
        ]
      },
      "SenderDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "account_user_role_id": {
            "type": "number"
          },
          "account_id": {
            "type": "number"
          },
          "email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "phone": {
            "type": "string"
          },
          "email_confirmed": {
            "type": "number"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "account_user_role_id",
          "account_id",
          "email",
          "name",
          "phone",
          "email_confirmed",
          "deleted_at",
          "created_at",
          "updated_at"
        ]
      },
      "AccountUserInvitationDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "owner_account_id": {
            "type": "number"
          },
          "sender_id": {
            "type": "number"
          },
          "sender_account_id": {
            "type": "number"
          },
          "account_user_role_id": {
            "type": "number"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "phone": {
            "type": "string"
          },
          "lots": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "receiver_identifier": {
            "type": "string",
            "example": "jane.doe@example.com"
          },
          "receiver_identifier_type": {
            "type": "string",
            "example": "email"
          },
          "status": {
            "type": "string",
            "example": "activated",
            "enum": [
              "activated",
              "blocked",
              "pending",
              "reactived"
            ]
          },
          "activated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "sender": {
            "$ref": "#/components/schemas/SenderDto"
          }
        },
        "required": [
          "id",
          "owner_account_id",
          "sender_id",
          "sender_account_id",
          "account_user_role_id",
          "name",
          "phone",
          "lots",
          "receiver_identifier",
          "receiver_identifier_type",
          "status",
          "activated_at",
          "deleted_at",
          "created_at",
          "updated_at",
          "sender"
        ]
      },
      "UpdateAccountUserInvitationDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "example": "blocked",
            "enum": [
              "activated",
              "blocked",
              "pending",
              "reactived"
            ]
          }
        },
        "required": [
          "status"
        ]
      },
      "CreateResetPasswordDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "default": "john.doe@mail.com"
          }
        },
        "required": [
          "email"
        ]
      },
      "ConfirmPasswordResetDto": {
        "type": "object",
        "properties": {
          "password": {
            "type": "string"
          },
          "token": {
            "type": "string"
          }
        },
        "required": [
          "password",
          "token"
        ]
      },
      "SpaceInvoiceTokenDto": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "example": "OfK2wSCTgproJ6MB7zzIiCHMEdA470vgEWrOoGowKgtFXm6C"
          }
        },
        "required": [
          "token"
        ]
      },
      "InviteAccountUserDto": {
        "type": "object",
        "properties": {
          "account_user_role_id": {
            "type": "number",
            "example": 1
          },
          "email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "phone": {
            "type": "string",
            "example": "12345678"
          },
          "target_lots": {
            "example": "[1]",
            "description": "An optional array of lot IDs to assign to the invited user. Each ID must correspond to a lot that belongs to the same account as the inviter. If any ID does not belong to the account, the request will be rejected.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "account_user_role_id",
          "email",
          "name"
        ]
      },
      "UpdateProfileDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "password": {
            "type": "string"
          },
          "old_password": {
            "type": "string"
          },
          "phone": {
            "type": "string",
            "example": "+3855555555"
          }
        }
      },
      "UpdateAccountUserDto": {
        "type": "object",
        "properties": {
          "account_user_role_id": {
            "type": "number",
            "example": 2
          },
          "lots": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "password": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "phone": {
            "type": "string",
            "example": "+385 555 5555"
          },
          "account_user_role": {
            "type": "string",
            "example": "Super Admin",
            "enum": [
              "Super Admin",
              "Admin",
              "Operator"
            ]
          }
        }
      },
      "ErrorResponseDto": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "success",
          "errors"
        ]
      },
      "UserElectronicDeviceDto": {
        "type": "object",
        "properties": {}
      },
      "LoginDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "default": "john.doe@mail.com"
          },
          "password": {
            "type": "string",
            "default": "somesecretpassword"
          }
        },
        "required": [
          "email",
          "password"
        ]
      },
      "VerifyOtpCodeDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "code": {
            "type": "string",
            "example": 482910
          }
        },
        "required": [
          "email",
          "code"
        ]
      },
      "LoginResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "type": {
            "type": "string"
          },
          "token": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "account_id": {
            "type": "number"
          },
          "account_user_role_id": {
            "type": "number",
            "example": 1
          },
          "account_user_id": {
            "type": "number"
          },
          "account_role_id": {
            "type": "number",
            "example": 2
          }
        },
        "required": [
          "id",
          "type",
          "token",
          "name",
          "email",
          "account_id",
          "account_user_role_id",
          "account_user_id",
          "account_role_id"
        ]
      },
      "SocialLoginDto": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "example": "apple",
            "enum": [
              "google",
              "apple"
            ]
          }
        },
        "required": [
          "token",
          "type"
        ]
      },
      "CreateApiTokenDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "default": "dev laptop"
          }
        },
        "required": [
          "name"
        ]
      },
      "ApiTokenDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "dev-laptop"
          },
          "account_id": {
            "type": "number",
            "example": 3
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "name",
          "account_id",
          "created_at",
          "updated_at"
        ]
      },
      "GatewayDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "account_id": {
            "type": "number",
            "example": 1
          },
          "lot_id": {
            "type": "number",
            "example": 1
          },
          "uuid": {
            "type": "string",
            "example": "ga27btcxx21"
          },
          "name": {
            "type": "string",
            "example": 1
          },
          "firmware_version": {
            "type": "string",
            "example": "1.0.0"
          },
          "ip_address": {
            "type": "string",
            "example": "192.158.1.38"
          },
          "is_blocked": {
            "type": "number",
            "example": 0
          },
          "mac": {
            "type": "string",
            "example": "00:1A:2B:3C:4D:5E"
          },
          "status": {
            "type": "string",
            "example": "online",
            "enum": [
              "offline",
              "online"
            ]
          },
          "created_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "deleted_at": {
            "type": "string",
            "example": null
          }
        },
        "required": [
          "id",
          "account_id",
          "lot_id",
          "uuid",
          "name",
          "firmware_version",
          "ip_address",
          "is_blocked",
          "mac",
          "status",
          "created_at",
          "updated_at",
          "deleted_at"
        ]
      },
      "AssignGatewayToUserDto": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "default": "ga27btcxx21",
            "description": "The uuid of the gateway, present phisically on the gateway"
          },
          "challenge": {
            "type": "string",
            "description": "Challenge recieved when the Gateway enters pairing mode and read from the Gateway Bluetooth Advertisement",
            "default": "NmhtcmVqdDBjempta3NsdmRtcWxxdW"
          },
          "lot_id": {
            "type": "number",
            "description": "The id of the lot where we want to add the Gateway",
            "default": 0
          }
        },
        "required": [
          "uuid",
          "challenge"
        ]
      },
      "GatewayOperationResponseDto": {
        "type": "object",
        "properties": {
          "gateway_id": {
            "type": "number"
          }
        },
        "required": [
          "gateway_id"
        ]
      },
      "GatewayOperationDto": {
        "type": "object",
        "properties": {
          "operation": {
            "type": "string",
            "example": "reboot",
            "enum": [
              "reboot",
              "info",
              "force_scan"
            ]
          }
        },
        "required": [
          "operation"
        ]
      },
      "CreateGatewayDto": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "default": "ga27btcxx21"
          },
          "mac": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "default": "00-B0-D0-63-C2-26"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "default": "ga27btcxx21"
          },
          "password": {
            "type": "string",
            "minLength": 3,
            "maxLength": 255,
            "default": "somepassword"
          },
          "public_key": {
            "type": "string",
            "minLength": 500,
            "maxLength": 1000,
            "default": "Z3ljaTBlem55OG5jZHh0b3FwbmpqejFxdDdxdmk0aDh3bW40NHBmMHBxaWplZTBnOW50eDVpeXhtN21pdTFueTd0c292eW05dHY4cXZjM3M0anMzcTdyYjJjZWI0bW5iN29ubTl3bWhqeXFjbWF4bTY2NGVhMHNqcW9vMGVuemY="
          }
        },
        "required": [
          "uuid",
          "mac",
          "password",
          "public_key"
        ]
      },
      "UpdateGatewayDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 3,
            "maxLength": 255,
            "default": "ga27btcxx21"
          },
          "lot_id": {
            "type": "number",
            "default": 5
          }
        }
      },
      "GatewayChallengeDto": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "example": "ga27btcxx21"
          }
        },
        "required": [
          "uuid"
        ]
      },
      "GatewayLoginDto": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "example": "ga27btcxx21"
          },
          "signed_challenge": {
            "type": "string"
          }
        },
        "required": [
          "uuid",
          "signed_challenge"
        ]
      },
      "SubtypeProductErrorDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "Product error id"
          },
          "jammed": {
            "type": "number",
            "description": "Shows if the barrier is jammed"
          },
          "sensor_dirty": {
            "type": "number",
            "description": "The barrier sensor is dirty"
          },
          "pin_broken": {
            "type": "number",
            "description": "The barrier pin is broken"
          },
          "rtcc_invalid": {
            "type": "number",
            "description": "The realtime clock is not set on the device"
          },
          "battery_empty": {
            "type": "number",
            "description": "The battery is criticaly low"
          },
          "master_key_not_set": {
            "type": "number",
            "description": "The barrier has no key exchanged on it"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null,
            "description": "Deleted at Dated"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "Created at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "Update at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "error_code": {
            "type": "string",
            "description": "The error code used for lookup"
          }
        },
        "required": [
          "id",
          "jammed",
          "sensor_dirty",
          "pin_broken",
          "rtcc_invalid",
          "battery_empty",
          "master_key_not_set",
          "deleted_at",
          "created_at",
          "updated_at",
          "error_code"
        ]
      },
      "SubtypeProductDto": {
        "type": "object",
        "properties": {
          "product_error": {
            "description": "Product error",
            "allOf": [
              {
                "$ref": "#/components/schemas/SubtypeProductErrorDto"
              }
            ]
          },
          "id": {
            "type": "number",
            "description": "Master key id"
          },
          "device_id": {
            "type": "string",
            "example": "B1A2B3C",
            "description": "The unique product identifier"
          },
          "name": {
            "type": "string",
            "example": "RAB231C",
            "description": "The user set product name"
          },
          "power_type": {
            "type": "string",
            "example": "battery",
            "description": "The power source type of the product",
            "enum": [
              "battery",
              "grid"
            ]
          },
          "lot_id": {
            "type": "number",
            "description": "The lot id of to which the product is assigned"
          },
          "zone_id": {
            "type": "number",
            "description": "The zone id of to which the product is assigned"
          },
          "product_type_id": {
            "type": "number",
            "description": "The product type id"
          },
          "hardware_version": {
            "type": "string",
            "example": "1.0.0",
            "description": "The hardware versions of the product"
          },
          "firmware_version": {
            "type": "string",
            "example": "1.0.0",
            "description": "The firmware version of the product"
          },
          "latitude": {
            "type": "number",
            "example": 43.52652359,
            "description": "The product latitude, acquired during setup"
          },
          "longitude": {
            "type": "number",
            "example": 16.450813293,
            "description": "The product longitude, acquired during setup"
          },
          "status": {
            "type": "string",
            "example": "online",
            "description": "The product state",
            "enum": [
              "online",
              "offline"
            ]
          },
          "advertisement_data": {
            "type": "string",
            "description": "The product raw advertisement data"
          },
          "battery_status": {
            "type": "number",
            "description": "The product battery percentage"
          },
          "product_error_id": {
            "type": "number",
            "description": "The product error id"
          },
          "rssi": {
            "type": "number",
            "example": -88,
            "description": "The measured product RSSI signal to the optimal parklio gateway"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "Created at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "Updated at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null,
            "description": "Deleted at Date"
          }
        },
        "required": [
          "product_error",
          "id",
          "device_id",
          "name",
          "power_type",
          "lot_id",
          "zone_id",
          "product_type_id",
          "hardware_version",
          "firmware_version",
          "latitude",
          "longitude",
          "status",
          "advertisement_data",
          "battery_status",
          "product_error_id",
          "rssi",
          "created_at",
          "updated_at",
          "deleted_at"
        ]
      },
      "ZoneDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "The unique identifier of the zone",
            "example": 1
          },
          "account_id": {
            "type": "number",
            "description": "The ID of the account this zone belongs to",
            "example": 1
          },
          "lot_id": {
            "type": "number",
            "description": "The ID of the lot this zone belongs to",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The name of the zone",
            "example": "Default Zone"
          },
          "description": {
            "type": "string",
            "description": "A brief description of the zone",
            "example": "Zone covering the main entrance and visitor parking area"
          },
          "spot_count": {
            "type": "number",
            "description": "The total number of parking spots in the zone",
            "example": 10
          },
          "occupied_count": {
            "type": "number",
            "description": "The current number of occupied spots in the zone",
            "example": 0
          },
          "tariffs": {
            "description": "The tariffs associated with this zone",
            "example": [
              {
                "id": 1,
                "name": "Basic Tariff",
                "order": 1
              }
            ],
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "max_levenshtein_distance": {
            "type": "number",
            "description": "The maximum Levenshtein distance allowed when fuzzy matching scanned license plates against whitelisted plates",
            "example": 1
          },
          "vector_map": {
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "The date and time the zone was created",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "The date and time the zone was last updated",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "account_id",
          "lot_id",
          "name",
          "description",
          "spot_count",
          "occupied_count",
          "tariffs",
          "max_levenshtein_distance",
          "vector_map",
          "deleted_at",
          "created_at",
          "updated_at"
        ]
      },
      "CreateZoneDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the zone",
            "example": "Main Entrance Zone"
          },
          "lot_id": {
            "type": "number",
            "description": "The ID of the lot this zone belongs to",
            "example": 1
          },
          "description": {
            "type": "string",
            "description": "A brief description of the zone",
            "example": "Zone covering the main entrance and visitor parking area"
          },
          "max_levenshtein_distance": {
            "type": "number",
            "description": "The maximum Levenshtein distance allowed when fuzzy matching scanned license plates against whitelisted plates",
            "example": 1,
            "minimum": 0,
            "maximum": 16
          }
        },
        "required": [
          "name",
          "lot_id"
        ]
      },
      "UpdateZoneDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the zone",
            "example": "Main Entrance Zone"
          },
          "lot_id": {
            "type": "number",
            "description": "The ID of the lot this zone belongs to",
            "example": 1
          },
          "description": {
            "type": "string",
            "description": "A brief description of the zone",
            "example": "Zone covering the main entrance and visitor parking area"
          },
          "occupied_count": {
            "type": "number",
            "description": "The current number of occupied spots in the zone",
            "example": 42
          },
          "spot_count": {
            "type": "number",
            "description": "The total number of parking spots in the zone",
            "example": 100
          },
          "max_levenshtein_distance": {
            "type": "number",
            "description": "The maximum Levenshtein distance allowed when fuzzy matching scanned license plates against whitelisted plates",
            "example": 1,
            "minimum": 0,
            "maximum": 16
          }
        }
      },
      "ZoneFreeSpotsDto": {
        "type": "object",
        "properties": {
          "spots": {
            "type": "string",
            "example": "10"
          }
        },
        "required": [
          "spots"
        ]
      },
      "AssignTariffsToZoneDto": {
        "type": "object",
        "properties": {}
      },
      "UnssignTariffsFromZoneDto": {
        "type": "object",
        "properties": {}
      },
      "ReplaceTariffsForZone": {
        "type": "object",
        "properties": {}
      },
      "UpdateTariffOrderDto": {
        "type": "object",
        "properties": {}
      },
      "TariffDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "Standard Day Tariff"
          },
          "description": {
            "type": "string",
            "example": "Applies during regular business hours"
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "season_start": {
            "type": "string",
            "example": "2020-01-01"
          },
          "season_end": {
            "type": "string",
            "example": "2020-12-01"
          },
          "interval": {
            "type": "number",
            "example": 60
          },
          "price": {
            "type": "number",
            "example": 200
          },
          "exit_free_time_interval": {
            "type": "number",
            "example": 10
          },
          "entry_free_time_interval": {
            "type": "number",
            "example": 5
          },
          "maxima": {
            "type": "number",
            "example": 2000
          },
          "max_time_of_stay": {
            "type": "number",
            "example": 480
          },
          "gratis_time": {
            "type": "number",
            "example": 20
          },
          "currency": {
            "type": "string",
            "example": "EUR"
          },
          "price_progression_type": {
            "type": "string",
            "example": "linear",
            "enum": [
              "flat",
              "linear",
              "exponential",
              "incremental"
            ]
          },
          "account_id": {
            "type": "number",
            "example": 1
          },
          "schedules": {
            "example": [
              {
                "id": 1,
                "weekday": 1,
                "start_time": "08:00",
                "end_time": "18:00"
              }
            ],
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "max_affected_members_per_group": {
            "type": "number",
            "example": 20,
            "description": "Maximum amount of users that will be affected by this tariff"
          },
          "zones": {
            "example": [
              {
                "id": 1,
                "name": "Premium Parking Zone"
              }
            ],
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "groups": {
            "example": [
              {
                "id": 5,
                "name": "Employees"
              }
            ],
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "start_time",
          "end_time",
          "season_start",
          "season_end",
          "interval",
          "price",
          "exit_free_time_interval",
          "entry_free_time_interval",
          "maxima",
          "max_time_of_stay",
          "gratis_time",
          "currency",
          "price_progression_type",
          "account_id",
          "schedules",
          "max_affected_members_per_group",
          "zones",
          "groups"
        ]
      },
      "CreateTariffDto": {
        "type": "object",
        "properties": {
          "group_ids": {
            "example": [
              2,
              9
            ],
            "description": "IDs of the groups this tariff applies to",
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "name": {
            "type": "string",
            "example": "Weekend Special",
            "description": "Name of the tariff"
          },
          "description": {
            "type": "string",
            "example": "Special pricing for weekends only",
            "description": "Description of the tariff"
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Date and time from which the tariff becomes active. The tariff is not applied before this timestamp."
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Date and time until which the tariff remains active. The tariff is not applied after this timestamp."
          },
          "season_start": {
            "type": "string",
            "example": "2025-01-01",
            "description": "Seasonal start date of the tariff. Only the day and month are evaluated; the year is ignored. The tariff is applied only within this day–month range each year."
          },
          "season_end": {
            "type": "string",
            "example": "2025-03-01",
            "description": "Seasonal end date of the tariff. Only the day and month are evaluated; the year is ignored. The tariff is applied only within this day–month range each year."
          },
          "interval": {
            "type": "number",
            "example": 15,
            "description": "Charging interval in minutes (minimum 15)"
          },
          "price": {
            "type": "number",
            "example": 2.5,
            "description": "Base price for the interval"
          },
          "exit_free_time_interval": {
            "type": "number",
            "example": 10,
            "description": "Exit free time in minutes"
          },
          "entry_free_time_interval": {
            "type": "number",
            "example": 5,
            "description": "Entry free time in minutes"
          },
          "maxima": {
            "type": "number",
            "example": 20,
            "description": "Maximum price allowed for the tariff"
          },
          "max_time_of_stay": {
            "type": "number",
            "example": 240,
            "description": "Maximum time of stay in minutes"
          },
          "gratis_time": {
            "type": "number",
            "example": 30,
            "description": "Gratis time in minutes before charging starts"
          },
          "currency_id": {
            "type": "number",
            "example": 1,
            "description": "Currency ID (e.g., 1 = EUR)"
          },
          "price_progression_type": {
            "type": "string",
            "example": "flat",
            "enum": [
              "flat",
              "linear",
              "exponential",
              "incremental"
            ],
            "description": "How the price increases (flat, linear, etc.)"
          },
          "max_affected_members_per_group": {
            "type": "number",
            "example": 3,
            "description": "Maximum amount of members what will be allowed by that tariff per group"
          },
          "schedules": {
            "example": [
              {
                "weekday": 0,
                "start_time": "08:00:00",
                "end_time": "17:00:00"
              }
            ],
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "name",
          "schedules"
        ]
      },
      "ReplaceTariffDto": {
        "type": "object",
        "properties": {
          "group_ids": {
            "example": [
              2,
              9
            ],
            "description": "IDs of the groups this tariff applies to",
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "name": {
            "type": "string",
            "example": "Weekend Special",
            "description": "Name of the tariff"
          },
          "description": {
            "type": "string",
            "example": "Special pricing for weekends only",
            "description": "Description of the tariff"
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Date and time from which the tariff becomes active. The tariff is not applied before this timestamp."
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Date and time until which the tariff remains active. The tariff is not applied after this timestamp."
          },
          "season_start": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Seasonal start date of the tariff. Only the day and month are evaluated; the year is ignored. The tariff is applied only within this day–month range each year."
          },
          "season_end": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Seasonal end date of the tariff. Only the day and month are evaluated; the year is ignored. The tariff is applied only within this day–month range each year."
          },
          "interval": {
            "type": "number",
            "example": 15,
            "description": "Charging interval in minutes (minimum 15)"
          },
          "price": {
            "type": "number",
            "example": 2.5,
            "description": "Base price for the interval"
          },
          "exit_free_time_interval": {
            "type": "number",
            "example": 10,
            "description": "Exit free time in minutes"
          },
          "entry_free_time_interval": {
            "type": "number",
            "example": 5,
            "description": "Entry free time in minutes"
          },
          "maxima": {
            "type": "number",
            "example": 20,
            "description": "Maximum price allowed for the tariff"
          },
          "max_time_of_stay": {
            "type": "number",
            "example": 240,
            "description": "Maximum time of stay in minutes"
          },
          "gratis_time": {
            "type": "number",
            "example": 30,
            "description": "Gratis time in minutes before charging starts"
          },
          "currency_id": {
            "type": "number",
            "example": 1,
            "description": "Currency ID (e.g., 1 = EUR)"
          },
          "price_progression_type": {
            "type": "string",
            "example": "flat",
            "enum": [
              "flat",
              "linear",
              "exponential",
              "incremental"
            ],
            "description": "How the price increases (flat, linear, etc.)"
          },
          "max_affected_members_per_group": {
            "type": "number",
            "example": 20,
            "description": "Maximum amount of users that will be affected by this tariff"
          },
          "schedules": {
            "example": [
              {
                "weekday": 0,
                "start_time": "08:00:00",
                "end_time": "17:00:00"
              }
            ],
            "nullable": true,
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "group_ids",
          "name",
          "description",
          "start_time",
          "end_time",
          "interval",
          "price",
          "exit_free_time_interval",
          "entry_free_time_interval",
          "maxima",
          "max_time_of_stay",
          "gratis_time",
          "currency_id",
          "price_progression_type",
          "max_affected_members_per_group",
          "schedules"
        ]
      },
      "UpdateTariffDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Updated Tariff Name"
          },
          "description": {
            "type": "string",
            "example": "Updated description for this tariff."
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "interval": {
            "type": "number",
            "example": 30
          },
          "price": {
            "type": "number",
            "example": 250
          },
          "exit_free_time_interval": {
            "type": "number",
            "example": 10
          },
          "entry_free_time_interval": {
            "type": "number",
            "example": 5
          },
          "maxima": {
            "type": "number",
            "example": 2000
          },
          "max_time_of_stay": {
            "type": "number",
            "example": 480
          },
          "gratis_time": {
            "type": "number",
            "example": 15
          },
          "currency": {
            "type": "number",
            "example": 1
          },
          "price_progression_type": {
            "type": "string",
            "example": "flat",
            "enum": [
              "flat",
              "linear",
              "exponential",
              "incremental"
            ]
          }
        }
      },
      "AssignGroupsToTariffDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              3,
              8,
              12
            ],
            "description": "IDs of the groups to assign to the tariff",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "ReplaceGroupsForTariffDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              1,
              4,
              7
            ],
            "description": "List of group IDs that will replace all existing groups assigned to the tariff",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "GroupDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "Group name"
          },
          "description": {
            "type": "string",
            "example": "Group description"
          },
          "account_id": {
            "type": "number",
            "example": 1
          },
          "members": {
            "example": [
              {
                "id": 1,
                "name": "Member"
              }
            ],
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "tariffs": {
            "example": [
              {
                "id": 1,
                "name": "Basic Tariff"
              }
            ],
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "account_id",
          "members",
          "tariffs"
        ]
      },
      "CreateGroupDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Default Group"
          },
          "description": {
            "type": "string",
            "example": "Default Description"
          },
          "member_ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "tariff_ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "name"
        ]
      },
      "ReplaceGroupDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Default Group"
          },
          "description": {
            "type": "string",
            "example": "Default Description",
            "nullable": true
          },
          "member_ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "tariff_ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "name",
          "description",
          "member_ids",
          "tariff_ids"
        ]
      },
      "UpdateGroupDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Default Group"
          },
          "description": {
            "type": "string",
            "example": "Default Description"
          }
        }
      },
      "AssignMembersToGroupDto": {
        "type": "object",
        "properties": {}
      },
      "ReplaceMembersForGroupDto": {
        "type": "object",
        "properties": {}
      },
      "MemberDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "description": {
            "type": "string",
            "example": "User description"
          },
          "email": {
            "type": "string",
            "example": "john.doe@mail.com"
          },
          "license_plate": {
            "type": "string",
            "example": "ST1950TH"
          },
          "account_id": {
            "type": "number",
            "example": 1
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "groups": {
            "example": [
              {
                "id": 1,
                "name": "Some Group"
              }
            ],
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "email",
          "license_plate",
          "account_id",
          "created_at",
          "updated_at",
          "groups"
        ]
      },
      "CreateMemberDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Default Member"
          },
          "description": {
            "type": "string",
            "example": "Default Description"
          },
          "email": {
            "type": "string",
            "example": "Default Email"
          },
          "license_plate": {
            "type": "string",
            "example": "Default license plate"
          },
          "group_ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "license_plate"
        ]
      },
      "FileUploadResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          }
        },
        "required": [
          "message"
        ]
      },
      "ReplaceMemberDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Default Member"
          },
          "description": {
            "type": "string",
            "example": "Default Description"
          },
          "email": {
            "type": "string",
            "example": "Default Email"
          },
          "license_plate": {
            "type": "string",
            "example": "Default license plate"
          },
          "group_ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "name",
          "description",
          "email",
          "license_plate",
          "group_ids"
        ]
      },
      "UpdateMemberDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Default Member"
          },
          "description": {
            "type": "string",
            "example": "Default Description"
          },
          "email": {
            "type": "string",
            "example": "Default Email"
          },
          "license_plate": {
            "type": "string",
            "example": "Default license plate"
          }
        }
      },
      "LprCamera": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          }
        },
        "required": [
          "id",
          "created_at",
          "updated_at",
          "deleted_at"
        ]
      },
      "CreateAxisCameraDto": {
        "type": "object",
        "properties": {
          "device_id": {
            "type": "string",
            "example": "L0123456789"
          },
          "device_serial": {
            "type": "string",
            "example": "L0123456789"
          },
          "mac": {
            "type": "string",
            "example": "00:1A:2B:3C:4D:5E"
          },
          "password": {
            "type": "string",
            "example": "12345678"
          }
        },
        "required": [
          "device_id",
          "device_serial",
          "mac",
          "password"
        ]
      },
      "VehicleInfoDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "make": {
            "type": "string"
          },
          "model": {
            "type": "string"
          }
        }
      },
      "CameraInfoDto": {
        "type": "object",
        "properties": {
          "serial_number": {
            "type": "string"
          },
          "prod_short_name": {
            "type": "string"
          },
          "i_p_address": {
            "type": "string"
          },
          "m_a_c_address": {
            "type": "string"
          }
        }
      },
      "AxisRecognitionDto": {
        "type": "object",
        "properties": {
          "image_array": {
            "example": {
              "image_type": "",
              "image_format": "",
              "binary_image": ""
            },
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "plate_a_s_c_i_i": {
            "type": "string",
            "example": "DT-PLATe2"
          },
          "car_i_d": {
            "type": "string",
            "example": "100"
          },
          "plate_country": {
            "type": "string",
            "example": "GBR"
          },
          "plate_confidence": {
            "type": "string",
            "example": "0.823962"
          },
          "car_move_direction": {
            "type": "string",
            "example": "in",
            "enum": [
              "in",
              "out",
              "unknown"
            ]
          },
          "vehicle_info": {
            "example": {
              "view": "front",
              "type": "truck",
              "color": "red"
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/VehicleInfoDto"
              }
            ]
          },
          "camera_info": {
            "example": {
              "serial_number": "A0123456789",
              "prod_short_name": "A0123456789",
              "i_p_address": "192.158.1.38",
              "m_a_c_address": "00-B0-D0-63-C2-26"
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/CameraInfoDto"
              }
            ]
          }
        },
        "required": [
          "plate_a_s_c_i_i",
          "car_i_d",
          "plate_country",
          "plate_confidence",
          "car_move_direction",
          "vehicle_info",
          "camera_info"
        ]
      },
      "LprCameraDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "Lpr camera name",
            "example": "L123456789"
          },
          "device_id": {
            "type": "string",
            "description": "The unique identifier of the LPR Camera",
            "example": "L123456789"
          },
          "device_serial": {
            "type": "string",
            "description": "The unique identifier of the LPR Camera",
            "example": "L123456789"
          },
          "account_id": {
            "type": "number",
            "description": "The Account Id associated with the device",
            "example": "1"
          },
          "zone_id": {
            "type": "number",
            "description": "The zone to which the camera is assigned to.",
            "example": "1"
          },
          "status": {
            "type": "string",
            "enum": [
              "online",
              "offline",
              "auth",
              "sleep",
              "reset"
            ],
            "description": "The status of the LPR Camera",
            "example": "online"
          },
          "lpr_position": {
            "type": "string",
            "enum": [
              "in",
              "out",
              "in/out"
            ],
            "description": "The direction of the passageway that the LPR Camera is focused on",
            "example": "in"
          },
          "connected_device_type": {
            "type": "string",
            "enum": [
              "gate",
              "chain",
              "bollard",
              "other",
              "standalone"
            ],
            "description": "The type of product connected to the LPR Camera",
            "example": "gate"
          },
          "input_status": {
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "unknown"
            ],
            "description": "The status of the input signal on the camera",
            "example": "unknown"
          },
          "mac": {
            "type": "string",
            "description": "The MAC address of the LPR Camera",
            "example": "be:a0:42:fd:21:b8"
          },
          "save_image": {
            "type": "boolean",
            "description": "LPR Camera image subscription state",
            "example": false
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "name",
          "device_id",
          "device_serial",
          "account_id",
          "zone_id",
          "status",
          "lpr_position",
          "connected_device_type",
          "input_status",
          "mac",
          "save_image",
          "deleted_at",
          "created_at",
          "updated_at"
        ]
      },
      "AssignLprCameraDto": {
        "type": "object",
        "properties": {
          "device_id": {
            "type": "string",
            "example": "L0123456789",
            "description": "The unique device id found on the Camera sticker"
          },
          "name": {
            "type": "string",
            "example": "John Doe",
            "description": "A user assigned name"
          },
          "connected_device_type": {
            "type": "string",
            "example": "gate",
            "description": "A enum indicating the type of device connected to the Camera",
            "enum": [
              "gate",
              "chain",
              "bollard",
              "other",
              "standalone"
            ]
          },
          "lpr_position": {
            "type": "string",
            "example": "in",
            "description": "The direction of the passage that the Camera is overlooking",
            "enum": [
              "in",
              "out",
              "in/out"
            ]
          },
          "zone_id": {
            "type": "number",
            "description": "The zone we wish to assign the camera to"
          }
        },
        "required": [
          "device_id",
          "name",
          "lpr_position",
          "zone_id"
        ]
      },
      "AssignAxisLprCameraDto": {
        "type": "object",
        "properties": {
          "mac": {
            "type": "string",
            "example": "00:1A:2B:3C:4D:5E"
          },
          "name": {
            "type": "string",
            "example": "John Doe",
            "description": "A user assigned name"
          },
          "connected_device_type": {
            "type": "string",
            "example": "gate",
            "description": "A enum indicating the type of device connected to the Camera",
            "enum": [
              "gate",
              "chain",
              "bollard",
              "other",
              "standalone"
            ]
          },
          "lpr_position": {
            "type": "string",
            "example": "in",
            "description": "The direction of the passage that the Camera is overlooking",
            "enum": [
              "in",
              "out",
              "in/out"
            ]
          },
          "zone_id": {
            "type": "number",
            "description": "The zone we wish to assign the camera to"
          }
        },
        "required": [
          "mac",
          "lpr_position",
          "zone_id"
        ]
      },
      "LprCameraStateChangeDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "lpr_camera_id": {
            "type": "number",
            "example": 1
          },
          "status": {
            "type": "string",
            "enum": [
              "online",
              "offline"
            ],
            "description": "The online/offline state the camera transitioned to",
            "example": "online"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "lpr_camera_id",
          "status",
          "created_at"
        ]
      },
      "UpdateLprCameraDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "L0123456789",
            "description": "A user assigned name"
          },
          "connected_device_type": {
            "type": "string",
            "example": "gate",
            "description": "A enum indicating the type of device connected to the Camera",
            "enum": [
              "gate",
              "chain",
              "bollard",
              "other",
              "standalone"
            ]
          },
          "lpr_position": {
            "type": "string",
            "example": "in",
            "description": "The direction of the passage that the Camera is overlooking",
            "enum": [
              "in",
              "out",
              "in/out"
            ]
          },
          "zone_id": {
            "type": "number",
            "description": "The zone we wish to assign the camera to"
          },
          "save_image": {
            "type": "boolean",
            "description": "Updates whether the camera should save captured images.",
            "example": true
          }
        }
      },
      "CreateLprCameraDto": {
        "type": "object",
        "properties": {
          "device_id": {
            "type": "string",
            "example": "L0123456789"
          },
          "device_serial": {
            "type": "string",
            "example": "L0123456789"
          },
          "mac": {
            "type": "string",
            "example": "00:1A:2B:3C:4D:5E"
          }
        },
        "required": [
          "device_id",
          "device_serial",
          "mac"
        ]
      },
      "InformationLprCameraDto": {
        "type": "object",
        "properties": {
          "server_url": {
            "type": "string",
            "example": "lpr.parklio.com",
            "description": "The URL that the camera needs to point to.",
            "default": "lpr.parklio.com"
          },
          "server_port": {
            "type": "number",
            "example": 7660,
            "description": "The target server port.",
            "default": 7660
          },
          "password": {
            "type": "string",
            "example": "somepassword",
            "description": "The password used to authenticate the camera to the server.",
            "default": "somepassword"
          }
        },
        "required": [
          "server_url",
          "server_port",
          "password"
        ]
      },
      "ChangeLprCameraStateDto": {
        "type": "object",
        "properties": {
          "operation": {
            "type": "string",
            "example": "open",
            "description": "The signal we want to send to the camera",
            "enum": [
              "open",
              "close"
            ],
            "default": "open"
          },
          "duration": {
            "type": "number",
            "example": 1,
            "description": "The duration of the signal",
            "default": 1
          }
        }
      },
      "LprRemoteControlLogsLprCameraDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "device_id": {
            "type": "string",
            "example": "L0123456789"
          },
          "device_serial": {
            "type": "string",
            "example": "L0123456789"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "account_id": {
            "type": "number"
          },
          "zone_id": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "example": "online",
            "enum": [
              "online",
              "offline",
              "auth",
              "sleep",
              "reset"
            ]
          },
          "lpr_postion": {
            "type": "string",
            "example": "in",
            "enum": [
              "in",
              "out",
              "in/out"
            ]
          },
          "connected_device_type": {
            "type": "string",
            "example": "gate"
          },
          "mac": {
            "type": "string",
            "example": "00:1A:2B:3C:4D:5E"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          }
        },
        "required": [
          "id",
          "device_id",
          "device_serial",
          "name",
          "account_id",
          "zone_id",
          "status",
          "lpr_postion",
          "connected_device_type",
          "mac",
          "created_at",
          "updated_at",
          "deleted_at"
        ]
      },
      "LprRemoteControlLogDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "lpr_camera_id": {
            "type": "number"
          },
          "account_id": {
            "type": "number"
          },
          "account_user_id": {
            "type": "number"
          },
          "lot_id": {
            "type": "number"
          },
          "operation": {
            "type": "string",
            "example": "open",
            "enum": [
              "close",
              "open"
            ]
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "lpr_camera": {
            "$ref": "#/components/schemas/LprRemoteControlLogsLprCameraDto"
          },
          "account_user": {
            "$ref": "#/components/schemas/AccountUserDto"
          }
        },
        "required": [
          "id",
          "lpr_camera_id",
          "account_id",
          "account_user_id",
          "lot_id",
          "operation",
          "created_at",
          "lpr_camera",
          "account_user"
        ]
      },
      "PlateReadingDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "plate": {
            "type": "string",
            "example": "ST1950TH"
          },
          "confidence": {
            "type": "number",
            "example": 0.9876,
            "nullable": true
          },
          "image_url": {
            "type": "string",
            "example": "someurltoimage.jpg",
            "nullable": true
          },
          "cropped_image_url": {
            "type": "string",
            "example": "someurltoimage.jpg",
            "nullable": true
          },
          "direction": {
            "type": "string",
            "enum": [
              "in",
              "out",
              "undefined"
            ],
            "example": "in"
          },
          "type": {
            "type": "string",
            "enum": [
              "bus",
              "car",
              "motorcycle",
              "truck",
              "van"
            ],
            "example": "car",
            "nullable": true
          },
          "make": {
            "type": "string",
            "example": "Volkswagen",
            "nullable": true
          },
          "color": {
            "type": "string",
            "example": "Blue",
            "nullable": true
          },
          "model": {
            "type": "string",
            "example": "Golf",
            "nullable": true
          },
          "country_code": {
            "type": "string",
            "example": "HR",
            "nullable": true
          },
          "session_id": {
            "type": "number",
            "example": 123,
            "nullable": true
          },
          "access_decision": {
            "type": "string",
            "enum": [
              "denied",
              "triggered"
            ],
            "example": "triggered",
            "nullable": true
          },
          "access_decision_reason": {
            "type": "string",
            "enum": [
              "debounce",
              "direction_mismatch",
              "max_capacity",
              "no_active_session",
              "no_tariff",
              "session_exit",
              "tariff",
              "unknown_direction",
              "whitelist"
            ],
            "example": "whitelist",
            "nullable": true
          },
          "plate_side": {
            "type": "string",
            "example": "front"
          },
          "lpr_camera_direction": {
            "type": "string",
            "example": "in"
          },
          "lpr_camera_id": {
            "type": "number",
            "example": 5
          },
          "zone_id": {
            "type": "number",
            "example": 10
          },
          "created_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "plate",
          "confidence",
          "image_url",
          "cropped_image_url",
          "direction",
          "type",
          "make",
          "color",
          "model",
          "country_code",
          "session_id",
          "access_decision",
          "access_decision_reason",
          "plate_side",
          "lpr_camera_direction",
          "lpr_camera_id",
          "zone_id",
          "created_at",
          "updated_at"
        ]
      },
      "UpdatePlateReadingDto": {
        "type": "object",
        "properties": {
          "plate": {
            "type": "string",
            "example": "ST1950TH"
          }
        }
      },
      "ProactiveAlertDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "Unique identifier of the alert."
          },
          "name": {
            "type": "string",
            "example": "Defualt Zone Alert",
            "description": "Descriptive name of the alert. Must be between 3 and 256 characters."
          },
          "occupancy_threshold": {
            "type": "number",
            "example": 90,
            "description": "Occupancy percentage threshold in % that triggers an email notification when the parking lot reaches or exceeds this value."
          },
          "min_minutes_between_emails": {
            "type": "number",
            "example": 30,
            "description": "Minimum time interval (in minutes) required between sending alert emails. Must be between 1 and 3600 minutes. Default value is 30."
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "receivers": {
            "type": "array",
            "example": [
              {
                "id": 1,
                "name": "John Doe",
                "receiver_email": "john.doe@example.com"
              },
              {
                "id": 2,
                "name": "Jane Smith",
                "receiver_email": "jane.smith@example.com"
              }
            ]
          },
          "zone": {
            "type": "object",
            "example": {
              "id": 1,
              "name": "Defualt Zone"
            }
          }
        },
        "required": [
          "id",
          "name",
          "occupancy_threshold",
          "min_minutes_between_emails",
          "created_at",
          "updated_at",
          "receivers",
          "zone"
        ]
      },
      "AssignProactiveAlertReciversDto": {
        "type": "object",
        "properties": {
          "receivers": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "receivers"
        ]
      },
      "ReplaceProactiveAlertsDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "receivers": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "name": {
            "type": "string",
            "example": "Alert name"
          },
          "occupancy_threshold": {
            "type": "number",
            "example": 90
          },
          "min_minutes_between_emails": {
            "type": "number",
            "example": 30,
            "description": "Minimum time interval (in minutes) required between sending alert emails. Must be between 1 and 3600 minutes. Default value is 30."
          }
        },
        "required": [
          "zone_id",
          "receivers",
          "name",
          "occupancy_threshold",
          "min_minutes_between_emails"
        ]
      },
      "CreateProactiveAlertDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "Unique identifier of the zone associated with the alert"
          },
          "receivers": {
            "example": [
              1,
              2,
              3
            ],
            "description": "List of account user IDs that will receive the email alert.",
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "name": {
            "type": "string",
            "example": "Alert name",
            "description": "Descriptive name of the alert. Must be between 3 and 256 characters."
          },
          "occupancy_threshold": {
            "type": "number",
            "example": 90,
            "description": "Occupancy percentage threshold in % that triggers an email notification when the parking lot reaches or exceeds this value."
          },
          "min_minutes_between_emails": {
            "type": "number",
            "example": 30,
            "description": "Minimum time interval (in minutes) required between sending alert emails. Must be between 1 and 3600 minutes. Default value is 30."
          }
        },
        "required": [
          "zone_id",
          "receivers",
          "name"
        ]
      },
      "UpdateProactiveAlertDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "New Alert name",
            "description": "Descriptive name of the alert. Must be between 3 and 256 characters."
          },
          "occupancy_threshold": {
            "type": "number",
            "example": 90,
            "description": "Occupancy percentage threshold in % that triggers an email notification when the parking lot reaches or exceeds this value."
          },
          "min_minutes_between_emails": {
            "type": "number",
            "example": 60,
            "description": "Minimum time interval (in minutes) required between sending alert emails. Must be between 1 and 3600 minutes."
          }
        }
      },
      "UnassignReceiversProacticeAlertDto": {
        "type": "object",
        "properties": {
          "receiver_ids": {
            "description": "IDs of the account users to unassign as receivers from this license plate alert.",
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "receiver_ids"
        ]
      },
      "SessionLicensePlateDto": {
        "type": "object",
        "properties": {
          "plate": {
            "type": "string",
            "example": "DT-PLATE2"
          },
          "id": {
            "type": "number",
            "example": 1
          },
          "image_url": {
            "type": "string"
          },
          "cropped_image_url": {
            "type": "string"
          }
        },
        "required": [
          "plate",
          "id",
          "image_url",
          "cropped_image_url"
        ]
      },
      "SessionSourceDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "example": "attendant",
            "enum": [
              "terminal",
              "lpr_camera",
              "product",
              "payment",
              "attendant",
              "account"
            ]
          },
          "id": {
            "type": "number",
            "example": 1
          }
        },
        "required": [
          "type",
          "id"
        ]
      },
      "SessionDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": "854813550000003054"
          },
          "public_id": {
            "type": "string",
            "example": "A1B2C3D4E5"
          },
          "ended_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "duration": {
            "type": "number",
            "example": 10800
          },
          "discount_time": {
            "type": "number",
            "example": 15
          },
          "amount_paid": {
            "type": "number",
            "example": 20
          },
          "possibly_exited": {
            "type": "boolean",
            "example": false
          },
          "exit_allowed": {
            "type": "boolean",
            "example": true
          },
          "entry_license_plate": {
            "$ref": "#/components/schemas/SessionLicensePlateDto"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "zone_id": {
            "type": "number",
            "example": "2"
          },
          "entry": {
            "example": {
              "id": 5,
              "type": "attendant"
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/SessionSourceDto"
              }
            ]
          },
          "exit": {
            "example": {
              "id": 5,
              "type": "lpr_camera"
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/SessionSourceDto"
              }
            ]
          }
        },
        "required": [
          "id",
          "public_id",
          "created_at",
          "zone_id",
          "entry"
        ]
      },
      "UserCreateSessionDto": {
        "type": "object",
        "properties": {
          "license_plate": {
            "type": "string",
            "example": "ST1950TH"
          },
          "lpr_camera_id": {
            "type": "number",
            "example": 1
          }
        }
      },
      "LotScopeNoIntervalExitCountResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "exit_count": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative exit count across all time"
          }
        },
        "required": [
          "lot_id",
          "name",
          "exit_count"
        ]
      },
      "LotScopeHourIntervalExitCountResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "exit_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of exit count for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "exit_count"
        ]
      },
      "LotScopeDayIntervalExitCountResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "exit_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of exit count for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "exit_count"
        ]
      },
      "LotScopeMonthIntervalExitCountResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "exit_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of exit count for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "exit_count"
        ]
      },
      "ZoneScopeNoIntervalExitCountResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "exit_count": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative exit count across all time"
          }
        },
        "required": [
          "zone_id",
          "name",
          "exit_count"
        ]
      },
      "ZoneScopeHourIntervalExitCountResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "exit_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of exit count for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "exit_count"
        ]
      },
      "ZoneScopeDayIntervalExitCountResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "exit_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of exit count for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "exit_count"
        ]
      },
      "ZoneScopeMonthIntervalExitCountResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "exit_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of exit count for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "exit_count"
        ]
      },
      "LotScopeNoIntervalEntryCountResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "entry_count": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative entry count across all time"
          }
        },
        "required": [
          "lot_id",
          "name",
          "entry_count"
        ]
      },
      "LotScopeHourIntervalEntryCountResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "entry_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of entry count for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "entry_count"
        ]
      },
      "LotScopeDayIntervalEntryCountResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "entry_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of entry count for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "entry_count"
        ]
      },
      "LotScopeMonthIntervalEntryCountResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "entry_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of entry count for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "entry_count"
        ]
      },
      "ZoneScopeNoIntervalEntryCountResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "entry_count": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative entry count across all time"
          }
        },
        "required": [
          "zone_id",
          "name",
          "entry_count"
        ]
      },
      "ZoneScopeHourIntervalEntryCountResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "entry_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of entry count for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "entry_count"
        ]
      },
      "ZoneScopeDayIntervalEntryCountResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "entry_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of entry count for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "entry_count"
        ]
      },
      "ZoneScopeMonthIntervalEntryCountResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "entry_count": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of entry count for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "entry_count"
        ]
      },
      "LotScopePeakEntryTimeResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "peak_entry_time": {
            "type": "number",
            "example": 14,
            "description": "The hour of the day (0-23) with the highest occupancy"
          }
        },
        "required": [
          "lot_id",
          "name",
          "peak_entry_time"
        ]
      },
      "ZoneScopePeakEntryTimeResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "peak_entry_time": {
            "type": "number",
            "example": 14,
            "description": "The hour of the day (0-23) with the highest occupancy"
          }
        },
        "required": [
          "zone_id",
          "name",
          "peak_entry_time"
        ]
      },
      "NoScopePeakEntryTimeResponseDto": {
        "type": "object",
        "properties": {
          "peak_entry_time": {
            "type": "number",
            "example": 14,
            "description": "The hour of the day (0-23) with the highest occupancy",
            "nullable": true
          }
        },
        "required": [
          "peak_entry_time"
        ]
      },
      "LotScopePeakExitTimeResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "peak_exit_time": {
            "type": "number",
            "example": 14,
            "description": "The hour of the day (0-23) with the highest number of vehicle exits"
          }
        },
        "required": [
          "lot_id",
          "name",
          "peak_exit_time"
        ]
      },
      "ZoneScopePeakExitTimeResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "peak_exit_time": {
            "type": "number",
            "example": 14,
            "description": "The hour of the day (0-23) with the highest number of vehicle exits"
          }
        },
        "required": [
          "zone_id",
          "name",
          "peak_exit_time"
        ]
      },
      "NoScopePeakExitTimeResponseDto": {
        "type": "object",
        "properties": {
          "peak_exit_time": {
            "type": "number",
            "example": 14,
            "description": "The hour of the day (0-23) with the highest number of vehicle exits",
            "nullable": true
          }
        },
        "required": [
          "peak_exit_time"
        ]
      },
      "UpdateSessionDto": {
        "type": "object",
        "properties": {
          "discount_time": {
            "type": "number"
          },
          "license_plate": {
            "type": "string"
          }
        }
      },
      "TerminalDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "Terminal"
          },
          "status": {
            "type": "string",
            "example": "online",
            "enum": [
              "offline",
              "online"
            ]
          },
          "device_id": {
            "type": "string",
            "example": "273827664"
          },
          "ip_address": {
            "type": "string",
            "example": "192.168.2.223"
          },
          "version": {
            "type": "string",
            "example": "1.0.1"
          },
          "mac": {
            "type": "string",
            "example": "AA:BB:CC:11:22:33"
          },
          "is_master": {
            "type": "boolean",
            "example": true
          },
          "type": {
            "type": "string",
            "example": "exit",
            "enum": [
              "entry",
              "exit",
              "pof",
              "lp_pof",
              "lp_exit"
            ]
          },
          "pos_serial_number": {
            "type": "string",
            "example": "23432411233"
          },
          "electronic_device_id": {
            "type": "string",
            "example": "12331365465"
          },
          "system_currency": {
            "type": "string",
            "example": "EUR",
            "default": "EUR"
          },
          "last_seen": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "nullable": true
          },
          "updated_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "created_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "zone_id",
          "name",
          "status",
          "device_id",
          "ip_address",
          "version",
          "mac",
          "is_master",
          "type",
          "pos_serial_number",
          "electronic_device_id",
          "system_currency",
          "last_seen",
          "updated_at",
          "created_at"
        ]
      },
      "CreateTerminalDto": {
        "type": "object",
        "properties": {
          "device_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 32,
            "example": "92338123"
          },
          "mac": {
            "type": "string",
            "example": "45:d6:4a:fc:f7:2f"
          },
          "public_key": {
            "type": "string",
            "minLength": 50,
            "maxLength": 1000,
            "default": "Z3ljaTBlem55OG5jZHh0b3FwbmpqejFxdDdxdmk0aDh3bW40NHBmMHBxaWplZTBnOW50eDVpeXhtN21pdTFueTd0c292eW05dHY4cXZjM3M0anMzcTdyYjJjZWI0bW5iN29ubTl3bWhqeXFjbWF4bTY2NGVhMHNqcW9vMGVuemY="
          },
          "type": {
            "type": "string",
            "example": "entry",
            "enum": [
              "entry",
              "exit",
              "pof",
              "lp_pof",
              "lp_exit"
            ]
          },
          "is_master": {
            "type": "boolean",
            "example": true
          }
        },
        "required": [
          "device_id",
          "mac",
          "public_key",
          "type",
          "is_master"
        ]
      },
      "UpdateTerminalDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "example": "Terminal"
          },
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "pos_serial_number": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "example": "23432411233"
          },
          "electronic_device_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "example": "12331365465"
          }
        }
      },
      "OperateTerminalRequestDto": {
        "type": "object",
        "properties": {
          "operation": {
            "type": "string",
            "example": "open",
            "enum": [
              "open",
              "close",
              "stay_open_on",
              "stay_open_off"
            ]
          },
          "access_point_id": {
            "type": "number",
            "example": "1"
          }
        },
        "required": [
          "operation"
        ]
      },
      "SessionDetailsDto": {
        "type": "object",
        "properties": {
          "session_id": {
            "type": "string",
            "example": "854813550000003054"
          },
          "started_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "ended_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "duration": {
            "type": "number",
            "example": 10800
          },
          "discount_time": {
            "type": "number",
            "example": 15
          },
          "entry_type": {
            "type": "string",
            "example": "exit"
          },
          "entry_terminal": {
            "type": "string",
            "example": "Terminal.85481355"
          },
          "amount_paid": {
            "type": "number",
            "example": 20
          },
          "amount_due": {
            "type": "number",
            "example": 1.3
          },
          "payments": {
            "example": [
              {
                "origin": "85481355",
                "payment_id": 1,
                "session_id": "854813550000003054",
                "paid_at": {},
                "currency": "EUR",
                "amount_paid": 20,
                "amount_due": 20,
                "payment_method": "CARD",
                "success": true,
                "error": null,
                "provider_transaction_id": "521911099292",
                "provider_payment_id": "854813550000003054-9a8a-00006894898d"
              }
            ],
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "possibly_exited": {
            "type": "boolean",
            "example": false
          },
          "exit_allowed": {
            "type": "boolean",
            "example": true
          },
          "license_plate": {
            "type": "string",
            "example": "DT-PLATE2"
          }
        },
        "required": [
          "session_id",
          "started_at",
          "entry_type",
          "entry_terminal",
          "amount_due",
          "license_plate"
        ]
      },
      "TerminalLprCameraDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "L0123456789"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "modified_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "direction": {
            "type": "string",
            "example": "in"
          },
          "cert": {
            "type": "string",
            "example": ""
          },
          "ap_id": {
            "type": "string",
            "example": ""
          },
          "mac": {
            "type": "string",
            "example": "00-B0-D0-63-C2-26"
          },
          "model": {
            "type": "string",
            "example": "axios"
          },
          "sn": {
            "type": "string",
            "example": "L0123456789"
          }
        },
        "required": [
          "id",
          "created_at",
          "modified_at",
          "direction",
          "cert",
          "ap_id",
          "mac",
          "model",
          "sn"
        ]
      },
      "TerminalSessionDto": {
        "type": "object",
        "properties": {
          "session_id": {
            "type": "string",
            "example": "854813550000003054"
          },
          "started_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "ended_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "duration": {
            "type": "number",
            "example": 10800
          },
          "discount_time": {
            "type": "number",
            "example": 15
          },
          "entry_type": {
            "type": "string",
            "example": "exit"
          },
          "entry_terminal": {
            "type": "string",
            "example": "Terminal.85481355"
          },
          "amount_paid": {
            "type": "number",
            "example": 20
          },
          "amount_due": {
            "type": "number",
            "example": 1.3
          },
          "payments": {
            "example": [
              {
                "origin": "85481355",
                "payment_id": 1,
                "session_id": "854813550000003054",
                "paid_at": {},
                "currency": "EUR",
                "amount_paid": 20,
                "amount_due": 20,
                "payment_method": "CARD",
                "success": true,
                "error": null,
                "provider_transaction_id": "521911099292",
                "provider_payment_id": "854813550000003054-9a8a-00006894898d"
              }
            ],
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "possibly_exited": {
            "type": "boolean",
            "example": false
          },
          "exit_allowed": {
            "type": "boolean",
            "example": true
          },
          "license_plate": {
            "type": "string",
            "example": "DT-PLATE2"
          }
        },
        "required": [
          "session_id",
          "started_at",
          "entry_type",
          "entry_terminal",
          "amount_due",
          "license_plate"
        ]
      },
      "CreateTerminalSessionDto": {
        "type": "object",
        "properties": {
          "plate": {
            "type": "string",
            "example": "DT-PLATE2"
          },
          "user_id": {
            "type": "number",
            "example": 1
          },
          "user_email": {
            "type": "string",
            "example": "john.doe@example.com"
          }
        },
        "required": [
          "plate"
        ]
      },
      "TerminalSessionPaymentDto": {
        "type": "object",
        "properties": {
          "origin": {
            "type": "string",
            "description": "device_id of terminal",
            "example": "85481355"
          },
          "payment_id": {
            "type": "number",
            "example": 1
          },
          "session_id": {
            "type": "string",
            "example": "854813550000003054"
          },
          "paid_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "currency": {
            "type": "string",
            "example": "EUR"
          },
          "amount_paid": {
            "type": "number",
            "example": 20
          },
          "amount_due": {
            "type": "number",
            "example": 20
          },
          "payment_method": {
            "type": "string",
            "example": "CARD"
          },
          "success": {
            "type": "boolean",
            "example": true
          },
          "error": {
            "type": "string",
            "example": null
          },
          "provider_transaction_id": {
            "type": "string",
            "example": "521911099292"
          },
          "provider_payment_id": {
            "type": "string",
            "example": "854813550000003054-9a8a-00006894898d"
          },
          "invoice_link": {
            "type": "string",
            "example": "https://api.spaceinvoices.com/v1/Documents/public/id/pdf"
          }
        },
        "required": [
          "origin",
          "payment_id",
          "session_id",
          "paid_at",
          "currency",
          "amount_paid",
          "amount_due",
          "payment_method",
          "success",
          "provider_payment_id",
          "invoice_link"
        ]
      },
      "CreateTerminalSessionPaymentDto": {
        "type": "object",
        "properties": {
          "currency": {
            "type": "string",
            "example": "EUR"
          },
          "amount_paid": {
            "type": "number",
            "example": 5,
            "description": "The paid amount is in EUR"
          },
          "payment_method": {
            "type": "string",
            "example": "CARD"
          },
          "electronic_device_id": {
            "type": "string",
            "example": "67c83c69c1g512e6b4ti9671"
          },
          "user_id": {
            "type": "number",
            "example": 1
          },
          "user_email": {
            "type": "string",
            "example": "john.doe@example.com"
          }
        },
        "required": [
          "currency",
          "amount_paid",
          "payment_method"
        ]
      },
      "UpdateTerminalSessionDto": {
        "type": "object",
        "properties": {
          "license_plate": {
            "type": "string",
            "example": "DT-PLATE2"
          },
          "discount_time": {
            "type": "number",
            "example": -1
          },
          "end": {
            "type": "boolean",
            "example": true
          },
          "user_id": {
            "type": "number",
            "example": 1
          },
          "user_email": {
            "type": "string",
            "example": "john.doe@example.com"
          }
        }
      },
      "RemoteControlDto": {
        "type": "object",
        "properties": {
          "operation": {
            "type": "string",
            "example": "prompt_payment",
            "enum": [
              "prompt_payment"
            ]
          },
          "session_id": {
            "type": "string",
            "example": "8232882392300332"
          }
        },
        "required": [
          "operation",
          "session_id"
        ]
      },
      "TerminalAuthChallengeDto": {
        "type": "object",
        "properties": {
          "challenge": {
            "type": "string",
            "example": "aG4rUoDxpq8SIP4qG9K11g=="
          }
        },
        "required": [
          "challenge"
        ]
      },
      "TerminalAuthChallengeRequestDto": {
        "type": "object",
        "properties": {
          "device_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 32,
            "example": "92338123"
          }
        },
        "required": [
          "device_id"
        ]
      },
      "TerminalLoginDto": {
        "type": "object",
        "properties": {
          "terminal_id": {
            "type": "number",
            "example": "1"
          },
          "token": {
            "type": "string",
            "example": "aG4rUoDxpq8SIP4qG9K11g=="
          }
        },
        "required": [
          "terminal_id",
          "token"
        ]
      },
      "TerminalLoginRequestDto": {
        "type": "object",
        "properties": {
          "device_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 32,
            "example": "92338123"
          },
          "signed_challenge": {
            "type": "string",
            "example": "aG4rUoDxpq8SIP4qG9K11g=="
          }
        },
        "required": [
          "device_id",
          "signed_challenge"
        ]
      },
      "LotEntryDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "scan_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "lpr_camera_id": {
            "type": "number"
          },
          "lot_id": {
            "type": "number"
          },
          "related_lot_entry_id": {
            "type": "number"
          },
          "duration": {
            "type": "number"
          },
          "is_allowed": {
            "type": "number"
          },
          "direction": {
            "type": "string"
          },
          "license_plate": {
            "type": "string",
            "example": "DT-PLATE2"
          },
          "license_plate_image_url": {
            "type": "string"
          },
          "full_image_url": {
            "type": "string"
          },
          "make": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "color_depth": {
            "type": "number"
          },
          "created_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "lpr_camera": {
            "type": "object",
            "example": {
              "id": 1,
              "device_id": "L0123456789",
              "device_serial": "L0123456789",
              "name": "L0123456789",
              "account_id": 1,
              "zone_id": 1,
              "status": "online",
              "lpr_position": "in",
              "connected_device_type": "gate",
              "mac": "00:1A:2B:3C:4D:5E",
              "deleted_at": null,
              "created_at": {},
              "updated_at": {}
            }
          },
          "related_lot_entry": {
            "type": "object",
            "example": {
              "id": 1,
              "scan_time": {},
              "lpr_camera_id": 1,
              "lot_id": 1,
              "related_lot_entry_id": 1,
              "duration": 1,
              "is_allowed": 1,
              "direction": "in",
              "license_plate": "DT-PLATE2",
              "license_plate_image_url": "string",
              "full_image_url": "string",
              "make": "string",
              "color": "string",
              "model": "string",
              "color_depth": 1,
              "created_at": {},
              "updated_at": {},
              "lpr_camera": {
                "device_id": "L0123456789",
                "name": "L0123456789",
                "id": 1
              }
            }
          }
        },
        "required": [
          "id",
          "scan_time",
          "lpr_camera_id",
          "lot_id",
          "related_lot_entry_id",
          "duration",
          "is_allowed",
          "direction",
          "license_plate",
          "license_plate_image_url",
          "full_image_url",
          "make",
          "color",
          "model",
          "color_depth",
          "created_at",
          "updated_at",
          "lpr_camera",
          "related_lot_entry"
        ]
      },
      "UpdateLotEntryDto": {
        "type": "object",
        "properties": {
          "license_plate": {
            "type": "string",
            "example": "DT-PLATE2"
          }
        }
      },
      "CreatedLotWhitelists": {
        "type": "object",
        "properties": {}
      },
      "CreateLotWhitelistDto": {
        "type": "object",
        "properties": {
          "license_plates": {
            "example": [
              "DT-PLATE1",
              "DT-PLATE2",
              "DT-PLATE3"
            ],
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "name": {
            "type": "string"
          },
          "lot_id": {
            "type": "number",
            "example": 1
          },
          "start_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "is_unlimited": {
            "type": "boolean",
            "example": false
          }
        },
        "required": [
          "license_plates",
          "start_time"
        ]
      },
      "LotWhitelistBoundProductsDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "The unique identifier of the product",
            "example": 1
          },
          "device_id": {
            "type": "string",
            "description": "The unique device identifier of the product",
            "example": "L123456789"
          },
          "name": {
            "type": "string",
            "description": "The name of the product",
            "example": "Main Gate"
          }
        },
        "required": [
          "id",
          "device_id",
          "name"
        ]
      },
      "LotWhitelistDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "The unique identifier of the whitelist entry",
            "example": 1
          },
          "account_user_id": {
            "type": "number",
            "description": "The ID of the account user who created this whitelist entry",
            "example": 1
          },
          "lot_id": {
            "type": "number",
            "description": "The ID of the lot this whitelist entry belongs to",
            "example": 1
          },
          "license_plate": {
            "type": "string",
            "description": "The whitelisted license plate",
            "example": "DT-PLATE2"
          },
          "license_plate_id": {
            "type": "number",
            "description": "The unique identifier of the license plate record",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The name of the whitelist entry owner",
            "example": "John Doe"
          },
          "status": {
            "type": "string",
            "description": "The current status of the whitelist entry",
            "example": "active",
            "enum": [
              "active",
              "expired",
              "deleted"
            ]
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "description": "The date and time from which the whitelist entry is valid",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "description": "The date and time until which the whitelist entry is valid",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "is_unlimited": {
            "type": "number",
            "description": "Whether the whitelist entry has no expiration, 1 for unlimited, 0 for limited",
            "example": 0
          },
          "bound_products": {
            "description": "The list of products bound to this whitelist license plate, null if no products are bound to the license",
            "nullable": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LotWhitelistBoundProductsDto"
            }
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "The date and time the whitelist entry was created",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "The date and time the whitelist entry was last updated",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "account_user_id",
          "lot_id",
          "license_plate",
          "license_plate_id",
          "name",
          "status",
          "start_time",
          "end_time",
          "is_unlimited",
          "bound_products",
          "created_at",
          "updated_at"
        ]
      },
      "UpdateLotWhitelistDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "start_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "lot_id": {
            "type": "number"
          }
        }
      },
      "BulkDeleteLotWhitelistDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "LotWhitelistLogDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "account_id": {
            "type": "number"
          },
          "account_user_id": {
            "type": "number"
          },
          "account_user": {
            "type": "object",
            "example": {
              "id": 1,
              "email": "john.doe@example.com",
              "name": "John Doe"
            }
          },
          "lot_id": {
            "type": "number"
          },
          "license_plate": {
            "type": "string",
            "example": "DT-PLATE2"
          },
          "operation": {
            "type": "string",
            "example": "added"
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "is_unlimited": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "account_id",
          "account_user_id",
          "account_user",
          "lot_id",
          "license_plate",
          "operation",
          "start_time",
          "end_time",
          "is_unlimited",
          "created_at",
          "updated_at"
        ]
      },
      "LicensePlateAlertZoneDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "Unique identifier of the zone associated with this license plate alert."
          },
          "name": {
            "type": "string",
            "example": "Main Entrance",
            "description": "Name of the zone associated with this license plate alert."
          }
        },
        "required": [
          "id",
          "name"
        ]
      },
      "LicensePlateAlertReceiversDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "Unique identifier of the account user receiving alerts for this license plate."
          },
          "name": {
            "type": "string",
            "example": "John Doe",
            "description": "Full name of the account user receiving alerts."
          },
          "receiver_email": {
            "type": "string",
            "example": "john.doe@example.com",
            "description": "Email address the alert notifications will be sent to."
          }
        },
        "required": [
          "id",
          "name",
          "receiver_email"
        ]
      },
      "LicensePlateAlertDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "Unique identifier of the license plate alert."
          },
          "name": {
            "type": "string",
            "example": "Blacklisted license plate",
            "description": "Descriptive name given to this license plate alert."
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the license plate alert was created."
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the license plate alert was last updated."
          },
          "plates": {
            "example": [
              "DT-PLATE2",
              "ST-1234-AB"
            ],
            "description": "License plate numbers that trigger this alert.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "min_minutes_between_emails": {
            "type": "number",
            "example": 5,
            "description": "Minimum number of minutes to wait between sending consecutive alert emails for this license plate."
          },
          "zone": {
            "description": "Zone associated with this license plate alert.",
            "allOf": [
              {
                "$ref": "#/components/schemas/LicensePlateAlertZoneDto"
              }
            ]
          },
          "receivers": {
            "description": "List of account users who will receive email notifications when this license plate alert is triggered.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LicensePlateAlertReceiversDto"
            }
          }
        },
        "required": [
          "id",
          "name",
          "created_at",
          "updated_at",
          "plates",
          "min_minutes_between_emails",
          "zone",
          "receivers"
        ]
      },
      "AssignLicensePlateAlertReciversDto": {
        "type": "object",
        "properties": {
          "receiver_ids": {
            "example": [
              1,
              2,
              3
            ],
            "description": "IDs of the account users to assign as receivers of this license plate alert.",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "receiver_ids"
        ]
      },
      "ReplaceLicensePlateAlertsDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "Identifier of the zone this license plate alert belongs to."
          },
          "receiver_ids": {
            "example": [
              1,
              2,
              3
            ],
            "description": "IDs of the account users who should receive email notifications when this license plate alert is triggered.",
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "name": {
            "type": "string",
            "example": "Alert name",
            "description": "Descriptive name given to this license plate alert."
          },
          "plates": {
            "example": [
              "DT-PLATE2",
              "ST-1234-AB"
            ],
            "description": "License plate numbers that trigger this alert.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "min_minutes_between_emails": {
            "type": "number",
            "example": 60,
            "description": "Minimum number of minutes to wait between sending consecutive alert emails for this license plate."
          }
        },
        "required": [
          "zone_id",
          "receiver_ids",
          "name",
          "plates",
          "min_minutes_between_emails"
        ]
      },
      "CreateLicensePlateAlertDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "Identifier of the zone this license plate alert belongs to."
          },
          "name": {
            "type": "string",
            "example": "Blacklisted license plates",
            "description": "Descriptive name given to this license plate alert."
          },
          "plates": {
            "example": [
              "DT-PLATE2",
              "DT-PLATE3"
            ],
            "description": "License plate numbers that trigger this alert.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "min_minutes_between_emails": {
            "type": "number",
            "example": 5,
            "description": "Minimum number of minutes to wait between sending consecutive alert emails for this license plate alert.",
            "default": 5
          },
          "receiver_ids": {
            "example": [
              1,
              2
            ],
            "description": "IDs of account users who should receive email notifications when this license plate alert is triggered.",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "plates"
        ]
      },
      "UpdateLicensePlateAlertDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Blacklisted license plate",
            "description": "Descriptive name given to this license plate alert."
          },
          "min_minutes_between_emails": {
            "type": "number",
            "example": 5,
            "description": "Minimum number of minutes to wait between sending consecutive alert emails for this license plate."
          }
        }
      },
      "UnassignReceiversLicensePlateAlertDto": {
        "type": "object",
        "properties": {
          "receiver_ids": {
            "description": "IDs of the account users to unassign as receivers from this license plate alert.",
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "receiver_ids"
        ]
      },
      "KeyInvitationDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "sender_id": {
            "type": "number"
          },
          "product_id": {
            "type": "number"
          },
          "receiver_identifier": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "receiver_identifier_type": {
            "type": "string",
            "example": "email"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "reactived",
              "blocked",
              "invalid",
              "deleted",
              "expired",
              "activated"
            ],
            "example": "activated"
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "is_unlimited": {
            "type": "number"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "activated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "product": {
            "type": "object"
          },
          "sender": {
            "type": "object",
            "example": {
              "id": 1,
              "email": "john.doe@example.com",
              "name": "John Doe"
            }
          }
        },
        "required": [
          "id",
          "name",
          "sender_id",
          "product_id",
          "receiver_identifier",
          "receiver_identifier_type",
          "status",
          "start_time",
          "end_time",
          "is_unlimited",
          "deleted_at",
          "activated_at",
          "created_at",
          "updated_at",
          "product",
          "sender"
        ]
      },
      "ReceiverEmailsDto": {
        "type": "object",
        "properties": {
          "receiver_identifier": {
            "type": "string",
            "example": "john.doe@example.com"
          }
        },
        "required": [
          "receiver_identifier"
        ]
      },
      "RequestResendKeysDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "BulkUpdateKeyInvitationDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "status": {
            "type": "string",
            "example": "blocked",
            "enum": [
              "pending",
              "reactived",
              "blocked",
              "invalid",
              "deleted",
              "expired",
              "activated"
            ]
          }
        },
        "required": [
          "ids",
          "status"
        ]
      },
      "UpdateKeyInvitationDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "New operation token name",
            "description": "The new name of the Operation Token"
          },
          "status": {
            "type": "string",
            "example": "blocked",
            "description": "The new status of the invite",
            "enum": [
              "pending",
              "reactived",
              "blocked",
              "invalid",
              "deleted",
              "expired",
              "activated"
            ]
          }
        },
        "required": [
          "name",
          "status"
        ]
      },
      "KeyLogDto": {
        "type": "object",
        "properties": {
          "product": {
            "type": "object",
            "example": {
              "product_error": {
                "product": {
                  "id": 1,
                  "device_id": "B123456",
                  "name": "B123456",
                  "power_type": "battery",
                  "lot_id": 1,
                  "zone_id": 1,
                  "product_type_id": 1,
                  "status": "online"
                },
                "id": 1,
                "error_code": "string",
                "jammed": 1,
                "sensor_dirty": 1,
                "pin_broken": 1,
                "rtcc_invalid": 1,
                "master_key_not_set": 1,
                "deleted_at": null,
                "created_at": {},
                "updated_at": {}
              },
              "id": 1,
              "device_id": "B123456",
              "name": "B123456",
              "power_type": "battery",
              "lot_id": 1,
              "zone_id": 1,
              "product_type_id": 1,
              "hardware_version": "1.0.0",
              "firmware_version": "1.0.0.",
              "latitude": 1,
              "longitude": 1,
              "status": "online",
              "advertisement_data": "string",
              "battery_status": 1,
              "product_error_id": 1,
              "rssi": -80,
              "created_at": {},
              "updated_at": {},
              "barrier": {
                "id": 1,
                "product_id": 1,
                "state": "opened",
                "is_autoclose": 1,
                "is_car_on_top": 0,
                "autoclose_time": 45,
                "created_at": {},
                "updated_at": {}
              },
              "gate": {
                "id": 1,
                "product_id": 2,
                "state": "opened",
                "permanent_position": "disabled",
                "deleted_at": null,
                "created_at": {},
                "updated_at": {}
              },
              "chain": {
                "id": 1,
                "product_id": 3,
                "state": "opened",
                "permanent_position": "disabled",
                "deleted_at": null,
                "created_at": {},
                "updated_at": {}
              },
              "bollard": {
                "id": 1,
                "product_id": 4,
                "state": "opened",
                "permanent_position": "disabled",
                "deleted_at": null,
                "created_at": {},
                "updated_at": {}
              },
              "brain": {
                "id": 1,
                "product_id": 5,
                "state": "opened",
                "permanent_position": "disabled",
                "deleted_at": null,
                "created_at": {},
                "updated_at": {}
              }
            }
          },
          "operation_token": {
            "type": "object",
            "example": {
              "id": 1,
              "product_id": 1,
              "start_time": {},
              "end_time": {},
              "status": "string",
              "used_count": 1,
              "is_unlimited": 1,
              "token_close": "any",
              "token_open": "any",
              "token_status": "any",
              "deleted_at": null,
              "created_at": {},
              "updated_at": {}
            }
          },
          "sender": {
            "type": "object",
            "example": {
              "id": 1,
              "account_id": 1,
              "account_user_role_id": 1,
              "email": "john.doe@example.com",
              "name": "John Doe",
              "phone": "string",
              "deleted_at": null,
              "created_at": {},
              "updated_at": {}
            }
          },
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "sender_id": {
            "type": "number"
          },
          "product_id": {
            "type": "number"
          },
          "operation_token_id": {
            "type": "number"
          },
          "receiver_identifier": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "receiver_identifier_type": {
            "type": "string",
            "example": "email"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": {
              "deleted_at": null
            }
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "product",
          "operation_token",
          "sender",
          "id",
          "name",
          "sender_id",
          "product_id",
          "operation_token_id",
          "receiver_identifier",
          "receiver_identifier_type",
          "deleted_at",
          "created_at",
          "updated_at"
        ]
      },
      "UpdateKeyLogDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Key Log Name",
            "description": "Change the name of the key log"
          },
          "status": {
            "type": "string",
            "example": "blocked",
            "description": "Change the status of the sent key",
            "enum": [
              "active",
              "reactived",
              "blocked",
              "invalid",
              "deleted",
              "depleted",
              "expired"
            ]
          }
        }
      },
      "ResendKeyDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "BulkUpdateKeyLogsDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "status": {
            "type": "string",
            "example": "blocked",
            "enum": [
              "active",
              "reactived",
              "blocked",
              "invalid",
              "deleted",
              "depleted",
              "expired"
            ]
          }
        },
        "required": [
          "ids",
          "status"
        ]
      },
      "OperationKeyDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string",
            "example": "John Doe"
          },
          "product_id": {
            "type": "number",
            "example": 1
          },
          "sender_id": {
            "type": "number",
            "example": 1
          },
          "operation_token_id": {
            "type": "number"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "receiver": {
            "type": "object",
            "example": {
              "id": 2,
              "email": "jane.doe1@example.com",
              "name": "Jane Doe"
            }
          },
          "sender": {
            "type": "object",
            "example": {
              "id": 1,
              "email": "john.doe@example.com",
              "name": "John Doe"
            }
          },
          "product": {
            "type": "object",
            "example": {
              "device_id": "B123456",
              "latitude": 43.52652359,
              "longitude": 16.450813293,
              "product_type_id": 1,
              "lot_id": 1,
              "zone_id": 1,
              "id": 1
            }
          },
          "operation_token": {
            "type": "object",
            "example": {
              "id": 1,
              "product_id": 1,
              "start_time": {},
              "end_time": {},
              "status": "active",
              "used_count": 0,
              "is_unlimited": 1,
              "token_close": {
                "token": "string",
                "status_key": "string",
                "challenge_key": "string"
              },
              "token_open": {
                "token": "string",
                "status_key": "string",
                "challenge_key": "string"
              },
              "token_status": {
                "token": "string",
                "status_key": "string",
                "challenge_key": "string"
              },
              "deleted_at": null,
              "created_at": {},
              "updated_at": {}
            }
          }
        },
        "required": [
          "id",
          "name",
          "product_id",
          "sender_id",
          "operation_token_id",
          "deleted_at",
          "created_at",
          "updated_at",
          "receiver",
          "sender",
          "product",
          "operation_token"
        ]
      },
      "CreateOneOperationKeyDto": {
        "type": "object",
        "properties": {
          "start_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "product_id": {
            "type": "number",
            "example": 1
          },
          "receiver_email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "is_unlimited": {
            "type": "number"
          }
        },
        "required": [
          "start_time",
          "product_id",
          "receiver_email"
        ]
      },
      "CreateOperationKeyDto": {
        "type": "object",
        "properties": {
          "start_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "products": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "receiver_emails": {
            "example": [
              "john.doe1@example.com",
              "john.doe2@example.com",
              "john.doe3@example.com"
            ],
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "is_unlimited": {
            "type": "number"
          }
        },
        "required": [
          "start_time",
          "products",
          "receiver_emails"
        ]
      },
      "UpdateOperationKeyDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "New opertion key name",
            "description": "The new name for the Operation Key"
          }
        },
        "required": [
          "name"
        ]
      },
      "OperationTokenDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "product_id": {
            "type": "number"
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "status": {
            "type": "string",
            "example": "active",
            "enum": [
              "active",
              "reactived",
              "blocked",
              "invalid",
              "deleted",
              "depleted",
              "expired"
            ]
          },
          "used_count": {
            "type": "number",
            "example": 0
          },
          "is_unlimited": {
            "type": "number"
          },
          "token_close": {
            "type": "object",
            "example": {
              "challenge_key": "string",
              "status_key": "string",
              "token": "string"
            }
          },
          "token_open": {
            "type": "object",
            "example": {
              "challenge_key": "string",
              "status_key": "string",
              "token": "string"
            }
          },
          "token_status": {
            "type": "object",
            "example": {
              "challenge_key": "string",
              "status_key": "string",
              "token": "string"
            }
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "product": {
            "type": "object",
            "example": {
              "device_id": "B123456",
              "id": 1
            }
          }
        },
        "required": [
          "id",
          "product_id",
          "start_time",
          "end_time",
          "status",
          "used_count",
          "is_unlimited",
          "token_close",
          "token_open",
          "token_status",
          "deleted_at",
          "created_at",
          "updated_at",
          "product"
        ]
      },
      "CreateOperationTokenDto": {
        "type": "object",
        "properties": {
          "start_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "The starting time for the operation token"
          },
          "end_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "The end time for the operation token"
          },
          "product_id": {
            "type": "number",
            "description": "The product id to controll with the operation token"
          },
          "is_unlimited": {
            "type": "number",
            "description": "Should the operation key be unlimited"
          }
        },
        "required": [
          "start_time",
          "product_id"
        ]
      },
      "UpdateOperationTokenDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "example": "blocked",
            "description": "Change the status of the operation token",
            "enum": [
              "blocked"
            ]
          }
        },
        "required": [
          "status"
        ]
      },
      "BindLicensesDto": {
        "type": "object",
        "properties": {
          "license_ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "product_ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "license_ids",
          "product_ids"
        ]
      },
      "BindLicenseDto": {
        "type": "object",
        "properties": {
          "license_ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "license_ids"
        ]
      },
      "LotWhitelistLicenseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "license_plate": {
            "type": "string",
            "example": "DT-PLATE2"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "license_plate",
          "created_at",
          "updated_at"
        ]
      },
      "UnbindProductsDto": {
        "type": "object",
        "properties": {
          "product_ids": {
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "product_ids"
        ]
      },
      "ProductErrorDto": {
        "type": "object",
        "properties": {
          "product": {
            "type": "object",
            "example": {
              "id": 1,
              "device_id": "B123456",
              "name": "B123456",
              "power_type": "battery",
              "lot_id": 1,
              "zone_id": 1,
              "product_type_id": 2,
              "status": "online"
            }
          },
          "id": {
            "type": "number"
          },
          "error_code": {
            "type": "string"
          },
          "jammed": {
            "type": "number"
          },
          "sensor_dirty": {
            "type": "number"
          },
          "pin_broken": {
            "type": "number"
          },
          "rtcc_invalid": {
            "type": "number"
          },
          "battery_empty": {
            "type": "number"
          },
          "master_key_not_set": {
            "type": "number"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "product",
          "id",
          "error_code",
          "jammed",
          "sensor_dirty",
          "pin_broken",
          "rtcc_invalid",
          "battery_empty",
          "master_key_not_set",
          "deleted_at",
          "created_at",
          "updated_at"
        ]
      },
      "EventDto": {
        "type": "object",
        "properties": {
          "event_id": {
            "type": "string",
            "example": "a1b2c3d4"
          }
        },
        "required": [
          "event_id"
        ]
      },
      "ChangeProductStateDto": {
        "type": "object",
        "properties": {
          "operation": {
            "type": "string",
            "example": "open",
            "default": "open",
            "description": "The operation that we want to run on a product.",
            "enum": [
              "open",
              "force_close",
              "close",
              "stay_open",
              "stay_close",
              "clear_stay_open",
              "clear_stay_close"
            ]
          },
          "wait_for_completion": {
            "type": "boolean",
            "example": true,
            "default": true,
            "description": "Used to disable operation retry. In normal circumstances the API\n    is going to wait until a operation succedes in changing the state,for example\n    when sending a \"close\" command, the API will wait until the product is in a\n    closed state. If that times out it will retry multiple times. In situations\n    when using a brain, this can couse problems if the brain is not setup with\n    input sensors since there will be no open/close state to read."
          }
        },
        "required": [
          "operation"
        ]
      },
      "ProductsProductErrorDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "Product error id"
          },
          "jammed": {
            "type": "number",
            "description": "Shows if the barrier is jammed"
          },
          "sensor_dirty": {
            "type": "number",
            "description": "The barrier sensor is dirty"
          },
          "pin_broken": {
            "type": "number",
            "description": "The barrier pin is broken"
          },
          "rtcc_invalid": {
            "type": "number",
            "description": "The realtime clock is not set on the device"
          },
          "battery_empty": {
            "type": "number",
            "description": "The battery is criticaly low"
          },
          "master_key_not_set": {
            "type": "number",
            "description": "The barrier has no key exchanged on it"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null,
            "description": "Deleted at Dated"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "Created at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "Update at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "error_code": {
            "type": "string",
            "description": "The error code used for lookup"
          }
        },
        "required": [
          "id",
          "jammed",
          "sensor_dirty",
          "pin_broken",
          "rtcc_invalid",
          "battery_empty",
          "master_key_not_set",
          "deleted_at",
          "created_at",
          "updated_at",
          "error_code"
        ]
      },
      "BarrierDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "Barrier id"
          },
          "product_id": {
            "type": "number",
            "description": "Product id"
          },
          "state": {
            "type": "string",
            "example": "opened",
            "description": "Barrier state",
            "enum": [
              "opened",
              "closed"
            ]
          },
          "is_autoclose": {
            "type": "number",
            "description": "Is autoclose turned on"
          },
          "is_car_on_top": {
            "type": "number",
            "description": "Is a car on top"
          },
          "autoclose_time": {
            "type": "number",
            "description": "The autoclose time set by the user"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "Created at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "Updated at Date",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "product_id",
          "state",
          "is_autoclose",
          "is_car_on_top",
          "autoclose_time",
          "created_at",
          "updated_at"
        ]
      },
      "BrainDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "Brain error id"
          },
          "product_id": {
            "type": "number",
            "description": "Product id"
          },
          "state": {
            "type": "string",
            "example": "closed",
            "description": "Position state",
            "enum": [
              "opened",
              "closed",
              "error",
              "unknown",
              "reserved",
              "disabled"
            ]
          },
          "permanent_position": {
            "type": "string",
            "example": "disabled",
            "description": "The permanent position toggle",
            "enum": [
              "disabled",
              "stay_open",
              "stay_close"
            ]
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null,
            "description": "Deleted at Dated"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "Created at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "Update at Date",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "product_id",
          "state",
          "permanent_position",
          "deleted_at",
          "created_at",
          "updated_at"
        ]
      },
      "ProductDto": {
        "type": "object",
        "properties": {
          "product_error": {
            "description": "Product error",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "allOf": [
              {
                "$ref": "#/components/schemas/ProductsProductErrorDto"
              }
            ]
          },
          "id": {
            "type": "number",
            "description": "Master key id"
          },
          "device_id": {
            "type": "string",
            "example": "B123456",
            "description": "The unique product identifier"
          },
          "name": {
            "type": "string",
            "example": "B123456",
            "description": "The user set product name"
          },
          "power_type": {
            "type": "string",
            "example": "battery",
            "description": "The power source type of the product",
            "enum": [
              "battery",
              "grid"
            ]
          },
          "lot_id": {
            "type": "number",
            "description": "The lot id of to which the product is assigned"
          },
          "zone_id": {
            "type": "number",
            "description": "The zone id of to which the product is assigned"
          },
          "product_type_id": {
            "type": "number",
            "example": 2,
            "description": "The product type id"
          },
          "hardware_version": {
            "example": "1.0.0",
            "description": "The hardware versions of the product",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "firmware_version": {
            "example": "1.0.0",
            "description": "The firmware version of the product",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "latitude": {
            "type": "number",
            "example": 43.52652359,
            "description": "The product latitude, acquired during setup"
          },
          "longitude": {
            "type": "number",
            "example": 16.450813293,
            "description": "The product longitude, acquired during setup"
          },
          "status": {
            "type": "string",
            "example": "online",
            "description": "The product state",
            "enum": [
              "online",
              "offline"
            ]
          },
          "advertisement_data": {
            "type": "string",
            "description": "The product raw advertisement data"
          },
          "battery_status": {
            "description": "The product battery percentage",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "product_error_id": {
            "description": "The product error id",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "rssi": {
            "description": "The measured product RSSI signal to the optimal parklio gateway",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "Created at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "Updated at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "barrier": {
            "description": "The Barrier Data",
            "allOf": [
              {
                "$ref": "#/components/schemas/BarrierDto"
              }
            ]
          },
          "gate": {
            "description": "The Gate Data",
            "allOf": [
              {
                "$ref": "#/components/schemas/BrainDto"
              }
            ]
          },
          "chain": {
            "description": "The Chain Data",
            "allOf": [
              {
                "$ref": "#/components/schemas/BrainDto"
              }
            ]
          },
          "bollard": {
            "description": "The Bollard Data",
            "allOf": [
              {
                "$ref": "#/components/schemas/BrainDto"
              }
            ]
          },
          "brain": {
            "description": "The Brain Data",
            "allOf": [
              {
                "$ref": "#/components/schemas/BrainDto"
              }
            ]
          }
        },
        "required": [
          "product_error",
          "id",
          "device_id",
          "name",
          "power_type",
          "lot_id",
          "zone_id",
          "product_type_id",
          "hardware_version",
          "firmware_version",
          "latitude",
          "longitude",
          "status",
          "advertisement_data",
          "battery_status",
          "product_error_id",
          "rssi",
          "created_at",
          "updated_at",
          "barrier",
          "gate",
          "chain",
          "bollard",
          "brain"
        ]
      },
      "ChangeProductSettingsDto": {
        "type": "object",
        "properties": {
          "is_autoclose": {
            "type": "boolean",
            "description": "Turns the barrier autoclose on or off."
          },
          "autoclose_time": {
            "type": "number",
            "example": 15,
            "description": "Changes the barrier autoclose time."
          }
        }
      },
      "UpdateProductDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "B123456",
            "description": "The user set product name"
          },
          "longitude": {
            "type": "number",
            "example": 16.450813293,
            "description": "The product longitude, acquired during setup",
            "default": 18.3779451
          },
          "latitude": {
            "type": "number",
            "example": 43.52652359,
            "description": "The product latitude, acquired during setup",
            "default": 43.8483818
          },
          "zone_id": {
            "type": "number",
            "description": "The the id of the target zone where we want to move the product"
          }
        }
      },
      "BrainSubtypeDto": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "number",
            "description": "Product id"
          },
          "product": {
            "description": "The product associated with the brain",
            "allOf": [
              {
                "$ref": "#/components/schemas/SubtypeProductDto"
              }
            ]
          },
          "id": {
            "type": "number",
            "description": "Subtype id"
          },
          "state": {
            "type": "string",
            "example": "closed",
            "description": "Position state",
            "enum": [
              "opened",
              "closed",
              "error",
              "unknown",
              "reserved",
              "disabled"
            ]
          },
          "permanent_position": {
            "type": "string",
            "example": "disabled",
            "description": "Position state",
            "enum": [
              "disabled",
              "stay_open",
              "stay_close"
            ]
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null,
            "description": "Deleted at Dated"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "Created at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "Update at Date",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "product_id",
          "product",
          "id",
          "state",
          "permanent_position",
          "deleted_at",
          "created_at",
          "updated_at"
        ]
      },
      "ProductAssignDto": {
        "type": "object",
        "properties": {
          "device_id": {
            "type": "string",
            "example": "B123456"
          },
          "name": {
            "type": "string",
            "example": "B123456"
          },
          "master_key_signature": {
            "type": "string"
          },
          "latitude": {
            "type": "number",
            "example": 43.52652359
          },
          "longitude": {
            "type": "number",
            "example": 16.450813293
          },
          "lot_id": {
            "type": "number"
          },
          "zone_id": {
            "type": "number"
          }
        },
        "required": [
          "device_id",
          "name",
          "master_key_signature"
        ]
      },
      "BarrierSubtypeDto": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "number",
            "description": "Product id"
          },
          "product": {
            "description": "The product associated with the brain",
            "allOf": [
              {
                "$ref": "#/components/schemas/SubtypeProductDto"
              }
            ]
          },
          "id": {
            "type": "number",
            "description": "Subtype id"
          },
          "state": {
            "type": "string",
            "example": "closed",
            "description": "Position state",
            "enum": [
              "opened",
              "closed"
            ]
          },
          "is_car_on_top": {
            "type": "number",
            "description": "Car on top state"
          },
          "is_autoclose": {
            "type": "number",
            "description": "Is autoclose turned on"
          },
          "autoclose_time": {
            "type": "number",
            "description": "Autoclose time, the value refreshes only if the value is changed via API"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null,
            "description": "Deleted at Dated"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "Created at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "Update at Date",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "product_id",
          "product",
          "id",
          "state",
          "is_car_on_top",
          "is_autoclose",
          "autoclose_time",
          "deleted_at",
          "created_at",
          "updated_at"
        ]
      },
      "ProductLogDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "account_user_id": {
            "type": "number",
            "example": 1
          },
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "account_user": {
            "type": "object",
            "example": {
              "id": 1,
              "email": "john.doe@example.com",
              "name": "John Doe"
            }
          },
          "product_id": {
            "type": "number",
            "example": 1
          },
          "product": {
            "type": "object",
            "example": {
              "id": 1,
              "device_id": "B123456",
              "name": "B123456",
              "power_type": "battery",
              "lot_id": 1,
              "zone_id": 1,
              "product_type_id": 1,
              "status": "online"
            }
          },
          "operation_type": {
            "type": "string",
            "example": "open",
            "enum": [
              "close",
              "open",
              "force_close",
              "force_open",
              "ignore_car",
              "stay_open",
              "stay_close",
              "clear_stay_open",
              "clear_stay_close"
            ]
          },
          "type_of_access": {
            "type": "string",
            "example": "app",
            "enum": [
              "gateway",
              "weblink",
              "app"
            ]
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "account_user_id",
          "zone_id",
          "account_user",
          "product_id",
          "product",
          "operation_type",
          "type_of_access",
          "created_at"
        ]
      },
      "WeblinkProductDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "Unique identifier of the product"
          },
          "device_id": {
            "type": "string",
            "example": "B123456",
            "description": "Unique device identifier"
          },
          "name": {
            "type": "string",
            "example": "Barrier 1",
            "description": "Name of the product"
          },
          "lot_id": {
            "type": "number",
            "example": 3,
            "description": "ID of the lot this product belongs to",
            "nullable": true
          },
          "zone_id": {
            "type": "number",
            "example": 2,
            "description": "ID of the zone this product belongs to",
            "nullable": true
          },
          "power_type": {
            "type": "string",
            "example": "battery",
            "description": "Power source type of the product",
            "enum": [
              "battery",
              "grid"
            ]
          },
          "product_type_id": {
            "type": "number",
            "example": 1,
            "description": "ID referencing the type of product"
          },
          "hardware_version": {
            "type": "string",
            "example": "1.0.0",
            "description": "Hardware version of the device"
          },
          "firmware_version": {
            "type": "string",
            "example": "2.3.1",
            "description": "Firmware version currently installed on the device"
          },
          "latitude": {
            "type": "number",
            "example": 43.52652359,
            "description": "Latitude coordinate of the product location"
          },
          "longitude": {
            "type": "number",
            "example": 16.450813293,
            "description": "Longitude coordinate of the product location"
          },
          "status": {
            "type": "string",
            "example": "online",
            "description": "Current operational status of the product",
            "enum": [
              "online",
              "offline"
            ]
          },
          "advertisement_data": {
            "type": "string",
            "description": "The product raw advertisement data"
          },
          "battery_status": {
            "type": "number",
            "example": 87,
            "description": "Battery charge level as a percentage (0-100)"
          },
          "product_error_id": {
            "type": "number",
            "example": null,
            "description": "ID of the active product error, null if no error",
            "nullable": true
          },
          "rssi": {
            "type": "number",
            "example": -88,
            "description": "Received signal strength indicator in dBm"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the product was created"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the product was last updated"
          }
        },
        "required": [
          "id",
          "device_id",
          "name",
          "lot_id",
          "zone_id",
          "power_type",
          "product_type_id",
          "hardware_version",
          "firmware_version",
          "latitude",
          "longitude",
          "status",
          "advertisement_data",
          "battery_status",
          "product_error_id",
          "rssi",
          "created_at",
          "updated_at"
        ]
      },
      "WeblinkSenderDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "Unique identifier of the account user"
          },
          "account_user_role_id": {
            "type": "number",
            "example": 2,
            "description": "ID of the role assigned to this account user"
          },
          "account_id": {
            "type": "number",
            "example": 5,
            "description": "ID of the account this user belongs to"
          },
          "email": {
            "type": "string",
            "example": "john.doe@example.com",
            "description": "Email address of the sender"
          },
          "name": {
            "type": "string",
            "example": "John Doe",
            "description": "Full name of the sender"
          },
          "phone": {
            "type": "string",
            "example": "+385 555 5555",
            "description": "Phone number of the sender"
          },
          "email_confirmed": {
            "type": "number",
            "example": 1,
            "description": "Whether the sender has confirmed their email (1 = confirmed, 0 = not confirmed)"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the account user was created"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the account user was last updated"
          }
        },
        "required": [
          "id",
          "account_user_role_id",
          "account_id",
          "email",
          "name",
          "phone",
          "email_confirmed",
          "created_at",
          "updated_at"
        ]
      },
      "WeblinkOperationTokenDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "Unique identifier of the operation token"
          },
          "product_id": {
            "type": "number",
            "example": 5,
            "description": "ID of the product this operation token is associated with"
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Date and time from which the token becomes valid"
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Date and time at which the token expires"
          },
          "status": {
            "type": "string",
            "example": "active",
            "description": "Current status of the operation token",
            "enum": [
              "active",
              "reactived",
              "blocked",
              "invalid",
              "deleted",
              "depleted",
              "expired"
            ]
          },
          "used_count": {
            "type": "number",
            "example": 3,
            "description": "Number of times this token has been used"
          },
          "is_unlimited": {
            "type": "number",
            "example": 0,
            "description": "Whether the token has unlimited uses (1 = unlimited, 0 = limited)"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the token was created"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the token was last updated"
          },
          "token_close": {
            "type": "string",
            "example": "a1b2c3d4e5f6...",
            "description": "Token string used to close/lock the product"
          },
          "token_open": {
            "type": "string",
            "example": "f6e5d4c3b2a1...",
            "description": "Token string used to open/unlock the product"
          },
          "token_status": {
            "type": "string",
            "example": "active",
            "description": "Token string used to update the product status"
          }
        },
        "required": [
          "id",
          "product_id",
          "start_time",
          "end_time",
          "status",
          "used_count",
          "is_unlimited",
          "created_at",
          "updated_at",
          "token_close",
          "token_open",
          "token_status"
        ]
      },
      "WeblinkDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "Unique identifier of the weblink"
          },
          "product_id": {
            "type": "number",
            "example": 5,
            "description": "ID of the product associated with this weblink"
          },
          "sender_id": {
            "type": "number",
            "example": 3,
            "description": "ID of the account user who sent this weblink"
          },
          "operation_token_id": {
            "type": "number",
            "example": 7,
            "description": "ID of the operation token linked to this weblink"
          },
          "receiver_identifier": {
            "type": "string",
            "example": "jane.doe@example.com",
            "description": "Email or identifier of the weblink recipient"
          },
          "receiver_identifier_type": {
            "type": "string",
            "example": "email",
            "description": "Type of the receiver identifier",
            "enum": [
              "email",
              "phone",
              "license_plate"
            ]
          },
          "url": {
            "type": "string",
            "description": "Full URL of the weblink sent to the receiver"
          },
          "max_uses": {
            "type": "number",
            "example": 5,
            "description": "Maximum number of times this weblink can be used, null means unlimited",
            "nullable": true
          },
          "used_count": {
            "type": "number",
            "example": 3,
            "description": "Number of times this token has been used"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the weblink was created"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the weblink was last updated"
          },
          "product": {
            "description": "Product associated with this weblink",
            "allOf": [
              {
                "$ref": "#/components/schemas/WeblinkProductDto"
              }
            ]
          },
          "sender": {
            "description": "Account user who created and sent this weblink",
            "allOf": [
              {
                "$ref": "#/components/schemas/WeblinkSenderDto"
              }
            ]
          },
          "operation_token": {
            "description": "Operation token that controls access permissions for this weblink",
            "allOf": [
              {
                "$ref": "#/components/schemas/WeblinkOperationTokenDto"
              }
            ]
          }
        },
        "required": [
          "id",
          "product_id",
          "sender_id",
          "operation_token_id",
          "receiver_identifier",
          "receiver_identifier_type",
          "url",
          "max_uses",
          "used_count",
          "created_at",
          "updated_at",
          "product",
          "sender",
          "operation_token"
        ]
      },
      "BulkCreateWeblinkDto": {
        "type": "object",
        "properties": {
          "products": {
            "example": [
              5,
              10,
              15
            ],
            "description": "List of product IDs to create weblinks for",
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "receiver_email": {
            "type": "string",
            "example": "john.doe@example.com",
            "description": "Email address of the weblink recipient"
          },
          "start_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "ISO 8601 datetime from which the weblink becomes valid"
          },
          "end_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "ISO 8601 datetime at which the weblink expires"
          },
          "max_uses": {
            "type": "number",
            "example": 10,
            "default": 1,
            "nullable": true,
            "description": "Maximum number of times the weblink can be used. Defaults to 1 if not provided. Set to null for unlimited uses."
          }
        },
        "required": [
          "products",
          "receiver_email",
          "start_time",
          "end_time"
        ]
      },
      "WeblinkMetadataDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "product_id": {
            "type": "number"
          },
          "sender_id": {
            "type": "number"
          },
          "operation_token_id": {
            "type": "number"
          },
          "receiver_identifier": {
            "type": "string",
            "example": "jane.doe@example.com"
          },
          "receiver_identifier_type": {
            "type": "string",
            "example": "email"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "product": {
            "$ref": "#/components/schemas/WeblinkProductDto"
          },
          "sender": {
            "$ref": "#/components/schemas/WeblinkSenderDto"
          }
        },
        "required": [
          "id",
          "product_id",
          "sender_id",
          "operation_token_id",
          "receiver_identifier",
          "receiver_identifier_type",
          "deleted_at",
          "created_at",
          "updated_at",
          "product",
          "sender"
        ]
      },
      "BulkUpdateWeblinksSuccessResponseDto": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "example": true
          },
          "id": {
            "type": "number",
            "example": 1
          }
        },
        "required": [
          "success",
          "id"
        ]
      },
      "ResendWeblinkDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": "[1,2,3]",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "OperateWeblinkDto": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "operation": {
            "type": "string",
            "example": "open",
            "enum": [
              "open",
              "force_close",
              "close",
              "stay_open",
              "stay_close",
              "clear_stay_open",
              "clear_stay_close"
            ]
          }
        },
        "required": [
          "token",
          "operation"
        ]
      },
      "BulkUpdateWeblinkDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": "[1,2,3]",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "type": "string",
            "example": "blocked",
            "enum": [
              "active",
              "reactived",
              "blocked",
              "invalid",
              "deleted",
              "depleted",
              "expired"
            ]
          }
        },
        "required": [
          "ids",
          "status"
        ]
      },
      "UpdateWeblinkDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "example": "blocked",
            "enum": [
              "active",
              "reactived",
              "blocked",
              "invalid",
              "deleted",
              "depleted",
              "expired"
            ]
          }
        },
        "required": [
          "status"
        ]
      },
      "QrCodeDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "Unique identifier of the QR code"
          },
          "account_id": {
            "type": "number",
            "example": 1,
            "description": "ID of the account this QR code belongs to"
          },
          "account_user_id": {
            "type": "number",
            "example": 1,
            "description": "ID of the account user who created this QR code"
          },
          "product_id": {
            "type": "number",
            "example": 1,
            "description": "ID of the product associated with this QR code"
          },
          "device_id": {
            "type": "string",
            "example": "B123456",
            "description": "Identifier of the device linked to this QR code"
          },
          "uuid": {
            "type": "string",
            "example": "2b26e2e4-51c5-4d29-bb2b-12762245e9b3",
            "description": "Universally unique identifier for the QR code"
          },
          "token": {
            "type": "string",
            "example": "PGiTTPbwYSwQoJYETV7B5SYc710C2RjQwpGUMrKT0Qf4IS2RUFT7yskcfeyXyKmX",
            "description": "Secure token used for QR code verification and access control"
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Date and time from which the QR code becomes active"
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Date and time at which the QR code expires"
          },
          "description": {
            "type": "string",
            "example": "Guest parking access for Building A",
            "description": "Optional description explaining the purpose of the QR code"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the QR code was created"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp when the QR code was last updated"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          }
        },
        "required": [
          "id",
          "account_id",
          "account_user_id",
          "product_id",
          "device_id",
          "uuid",
          "token",
          "start_time",
          "end_time",
          "description",
          "created_at",
          "updated_at",
          "deleted_at"
        ]
      },
      "CreateQrCodeDto": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "number",
            "example": 1,
            "description": "ID of the product to associate with this QR code"
          },
          "start_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "The date and time from which the QR code becomes active, in ISO 8601 format"
          },
          "end_time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "The date and time at which the QR code expires, in ISO 8601 format. If omitted, the QR code does not expire"
          },
          "timezone": {
            "type": "string",
            "example": "+01:00",
            "description": "Timezone offset used to interpret the start and end times, in ±HH:MM format"
          },
          "description": {
            "type": "string",
            "example": "Guest parking access for Building A",
            "description": "Optional description explaining the purpose of the QR code. Max 255 characters"
          }
        },
        "required": [
          "product_id",
          "start_time",
          "timezone"
        ]
      },
      "BulkDeleteQrCodeDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              1,
              2,
              3
            ],
            "description": "List of QR code IDs to delete. Must contain between 1 and 30 IDs.",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "FlowHeartbeatDto": {
        "type": "object",
        "properties": {
          "block_name": {
            "type": "string",
            "example": ""
          }
        },
        "required": [
          "block_name"
        ]
      },
      "ValueDto": {
        "type": "object",
        "properties": {
          "value": {
            "type": "number"
          }
        }
      },
      "FlowOccupancyChangeDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": ""
          },
          "cube_id": {
            "type": "number",
            "example": 1
          },
          "data": {
            "example": {
              "value": 1
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/ValueDto"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "cube_id",
          "data"
        ]
      },
      "ImageDataDto": {
        "type": "object",
        "properties": {}
      },
      "FlowCameraFrameDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "Exit Camera 1"
          },
          "cube_id": {
            "type": "number",
            "example": 1
          },
          "data": {
            "example": {
              "image_data": ""
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/ImageDataDto"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "cube_id",
          "data"
        ]
      },
      "DataDto": {
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventDto"
            }
          },
          "header": {
            "example": [
              "ID",
              "License plate",
              "Category",
              "Color",
              "Trajectory start",
              "Trajectory end",
              "Duration of occurrence"
            ],
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "events",
          "header"
        ]
      },
      "FlowViolationZoneEventDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "b21350f1-9e2b-48f2-98a7-5966282fe96c"
          },
          "data": {
            "$ref": "#/components/schemas/DataDto"
          }
        },
        "required": [
          "name",
          "data"
        ]
      },
      "ParkingDetectionCameraDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "Parking Detection Camera 1"
          },
          "uuid": {
            "type": "string",
            "example": "d3a17704-98e4-4c8b-bb2e-5c2ec4e1c1f4"
          },
          "external_id": {
            "type": "string",
            "example": "0101010101010101"
          },
          "parking_detection_gateway_id": {
            "type": "number",
            "example": 1
          },
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "deleted_at": {
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "view_schema": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "uuid",
          "external_id",
          "parking_detection_gateway_id",
          "zone_id",
          "deleted_at",
          "created_at",
          "updated_at",
          "view_schema"
        ]
      },
      "CreateParkingDetectionCameraDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Parking Detection Camera 1"
          },
          "parking_detection_gateway_id": {
            "type": "number",
            "example": 1
          },
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "external_id": {
            "type": "string"
          },
          "uuid": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "parking_detection_gateway_id",
          "zone_id"
        ]
      },
      "UpdateParkingDetectionCameraDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Parking Detection Camera 1"
          },
          "external_id": {
            "type": "string",
            "example": "0101010101010101"
          },
          "uuid": {
            "type": "string",
            "example": "d3a17704-98e4-4c8b-bb2e-5c2ec4e1c1f4"
          }
        }
      },
      "ParkingDetectionGatewayDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "Parking detection gateway id"
          },
          "name": {
            "type": "string",
            "example": "Parking Detction Gateway 1",
            "description": "Parking detection gateway name"
          },
          "uuid": {
            "type": "string",
            "description": "Parking detection gateway uuid"
          },
          "lot_id": {
            "type": "number",
            "description": "Lot id"
          },
          "status": {
            "type": "string",
            "example": "online",
            "description": "Parking detection gateway status",
            "enum": [
              "online",
              "offline"
            ]
          },
          "external_id": {
            "type": "string",
            "description": "Parking detection gateway external id"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "Created at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "Updated at Date",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          }
        },
        "required": [
          "id",
          "name",
          "uuid",
          "lot_id",
          "status",
          "external_id",
          "created_at",
          "updated_at",
          "deleted_at"
        ]
      },
      "CreateParkingDetectionGatewayDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Parking Detection Gateway 1"
          },
          "lot_id": {
            "type": "number",
            "example": 1
          },
          "external_id": {
            "type": "string",
            "example": "0101010101010101"
          },
          "uuid": {
            "type": "string",
            "example": "d3a17704-98e4-4c8b-bb2e-5c2ec4e1c1f4"
          }
        },
        "required": [
          "name",
          "lot_id"
        ]
      },
      "ParkingDetectionGatewayTokenDto": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Indicates whether the request was successful or not"
          },
          "type": {
            "type": "string",
            "description": "Type of the token"
          },
          "token": {
            "type": "string",
            "description": "Bearer token"
          }
        },
        "required": [
          "success",
          "type",
          "token"
        ]
      },
      "UpdateParkingDetectionGatewayDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Parking Detction Gateway 1"
          },
          "external_id": {
            "type": "string",
            "example": "0101010101010101"
          },
          "uuid": {
            "type": "string",
            "example": "d3a17704-98e4-4c8b-bb2e-5c2ec4e1c1f4"
          }
        }
      },
      "ParkingPlaceDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "Parking place"
          },
          "occupancy_status": {
            "type": "string",
            "example": 1
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "external_id": {
            "type": "string",
            "example": 1
          },
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "uuid": {
            "type": "string",
            "example": "10ba038e-48da-487b-96e8-8d3b99b6d18a"
          },
          "id": {
            "type": "number",
            "example": 1
          }
        },
        "required": [
          "lot_id",
          "name",
          "occupancy_status",
          "deleted_at",
          "created_at",
          "updated_at",
          "external_id",
          "zone_id",
          "uuid",
          "id"
        ]
      },
      "CreateParkingPlaceDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Parking place"
          },
          "external_id": {
            "type": "string",
            "example": 1
          },
          "place_count": {
            "type": "number",
            "example": 5
          },
          "zone_id": {
            "type": "number",
            "example": 1
          }
        },
        "required": [
          "name",
          "zone_id"
        ]
      },
      "UpdateParkingPlaceDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Parking place"
          }
        }
      },
      "VioaltionZoneDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "parking_detection_camera_id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "Violation Zone"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "uuid": {
            "type": "string",
            "example": "d3a17704-98e4-4c8b-bb2e-5c2ec4e1c1f4"
          }
        },
        "required": [
          "id",
          "parking_detection_camera_id",
          "name",
          "deleted_at",
          "created_at",
          "updated_at",
          "uuid"
        ]
      },
      "ViolationZoneEventDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "license_plate": {
            "type": "string",
            "example": "DT-PLATE2"
          },
          "color": {
            "type": "string",
            "example": "red"
          },
          "model": {
            "type": "string",
            "example": 1
          },
          "stationary_time": {
            "type": "number",
            "example": 60
          },
          "image_url": {
            "type": "string",
            "example": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "violation_zone": {
            "example": {
              "id": 1,
              "lot_id": 1,
              "name": "Violation Zone",
              "uuid": "d3a17704-98e4-4c8b-bb2e-5c2ec4e1c1f4",
              "created_at": {},
              "updated_at": {},
              "deleted_at": null
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/VioaltionZoneDto"
              }
            ]
          }
        },
        "required": [
          "id",
          "license_plate",
          "color",
          "model",
          "stationary_time",
          "image_url",
          "deleted_at",
          "created_at",
          "updated_at",
          "violation_zone"
        ]
      },
      "CreateViolationZoneDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Violation zone"
          },
          "parking_detection_camera_id": {
            "type": "number",
            "example": 1
          }
        },
        "required": [
          "name",
          "parking_detection_camera_id"
        ]
      },
      "ViolationZoneDto": {
        "type": "object",
        "properties": {
          "parking_detection_camera_id": {
            "type": "number",
            "example": 1
          },
          "name": {
            "type": "string",
            "example": "Violation Zone"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "uuid": {
            "type": "string",
            "example": "d3a17704-98e4-4c8b-bb2e-5c2ec4e1c1f4"
          },
          "id": {
            "type": "number",
            "example": 1
          }
        },
        "required": [
          "parking_detection_camera_id",
          "name",
          "deleted_at",
          "created_at",
          "updated_at",
          "uuid",
          "id"
        ]
      },
      "UpdateViolationZoneDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Violation zone"
          }
        }
      },
      "RemoteControlLogDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "product_id": {
            "type": "number"
          },
          "account_user_id": {
            "type": "number"
          },
          "operation": {
            "type": "string",
            "example": "open",
            "enum": [
              "open",
              "force_close",
              "close",
              "stay_open",
              "stay_close",
              "clear_stay_open",
              "clear_stay_close"
            ]
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "product": {
            "$ref": "#/components/schemas/ProductDto"
          }
        },
        "required": [
          "id",
          "product_id",
          "account_user_id",
          "operation",
          "created_at",
          "updated_at",
          "product"
        ]
      },
      "RotaryParkingPlaceDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "rotary_id": {
            "type": "number"
          },
          "is_occupied": {
            "type": "boolean"
          },
          "name": {
            "type": "string",
            "example": "Parking Place 1"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "rotary_id",
          "is_occupied",
          "name",
          "created_at",
          "updated_at"
        ]
      },
      "CreateRotaryParkingPlaceDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Parking Place 1"
          },
          "rotary_id": {
            "type": "number"
          }
        },
        "required": [
          "name",
          "rotary_id"
        ]
      },
      "UpdateRotaryParkingPlaceDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Rotary Parking Place 1"
          },
          "rotary_id": {
            "type": "number"
          },
          "is_occupied": {
            "type": "boolean"
          }
        }
      },
      "BulkUpdateRotaryParkingPlaceDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "example": "online",
            "enum": [
              "online",
              "offline"
            ]
          },
          "ids": {
            "default": [
              1,
              2
            ],
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "is_occupied": {
            "type": "boolean"
          }
        },
        "required": [
          "ids",
          "is_occupied"
        ]
      },
      "RotaryDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string",
            "example": "Default Rotary"
          },
          "account_id": {
            "type": "number"
          },
          "lot_id": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "name",
          "account_id",
          "lot_id",
          "created_at",
          "updated_at"
        ]
      },
      "CreateRotaryDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Default Rotary"
          },
          "lot_id": {
            "type": "number"
          }
        },
        "required": [
          "name"
        ]
      },
      "UpdateRotaryDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Default Rotary"
          },
          "lot_id": {
            "type": "number"
          }
        }
      },
      "UpdateDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "uploader_id": {
            "type": "number"
          },
          "type": {
            "type": "string",
            "example": "barrier",
            "enum": [
              "gateway",
              "barrier"
            ]
          },
          "hardware_version": {
            "type": "number"
          },
          "code": {
            "type": "number"
          },
          "version": {
            "type": "string",
            "example": "V1.0.0."
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "uploader_id",
          "type",
          "hardware_version",
          "code",
          "version",
          "created_at",
          "updated_at"
        ]
      },
      "CreateUpdateDto": {
        "type": "object",
        "properties": {
          "file": {
            "type": "string",
            "format": "binary"
          },
          "type": {
            "type": "string",
            "example": "gateway",
            "enum": [
              "gateway",
              "barrier"
            ]
          },
          "code": {
            "type": "number",
            "example": 1
          },
          "hardware": {
            "type": "number",
            "example": 1
          },
          "version": {
            "type": "string",
            "example": "V1.0.0."
          }
        },
        "required": [
          "file",
          "type",
          "code",
          "hardware",
          "version"
        ]
      },
      "ScheduleZoneAction": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "action": {
            "type": "string",
            "example": "open"
          },
          "time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "days": {
            "example": [
              0,
              1,
              2,
              3,
              4
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "id",
          "created_at",
          "updated_at",
          "deleted_at",
          "zone_id",
          "action",
          "time",
          "days"
        ]
      },
      "CreateScheduleZoneActionDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "action": {
            "type": "string",
            "example": "open",
            "enum": [
              "open",
              "close"
            ]
          },
          "time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "days": {
            "example": [
              0,
              1,
              2,
              3,
              4
            ],
            "description": "An array representing days of the week, where 0 = Sunday and 1 = Monday 2 = Tuesday, 3 = Wednesday 4 = Thursday 5 = Friday 6 = Saturday. Each value must be an integer between 0 and 6.",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "action",
          "time",
          "days"
        ]
      },
      "UpdateScheduleZoneActionDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1
          },
          "action": {
            "type": "string",
            "example": "open",
            "enum": [
              "open",
              "close"
            ]
          },
          "time": {
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "days": {
            "example": [
              0,
              1,
              2,
              3,
              4
            ],
            "description": "An array representing days of the week, where 0 = Sunday and 1 = Monday 2 = Tuesday, 3 = Wednesday 4 = Thursday 5 = Friday 6 = Saturday. Each value must be an integer between 0 and 6.",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        }
      },
      "RequestInvoiceDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "john.doe@mail.com"
          },
          "session_id": {
            "type": "string",
            "example": ""
          },
          "recaptcha": {
            "type": "string",
            "example": ""
          }
        },
        "required": [
          "email",
          "session_id",
          "recaptcha"
        ]
      },
      "RequestLicensePLateInvoiceDto": {
        "type": "object",
        "properties": {
          "license_plate": {
            "type": "string",
            "example": ""
          },
          "park_date": {
            "format": "date-time",
            "type": "string",
            "example": ""
          },
          "recaptcha": {
            "type": "string",
            "example": ""
          }
        },
        "required": [
          "license_plate",
          "park_date",
          "recaptcha"
        ]
      },
      "DeviceInfoDto": {
        "type": "object",
        "properties": {}
      },
      "ObjectDto": {
        "type": "object",
        "properties": {}
      },
      "LoraOccupancyChangeDto": {
        "type": "object",
        "properties": {
          "device_info": {
            "$ref": "#/components/schemas/DeviceInfoDto"
          },
          "object": {
            "$ref": "#/components/schemas/ObjectDto"
          }
        },
        "required": [
          "device_info",
          "object"
        ]
      },
      "DeviceProductErrors": {
        "type": "object",
        "properties": {
          "jammed": {
            "type": "boolean"
          },
          "sensor_dirty": {
            "type": "boolean"
          },
          "pin_broken": {
            "type": "boolean"
          },
          "rtcc_invalid": {
            "type": "boolean"
          },
          "battery_empty": {
            "type": "boolean"
          },
          "master_key_not_set": {
            "type": "boolean"
          }
        },
        "required": [
          "jammed",
          "sensor_dirty",
          "pin_broken",
          "rtcc_invalid",
          "battery_empty",
          "master_key_not_set"
        ]
      },
      "DeviceDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "Unique identifier"
          },
          "name": {
            "type": "string",
            "description": "Device name"
          },
          "device_id": {
            "type": "string",
            "description": "Device unique device ID"
          },
          "status": {
            "type": "string",
            "description": "Current device status"
          },
          "type": {
            "type": "string",
            "description": "Type of device",
            "enum": [
              "barrier",
              "gate",
              "chain",
              "bollard",
              "gateway",
              "terminal",
              "lpr_camera"
            ]
          },
          "rssi": {
            "type": "number",
            "description": "Received Signal Strength Indicator",
            "nullable": true
          },
          "mac": {
            "type": "string",
            "description": "MAC address",
            "nullable": true
          },
          "ip_address": {
            "type": "string",
            "description": "IP address",
            "nullable": true
          },
          "firmware_version": {
            "type": "string",
            "description": "Firmware version",
            "nullable": true
          },
          "battery_status": {
            "type": "number",
            "description": "Battery status",
            "nullable": true
          },
          "is_car_on_top": {
            "type": "boolean",
            "description": "Indicates if car is on top of barrier",
            "nullable": true
          },
          "is_autoclose": {
            "type": "boolean",
            "description": "Is the autoclose feature turned on",
            "nullable": true
          },
          "state": {
            "type": "string",
            "description": "Current state",
            "enum": [
              "opened",
              "closed"
            ],
            "nullable": true
          },
          "permanent_position": {
            "type": "string",
            "description": "Permanent position setting",
            "enum": [
              "disabled",
              "stay_open",
              "stay_close"
            ],
            "nullable": true
          },
          "power_type": {
            "type": "string",
            "description": "The type of power connected to the device",
            "enum": [
              "battery",
              "grid"
            ],
            "nullable": false
          },
          "battery_percentage": {
            "type": "number",
            "description": "Battery charge percentage.",
            "example": 76
          },
          "product_error": {
            "description": "Object that contains the errors on the device",
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceProductErrors"
              }
            ]
          },
          "terminal_type": {
            "type": "string",
            "description": "The type of the terminal.",
            "enum": [
              "entry",
              "exit",
              "pof",
              "lp_pof",
              "lp_exit"
            ],
            "nullable": true
          },
          "zone_id": {
            "type": "number",
            "description": "Zone identifier",
            "nullable": true
          },
          "lot_id": {
            "type": "number",
            "description": "Lot identifier",
            "nullable": true
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "Creation timestamp",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "Updated at Date",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "name",
          "device_id",
          "status",
          "type",
          "rssi",
          "mac",
          "ip_address",
          "firmware_version",
          "battery_status",
          "is_car_on_top",
          "is_autoclose",
          "state",
          "permanent_position",
          "power_type",
          "product_error",
          "terminal_type",
          "zone_id",
          "lot_id",
          "created_at",
          "updated_at"
        ]
      },
      "LotScopeNoIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "average_duration": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative average duration across all time"
          }
        },
        "required": [
          "lot_id",
          "name",
          "average_duration"
        ]
      },
      "LotScopeHourIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "average_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of average duration for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "average_duration"
        ]
      },
      "LotScopeDayIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "average_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of average duration for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "average_duration"
        ]
      },
      "LotScopeMonthIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "average_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of average duration for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "average_duration"
        ]
      },
      "ZoneScopeNoIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "average_duration": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative average duration across all time"
          }
        },
        "required": [
          "zone_id",
          "name",
          "average_duration"
        ]
      },
      "ZoneScopeHourIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "average_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of average duration for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "average_duration"
        ]
      },
      "ZoneScopeDayIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "average_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of average duration for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "average_duration"
        ]
      },
      "ZoneScopeMonthIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "average_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of average duration for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "average_duration"
        ]
      },
      "PlaceScopeNoIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "average_duration": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative average duration across all time"
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "average_duration"
        ]
      },
      "PlaceScopeHourIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "average_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of average duration for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "average_duration"
        ]
      },
      "PlaceScopeDayIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "average_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of average duration for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "average_duration"
        ]
      },
      "PlaceScopeMonthIntervalAverageDurationResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "average_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of average duration for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "average_duration"
        ]
      },
      "LotScopeNoIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "average_duration_percentage": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative average duration percentage across all time"
          }
        },
        "required": [
          "lot_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "LotScopeHourIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "average_duration_percentage": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of average duration percentage for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "LotScopeDayIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "average_duration_percentage": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of average duration percentage for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "LotScopeMonthIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "average_duration_percentage": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of average duration percentage for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "ZoneScopeNoIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "average_duration_percentage": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative average duration percentage across all time"
          }
        },
        "required": [
          "zone_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "ZoneScopeHourIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "average_duration_percentage": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of average duration percentage for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "ZoneScopeDayIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "average_duration_percentage": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of average duration percentage for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "ZoneScopeMonthIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "average_duration_percentage": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of average duration percentage for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "PlaceScopeNoIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "average_duration_percentage": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative average duration percentage across all time"
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "PlaceScopeHourIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "average_duration_percentage": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of average duration percentage for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "PlaceScopeDayIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "average_duration_percentage": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of average duration percentage for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "PlaceScopeMonthIntervalAverageDurationPercentageResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "average_duration_percentage": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of average duration percentage for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "average_duration_percentage"
        ]
      },
      "LotScopeNoIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "total_duration": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative total duration across all time"
          }
        },
        "required": [
          "lot_id",
          "name",
          "total_duration"
        ]
      },
      "LotScopeHourIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "total_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of total duration for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "total_duration"
        ]
      },
      "LotScopeDayIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "total_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of total duration for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "total_duration"
        ]
      },
      "LotScopeMonthIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "total_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of total duration for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "total_duration"
        ]
      },
      "ZoneScopeNoIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "total_duration": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative total duration across all time"
          }
        },
        "required": [
          "zone_id",
          "name",
          "total_duration"
        ]
      },
      "ZoneScopeHourIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "total_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of total duration for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "total_duration"
        ]
      },
      "ZoneScopeDayIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "total_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of total duration for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "total_duration"
        ]
      },
      "ZoneScopeMonthIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "total_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of total duration for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "total_duration"
        ]
      },
      "PlaceScopeNoIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "total_duration": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative total duration across all time"
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "total_duration"
        ]
      },
      "PlaceScopeHourIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "total_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of total duration for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "total_duration"
        ]
      },
      "PlaceScopeDayIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "total_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of total duration for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "total_duration"
        ]
      },
      "PlaceScopeMonthIntervalTotalDurationResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "total_duration": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of total duration for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "total_duration"
        ]
      },
      "LotScopeNoIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "turnover_rate": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative turnover rate across all time"
          }
        },
        "required": [
          "lot_id",
          "name",
          "turnover_rate"
        ]
      },
      "LotScopeHourIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "turnover_rate": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of turnover rate for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "turnover_rate"
        ]
      },
      "LotScopeDayIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "turnover_rate": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of turnover rate for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "turnover_rate"
        ]
      },
      "LotScopeMonthIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "turnover_rate": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of turnover rate for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "lot_id",
          "name",
          "turnover_rate"
        ]
      },
      "ZoneScopeNoIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "turnover_rate": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative turnover rate across all time"
          }
        },
        "required": [
          "zone_id",
          "name",
          "turnover_rate"
        ]
      },
      "ZoneScopeHourIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "turnover_rate": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of turnover rate for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "turnover_rate"
        ]
      },
      "ZoneScopeDayIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "turnover_rate": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of turnover rate for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "turnover_rate"
        ]
      },
      "ZoneScopeMonthIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "turnover_rate": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of turnover rate for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "zone_id",
          "name",
          "turnover_rate"
        ]
      },
      "PlaceScopeNoIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "turnover_rate": {
            "type": "number",
            "example": 28.28,
            "description": "The cumulative turnover rate across all time"
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "turnover_rate"
        ]
      },
      "PlaceScopeHourIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "turnover_rate": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9,
              31.2,
              29.4,
              27.8,
              26.5,
              24.3,
              22.1,
              20.9,
              18.7,
              17.5,
              16.3,
              15.1,
              14.2
            ],
            "description": "List of turnover rate for each hour of the day (0 = midnight, 23 = 11PM), contains 24 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "turnover_rate"
        ]
      },
      "PlaceScopeDayIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "turnover_rate": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81
            ],
            "description": "List of turnover rate for each day of the week (0 = Sunday, 6 = Saturday), contains 7 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "turnover_rate"
        ]
      },
      "PlaceScopeMonthIntervalTurnoverRateResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "turnover_rate": {
            "example": [
              28.28,
              33.29,
              26.67,
              31.33,
              34.9,
              27.73,
              24.81,
              19.12,
              22.45,
              30.11,
              25.67,
              28.9
            ],
            "description": "List of turnover rate for each month of the year (0 = January, 11 = December), contains 12 values",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "turnover_rate"
        ]
      },
      "LotScopePeakOccupancyHourResponseDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the lot"
          },
          "name": {
            "type": "string",
            "example": "Default Lot",
            "description": "The name of the lot"
          },
          "peak_occupancy_hour": {
            "type": "number",
            "example": 14,
            "description": "The hour of the day (0-23) with the highest occupancy"
          }
        },
        "required": [
          "lot_id",
          "name",
          "peak_occupancy_hour"
        ]
      },
      "ZoneScopePeakOccupancyHourResponseDto": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the zone"
          },
          "name": {
            "type": "string",
            "example": "Zone A",
            "description": "The name of the zone"
          },
          "peak_occupancy_hour": {
            "type": "number",
            "example": 14,
            "description": "The hour of the day (0-23) with the highest occupancy"
          }
        },
        "required": [
          "zone_id",
          "name",
          "peak_occupancy_hour"
        ]
      },
      "PlaceScopePeakOccupancyHourResponseDto": {
        "type": "object",
        "properties": {
          "parking_place_id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the parking place"
          },
          "name": {
            "type": "string",
            "example": "Place A1",
            "description": "The name of the parking place"
          },
          "peak_occupancy_hour": {
            "type": "number",
            "example": 14,
            "description": "The hour of the day (0-23) with the highest occupancy"
          }
        },
        "required": [
          "parking_place_id",
          "name",
          "peak_occupancy_hour"
        ]
      },
      "NoScopePeakOccupancyHourResponseDto": {
        "type": "object",
        "properties": {
          "peak_occupancy_hour": {
            "type": "number",
            "example": 14,
            "description": "The hour of the day (0-23) with the highest occupancy",
            "nullable": true
          }
        },
        "required": [
          "peak_occupancy_hour"
        ]
      },
      "ShareableZones": {
        "type": "object",
        "properties": {}
      },
      "ShareableDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1
          },
          "max_uses": {
            "type": "number",
            "example": 5,
            "description": "Maximum number of times this weblink can be used, null means unlimited",
            "nullable": true
          },
          "used_count": {
            "type": "number",
            "example": 3,
            "description": "Number of times this token has been used"
          },
          "type": {
            "type": "string",
            "example": "weblink",
            "enum": [
              "key_invite",
              "key_log",
              "lot_whitelist",
              "qr_code",
              "weblink"
            ]
          },
          "status": {
            "type": "string",
            "example": "active",
            "enum": [
              "active",
              "expired",
              "invalid",
              "blocked",
              "depleted",
              "pending"
            ]
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "receiver_email": {
            "type": "string",
            "example": "jane.doe@example.com"
          },
          "sender_email": {
            "type": "string",
            "example": "john.doe@example.com"
          },
          "zone": {
            "example": {
              "id": 1,
              "name": "Defualt Zone"
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/ShareableZones"
              }
            ]
          },
          "license_plate": {
            "type": "string",
            "example": "DT-PLATe2"
          },
          "device_id": {
            "type": "string",
            "example": "B123456"
          },
          "url": {
            "type": "string",
            "example": "https://pms.parklio.com/weblinks/1/operation?token=abc123",
            "nullable": true,
            "description": "URL of the weblink. Null for other shareable types."
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "max_uses",
          "used_count",
          "type",
          "status",
          "start_time",
          "end_time",
          "receiver_email",
          "sender_email",
          "zone",
          "license_plate",
          "device_id",
          "url",
          "created_at",
          "updated_at"
        ]
      },
      "LotShareViewLotDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "The unique identifier of the lot",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The name of the lot",
            "example": "Default Lot"
          },
          "spot_count": {
            "type": "number",
            "description": "The total number of parking spots in the lot",
            "example": 10
          },
          "occupied_count": {
            "type": "number",
            "description": "The number of currently occupied parking spots in the lot",
            "example": 0
          }
        },
        "required": [
          "id",
          "name",
          "spot_count",
          "occupied_count"
        ]
      },
      "LotShareViewZoneDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "The unique identifier of the zone",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The name of the zone",
            "example": "Zone A"
          },
          "spot_count": {
            "type": "number",
            "description": "The total number of parking spots in the zone",
            "example": 10
          },
          "occupied_count": {
            "type": "number",
            "description": "The number of currently occupied parking spots in the zone",
            "example": 0
          }
        },
        "required": [
          "id",
          "name",
          "spot_count",
          "occupied_count"
        ]
      },
      "LotShareViewDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "The unique identifier of the lot share view",
            "example": 1
          },
          "revoked": {
            "type": "boolean",
            "description": "Whether the lot share view has been revoked and can no longer be accessed",
            "example": false
          },
          "url": {
            "type": "string",
            "description": "The public URL used to access the lot share view without authentication"
          },
          "lot_share_view_type": {
            "type": "string",
            "description": "The type of view rendered when the share link is opened",
            "enum": [
              "counts_only",
              "live_camera",
              "vector_map"
            ],
            "example": "counts_only"
          },
          "lot": {
            "description": "The lot this share view belongs to",
            "allOf": [
              {
                "$ref": "#/components/schemas/LotShareViewLotDto"
              }
            ]
          },
          "zones": {
            "description": "The zones included in this share view",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LotShareViewZoneDto"
            }
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "description": "The date and time the lot share view was created",
            "example": "2026-01-15T09:30:00.000Z"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "description": "The date and time the lot share view was last updated",
            "example": "2026-01-15T09:30:00.000Z"
          }
        },
        "required": [
          "id",
          "revoked",
          "url",
          "lot_share_view_type",
          "lot",
          "zones",
          "created_at",
          "updated_at"
        ]
      },
      "AssignZonesToLotShareViewDto": {
        "type": "object",
        "properties": {
          "ids": {
            "description": "The IDs of the zones to assign to this lot share view.",
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "CreateLotShareViewDto": {
        "type": "object",
        "properties": {
          "lot_id": {
            "type": "number",
            "description": "The ID of the lot this lot share view belongs to.",
            "example": 1
          },
          "zone_ids": {
            "description": "The IDs of the zones to include in this lot share view. At least one zone must be provided.",
            "example": [
              1,
              2
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "lot_share_view_type": {
            "type": "string",
            "description": "The type of view rendered when the share link is opened. Determines what information is displayed to the public.",
            "example": "counts_only",
            "enum": [
              "counts_only",
              "live_camera",
              "vector_map"
            ]
          }
        },
        "required": [
          "lot_id",
          "lot_share_view_type"
        ]
      },
      "UpdateLotShareViewDto": {
        "type": "object",
        "properties": {
          "revoked": {
            "type": "boolean",
            "description": "Set to true to revoke the lot share view, immediately blocking further access. Set to false to restore access to a previously revoked lot share view.",
            "example": true
          }
        }
      },
      "ReplaceZonesForLotShareViewDto": {
        "type": "object",
        "properties": {
          "ids": {
            "description": "The IDs of the zones to assign to this lot share view, replacing any previously assigned zones.",
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "UnassignZonesToLotShareViewDto": {
        "type": "object",
        "properties": {
          "ids": {
            "description": "The IDs of the zones to unassign from this lot share view.",
            "example": [
              1,
              2,
              3
            ],
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "RgbDisplayRuleDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the RGB display rule."
          },
          "name": {
            "type": "string",
            "example": "Low availability",
            "description": "The name of the rule used to identify it in the list."
          },
          "operator": {
            "type": "string",
            "enum": [
              "eq",
              "lt",
              "gt",
              "between"
            ],
            "example": "gt",
            "description": "The comparison operator used to evaluate the rule. Supported values: `eq` (equal), `lt` (less than), `gt` (greater than), `between` (inclusive range)."
          },
          "occupied_value": {
            "type": "number",
            "example": 5,
            "description": "The value to compare the occupied spot count against. When operator is `between`, this represents the lower bound of the range."
          },
          "occupied_value_to": {
            "type": "number",
            "example": 10,
            "nullable": true,
            "description": "The upper bound value used only when operator is `between`.Null for all other operators."
          },
          "display_text": {
            "type": "string",
            "example": "{free} FREE",
            "description": "The text to display when this rule matches. Supports placeholders: `{free}` (current free spots) and `{total}` (total zone capacity)."
          },
          "order": {
            "type": "number",
            "example": 0,
            "description": "The position of this rule in the evaluation order. Rules are evaluated top-to-bottom and the first match wins."
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "nullable": true,
            "description": "The time from which this rule is active. If null the rule is active at all times. Must be used together with `endTime`."
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "nullable": true,
            "description": "The time until which this rule is active. If null the rule is active at all times. Must be used together with `startTime`."
          }
        },
        "required": [
          "id",
          "name",
          "operator",
          "occupied_value",
          "occupied_value_to",
          "display_text",
          "order",
          "start_time",
          "end_time"
        ]
      },
      "RgbDisplayDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the RGB display."
          },
          "name": {
            "type": "string",
            "example": "RGB Display name",
            "description": "The display name of the RGB display. Must be between 3 and 255 characters."
          },
          "status": {
            "type": "string",
            "example": "online",
            "enum": [
              "offline",
              "online"
            ],
            "description": "The current connectivity status of the RGB display."
          },
          "last_seen": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "nullable": true,
            "description": "The last time the rgb display was seen"
          },
          "total_occupied_count": {
            "type": "number",
            "example": 12,
            "description": "The total number of currently occupied spots, summed across all of this RGB display's source zones."
          },
          "total_spot_count": {
            "type": "number",
            "example": 20,
            "description": "The total number of parking spots, summed across all of this RGB display's source zones."
          },
          "serial_number": {
            "type": "string",
            "example": "RGB Display serial number",
            "description": "The serial number of the RGB display. Unique per device, used to identify and distinguish individual units."
          },
          "default_message": {
            "type": "string",
            "example": "{free} FREE",
            "nullable": true,
            "description": "The default message shown on the display when no conditional rule matches. Supports placeholders: `{free}` (current free spots) and `{total}` (total zone capacity)."
          },
          "zone_id": {
            "type": "number",
            "example": 1,
            "nullable": true,
            "description": "The ID of the zone this RGB display is associated with."
          },
          "lot_id": {
            "type": "number",
            "example": 1,
            "nullable": true,
            "description": "The ID of the lot this RGB display is associated with."
          },
          "rules": {
            "description": "The list of conditional rules associated with this display, ordered by evaluation priority. Rules are evaluated top-to-bottom and the first match wins. Falls back to `defaultMessage` if no rule matches.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RgbDisplayRuleDto"
            }
          },
          "source_zones": {
            "description": "The list of zones this display sources occupancy counts from. Used to calculate the values shown on the display via placeholders.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RgbDisplayRuleDto"
            }
          },
          "created_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp of when the RGB display record was created."
          },
          "updated_at": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "Timestamp of when the RGB display record was last updated."
          }
        },
        "required": [
          "id",
          "name",
          "status",
          "last_seen",
          "total_occupied_count",
          "total_spot_count",
          "serial_number",
          "default_message",
          "zone_id",
          "lot_id",
          "rules",
          "source_zones",
          "created_at",
          "updated_at"
        ]
      },
      "AssignRgbDisplayDto": {
        "type": "object",
        "properties": {
          "serial_number": {
            "type": "string",
            "example": "RGB Display serial number",
            "description": "The display name of the RGB display. Must be between 3 and 255 characters."
          },
          "name": {
            "type": "string",
            "example": "RGB Display name",
            "description": "The display name of the RGB display. Must be between 3 and 255 characters."
          },
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The ID of the zone this RGB display is associated with."
          },
          "default_message": {
            "type": "string",
            "example": "{free} FREE",
            "nullable": true,
            "description": "The default message shown on the display when no conditional rule matches. Supports placeholders: `{free}` (current free spots) and `{total}` (total zone capacity)."
          }
        },
        "required": [
          "serial_number",
          "name",
          "zone_id",
          "default_message"
        ]
      },
      "AssignSourceZonesToRgbDisplayDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              1,
              2,
              3
            ],
            "description": "The list of zone ids to assign to this RGB display as source zones.",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "SimulateRgbDisplayDto": {
        "type": "object",
        "properties": {
          "occupied_spots": {
            "type": "number",
            "example": 5,
            "description": "The number of occupied spots to simulate. This value is evaluated against the display's rules, and the first matching rule determines the output message."
          },
          "current_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "description": "The point in time to simulate the rule evaluation at. Used to check whether time-windowed rules (`startTime`/`endTime`) would be active at that moment."
          }
        },
        "required": [
          "occupied_spots",
          "current_time"
        ]
      },
      "RgbDisplayOutputDto": {
        "type": "object",
        "properties": {
          "spots": {
            "type": "string",
            "example": "10"
          }
        },
        "required": [
          "spots"
        ]
      },
      "UpdateRgbDisplayDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "RGB Display name",
            "description": "The display name of the RGB display. Must be between 3 and 255 characters."
          },
          "default_message": {
            "type": "string",
            "example": "{free} FREE",
            "description": "Optional default message shown on the display when no conditional rule matches. Maximum length is 255 characters. Supports placeholders: `{free}` (current free spots) and `{total}` (total zone capacity)."
          },
          "zone_id": {
            "type": "number",
            "example": 1,
            "description": "The ID of the zone this RGB display is associated with."
          }
        },
        "required": [
          "name",
          "default_message",
          "zone_id"
        ]
      },
      "UnassignSourceZonesFromRgbDisplaysDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              1,
              2,
              3
            ],
            "description": "The list of zone ids to unassign from this RGB display's source zones.",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "ReplaceRgbDisplayDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "RGB Display name",
            "description": "The display name of the RGB display. Must be between 3 and 255 characters."
          },
          "source_zone_ids": {
            "example": [
              1,
              2,
              3
            ],
            "description": "The list of zone ids that will fully replace this RGB display's current source zones.",
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "default_message": {
            "type": "string",
            "example": "{free} FREE",
            "description": "The default message shown on the display when no conditional rule matches. Supports placeholders: `{free}` (current free spots) and `{total}` (total zone capacity)."
          }
        },
        "required": [
          "name",
          "source_zone_ids",
          "default_message"
        ]
      },
      "ReplaceSourceZonesToRgbDisplayDto": {
        "type": "object",
        "properties": {
          "ids": {
            "example": [
              1,
              2,
              3
            ],
            "description": "The list of zone ids that will fully replace this RGB display's current source zones.",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "UpdateRgbDisplayRuleDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Low availability",
            "description": "The name of the rule used to identify it in the list."
          },
          "operator": {
            "type": "string",
            "enum": [
              "eq",
              "lt",
              "gt",
              "between"
            ],
            "example": "gt",
            "description": "The comparison operator used to evaluate the rule against the available spot count. Supported values: `eq` (equal), `lt` (less than), `gt` (greater than), `between` (inclusive range)."
          },
          "occupied_value": {
            "type": "number",
            "example": 5,
            "description": "The value to compare the occupied spot count against. When operator is `between`, this represents the lower bound of the range."
          },
          "occupied_value_to": {
            "type": "number",
            "example": 10,
            "nullable": true,
            "description": "The upper bound occupied value used only when operator is `between`. Required when operator is `between`, ignored for all other operators."
          },
          "display_text": {
            "type": "string",
            "example": "{free} FREE",
            "description": "The text to display when this rule matches. Supports placeholders: `{free}` (current free spots) and `{total}` (total zone capacity)."
          },
          "start_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "nullable": true,
            "description": "The time from which this rule is active. If null the rule is active at all times. Must be used together with `endTime`."
          },
          "end_time": {
            "format": "date-time",
            "type": "string",
            "example": "2026-01-15T09:30:00.000Z",
            "nullable": true,
            "description": "The time until which this rule is active. If null the rule is active at all times. Must be used together with `startTime`."
          },
          "order": {
            "type": "number",
            "example": 0,
            "description": "The position of this rule in the evaluation order. Rules are evaluated top-to-bottom and the first match wins. If omitted, the existing order is preserved."
          }
        }
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "Authentication & account",
      "tags": [
        "auth",
        "api tokens",
        "accounts",
        "account users"
      ]
    },
    {
      "name": "Sites",
      "tags": [
        "lots",
        "zones",
        "lot share views"
      ]
    },
    {
      "name": "Devices & control",
      "tags": [
        "products",
        "gateways",
        "lpr cameras",
        "rotaries"
      ]
    },
    {
      "name": "Access sharing",
      "tags": [
        "operation tokens",
        "operation keys",
        "key logs",
        "key invitations",
        "weblinks",
        "qr codes"
      ]
    },
    {
      "name": "License plates",
      "tags": [
        "members",
        "groups",
        "lot whitelists",
        "plate readings",
        "license plate alerts"
      ]
    },
    {
      "name": "Sessions & payments",
      "tags": [
        "sessions",
        "tariffs",
        "terminals"
      ]
    },
    {
      "name": "Occupancy & detection",
      "tags": [
        "parking places",
        "parking place changes",
        "parking analytics",
        "proactive alerts",
        "rgb displays",
        "rgb display rules",
        "parking detection cameras",
        "parking detection gateways",
        "violation zones",
        "violation zone events"
      ]
    },
    {
      "name": "Logs & reporting",
      "tags": [
        "logs",
        "statistics"
      ]
    }
  ]
}