openapi: 3.1.0
x-stoplight:
  id: de1e9aylykjys
info:
  title: Wunder Operations API
  description: Wunder Mobility API for Operators
  version: 1.0.0
  contact:
    name: Wunder Mobility GmbH
    url: 'https://wundermobility.com'
    email: info@wundermobility.com
servers:
  - url: 'https://{environment}.api.gourban.services/v1/{tenant}/back'
    description: Wunder Operations API
    variables:
      environment:
        default: go
        enum:
          - go
          - go-staging
      tenant:
        default: demo
        description: Tenant identifier of your system. Usually 8 characters.
tags:
  - name: Customers
    description: Customer endpoints
  - name: Groups
    description: User Group/Business account endpoints
  - name: Rentals
    description: Rentals endpoints
  - name: Bookings
    description: Bookings endpoints
  - name: Invoices
    description: Invoices endpoints
  - name: Vehicles
    description: Vehicles endpoints
  - name: Vehicle Actions
    description: Vehicle Actions endpoints
  - name: Vehicle Commands
    description: Vehicle Commands endpoints
  - name: Vehicle Action Management
    description: Vehicle Action Management endpoints
  - name: Vehicle Maintenance
    description: Vehicle Maintenance endpoints
  - name: Analytics
    description: Analytics
  - name: Business Units
    description: Business unit management endpoints
  - name: Pricing Bundles
    description: Pricing bundle management endpoints
  - name: Task Categories
    description: Task category management endpoints
paths:
  '/vehicles/execute-action/{actionId}':
    post:
      summary: 'POST vehicles/execute-action/{actionId}'
      operationId: executeAction
      parameters:
        - name: actionId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: vehicleId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: vehicleCode
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Actions
  '/vehicles/execute-activity/{activityId}':
    post:
      summary: 'POST vehicles/execute-activity/{activityId}'
      operationId: executeActivity
      parameters:
        - name: activityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: vehicleId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: vehicleCode
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Actions
  /vehicles/execute-command:
    post:
      summary: POST vehicles/execute-command
      operationId: executeCommand
      description: |
        Executes a command on a physical vehicle. This involves communication with the vehicle.
        
        Either `vehicleId` or `vehicleCode` URL parameters must be set.
        
        Payload must contain either `command` for predefined commands or all of `command`, `customCommandName` and `namedParameters` for user defined custom commands.
      parameters:
        - name: process
          in: query
          required: true
          schema:
            type: string
            description: |-
              defines if the command should be executed synchronously or asynchronously
              SYNC: the command will wait until the vehicle responds and returns if the command was successful/failed
              ASYNC: ensures that the command is sent to the vehicle but does not await a respond
            enum:
              - ASYNC
              - SYNC
        - name: return
          in: query
          required: true
          schema:
            type: string
            enum:
              - DATA
              - STATUS
              - NONE
        - name: vehicleId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: vehicleCode
          in: query
          required: false
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleCommandRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCommandResponse'
      tags:
        - Vehicle Commands
  '/vehicles/execute-composite-activity/{compositeActivityId}':
    post:
      summary: 'POST vehicles/execute-composite-activity/{compositeActivityId}'
      operationId: executeCompositeAction
      parameters:
        - name: compositeActivityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: vehicleId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: vehicleCode
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Actions
  '/vehicles/{id}/command':
    post:
      summary: 'POST vehicles/{id}/command'
      deprecated: true
      operationId: executeVehicleCommand
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: process
          in: query
          required: true
          schema:
            type: string
            enum:
              - ASYNC
              - SYNC
        - name: return
          in: query
          required: true
          schema:
            type: string
            enum:
              - DATA
              - STATUS
              - NONE
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleCommandRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCommandResponse'
      tags:
        - Vehicle Commands
  '/vehicles/{id}/command/debug':
    post:
      summary: 'POST vehicles/{id}/command/debug'
      operationId: executeDebugCommand
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
      tags:
        - Vehicle Actions
  /vehicles-management/actions:
    get:
      summary: GET vehicles-management/actions
      operationId: getAllVehicleActionsForManagement
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleAction'
      tags:
        - Vehicle Action Management
  /vehicles/maintenance:
    post:
      summary: POST vehicles/maintenance
      deprecated: true
      operationId: executeVehicleMaintenanceActions
      parameters:
        - name: settingKey
          in: query
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: code
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Maintenance
  /vehicles/maintenance/approach:
    post:
      summary: POST vehicles/maintenance/approach
      deprecated: true
      operationId: maintenanceApproachVehicle
      parameters:
        - name: id
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: code
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Maintenance
  /vehicles/maintenance/calculate-route:
    post:
      summary: POST vehicles/maintenance/calculate-route
      operationId: maintenanceCalculateRoute
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CalculateRouteRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
      tags:
        - Vehicle Maintenance
  /vehicles/maintenance/close:
    post:
      summary: POST vehicles/maintenance/close
      operationId: maintenanceCloseVehicle
      parameters:
        - name: id
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: code
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Maintenance
  /vehicles/maintenance/deploy:
    post:
      summary: POST vehicles/maintenance/deploy
      deprecated: true
      operationId: maintenanceDeployVehicle
      parameters:
        - name: id
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: code
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Maintenance
  /vehicles/maintenance/leave:
    post:
      summary: POST vehicles/maintenance/leave
      deprecated: true
      operationId: maintenanceLeaveVehicle
      parameters:
        - name: id
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: code
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Maintenance
  /rewards:
    get:
      summary: GET rewards
      operationId: findAllRewards
      parameters:
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Reward'
      tags:
        - Rewards
    post:
      summary: POST rewards
      operationId: create
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Reward'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Reward'
      tags:
        - Rewards
  '/rewards/{id}':
    get:
      summary: 'GET rewards/{id}'
      operationId: getRewardById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Reward'
      tags:
        - Rewards
    patch:
      summary: 'PATCH rewards/{id}'
      operationId: updateById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Reward'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Reward'
      tags:
        - Rewards
    delete:
      summary: 'DELETE rewards/{id}'
      operationId: deleteRewardById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Rewards
  /groups:
    post:
      summary: POST groups
      operationId: createUserGroup
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserGroup'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserGroup'
      tags:
        - Groups
    get:
      summary: GET groups
      operationId: findByPredicate
      parameters:
        - name: name
          in: query
          required: false
          schema:
            type: string
        - name: code
          in: query
          required: false
          schema:
            type: string
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: searchText
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserGroup'
      tags:
        - Groups
  '/groups/{groupId}/voucher':
    post:
      summary: 'POST groups/{groupId}/voucher'
      description: >-
        Deprecated — use /groups/{groupId}/apply-vouchers instead, which returns all created vouchers.
      operationId: createCustomerCareVoucherForUserGroup
      deprecated: true
      parameters:
        - name: groupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: balanceId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerCareVoucherTemplate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Voucher'
      tags:
        - Groups
  '/groups/{groupId}/apply-vouchers':
    post:
      summary: 'POST groups/{groupId}/apply-vouchers'
      description: >-
        Apply vouchers to a user group from a customer care voucherable. Returns all vouchers
        created from the voucherable's benefits. A single voucherable may produce multiple
        vouchers when it has multiple benefits configured.
      operationId: applyVouchersForUserGroup
      parameters:
        - name: groupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: balanceId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerCareVoucherTemplate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Voucher'
      tags:
        - Groups
  '/groups/{id}/payment-sources':
    get:
      summary: 'GET groups/{id}/payment-sources'
      operationId: findUserGroupPaymentSources
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PaymentSource'
      tags:
        - Groups
  '/groups/{userGroupId}':
    patch:
      summary: 'PATCH groups/{userGroupId}'
      operationId: update
      parameters:
        - name: userGroupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserGroup'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserGroup'
      tags:
        - Groups
    delete:
      summary: 'DELETE groups/{userGroupId}'
      operationId: deleteUserGroupById
      parameters:
        - name: userGroupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Groups
    get:
      summary: get user group by id
      operationId: getUserGroupById
      parameters:
        - name: userGroupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserGroup'
      tags:
        - Groups
  '/groups/{userGroupId}/add-member':
    post:
      summary: Add a single member to a user group
      operationId: addMember
      parameters:
        - name: userGroupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUserGroupMember'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserGroupMember'
        '404':
          description: User group or user not found
        '406':
          description: Maximum number of group memberships for this user reached
      tags:
        - Groups
  '/groups/{userGroupId}/add-members':
    post:
      summary: 'POST groups/{userGroupId}/add-members'
      operationId: addMembers
      parameters:
        - name: userGroupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserGroupMembers'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserGroupMembersOperationResponse'
      tags:
        - Groups
  '/groups/{userGroupId}/create-join-requests':
    post:
      summary: 'POST groups/{userGroupId}/create-join-requests'
      operationId: createJoinRequestsForUsers
      parameters:
        - name: userGroupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddMembers'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GUserGroupRequest'
      tags:
        - Groups
  '/groups/{userGroupId}/remove-members':
    post:
      summary: 'POST groups/{userGroupId}/remove-members'
      operationId: removeMembers
      parameters:
        - name: userGroupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserGroupMembers'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserGroupMembersOperationResponse'
      tags:
        - Groups
  '/groups/{userGroupId}/members/{userId}':
    get:
      summary: 'GET groups/{userGroupId}/members/{userId}'
      operationId: viewMembership
      parameters:
        - name: userGroupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: userId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/UserGroupMember'
      tags:
        - Groups
    put:
      summary: 'PUT groups/{userGroupId}/members/{userId}'
      operationId: updateMembership
      parameters:
        - name: userGroupId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: userId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserGroupMemberUpdateFull'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserGroupMember'
      tags:
        - Groups
  '/groups/{id}/billing-summary':
    get:
      summary: 'GET /groups/{id}/billing-summary'
      operationId: showUserGroupBillingSummary
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingSummary'
      tags:
        - Groups
  /customers:
    post:
      summary: POST customers
      operationId: createUser
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUserByAdmin'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GUser'
      tags:
        - Customers
    get:
      summary: GET customers
      operationId: findUsersByPredicate
      description: |-
        Returns information with all users that satisfy the search criteria specified with the parameters.

        `USER_LIST_READ` permission is needed to retrieve the information.
      parameters:
        - name: branchId
          description: branchId is used to filter the users based on the branches for which they accepted Terms and Conditions.
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: searchText
          description: 'searchText is used to find the users. Can be any number of terms separated by whitespace. These terms will be compared against user''s first name, last name, phone number, email and user ID.'
          in: query
          required: false
          schema:
            type: string
        - name: includeChildBranches
          description: includeChildBranches is used to include users from child branches of the specified branch.
          in: query
          required: false
          schema:
            type: boolean
            default: true
        - name: signupSettled
          description: 'Filter customers by signup fee payment status. true = customers who have paid the signup fee (have signup vouchers), false = customers who have NOT paid the signup fee (no signup vouchers), null/omitted = no filtering (returns all customers).'
          in: query
          required: false
          schema:
            type: boolean
            nullable: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomerListDTO'
      tags:
        - Customers
  /customers?simple:
    get:
      summary: GET /customers?simple
      operationId: findUsersSimple
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserSimple'
      tags:
        - Customers
      parameters:
        - schema:
            type: string
          in: query
          name: searchText
          description: 'searchText is used to find the users. Can be any number of terms separated by whitespace. These terms will be compared against user''s first name, last name, phone number and email.'
        - schema:
            type: string
          in: query
          name: userGroupId
          description: restrict results to users in a specific user group. The user needs permissions `USER_GROUP_MEMBERS_READ` when using this parameter.
        - schema:
            type: array
            items:
              type: string
            enum:
              - NOT_BLOCKED
              - BLOCKED_UNKNOWN
              - BLOCKED_BY_ADMIN
              - BLOCKED_BY_ADMINDELETE
              - GROUP_DELETED
          in: query
          name: excludeBlockState
          description: Only users with the specified block state will be returned. It can be one block state or multiple block states separated by comma. If the parameter is omitted it returns non-deleted users.
        - schema:
            type: boolean
          in: query
          name: excludeImpersonatedUsers
          description: Whether to exclude impersonated MaaS users from the results
        - schema:
            type: boolean
          in: query
          name: hasUserGroup
          description: Whether to include only users that are part of a user group. Do not set this parameter if user group membership should be ignored.
        - schema:
            type: boolean
          in: query
          name: excludeBlocked
          description: 'Whether to exclude blocked users from the results completely, so only return non blocked users. Takes priority over the ''excludeBlockState'' parameter.'
        - schema:
            type: boolean
          in: query
          name: includeOperatorsOnly
          description: 'If set to ''true'' it will return only operator users, otherwise returns all users.'
      description: |-
        Returns simplified information with all users that satisfy the searchText criteria.

        `USER_LIST_READ` permission is needed to retrieve the information.
    parameters: [ ]
  /customers/api-client:
    post:
      summary: POST customers/api-client
      operationId: createApiClient
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateApiClient'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiClient'
      tags:
        - Customers
  /customers/current:
    get:
      summary: GET customers/current
      operationId: getCurrentUser
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDetails'
      tags:
        - Customers
    patch:
      summary: PATCH customers/current
      operationId: updateDashboardPropertiesOfCurrentUser
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GUser'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GUser'
      tags:
        - Customers
  /customers/export:
    get:
      summary: GET customers/export
      operationId: getCustomersForExport
      parameters:
        - name: yearMonth
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/YearMonth'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomerExportDTO'
      tags:
        - Customers
  /customers/impersonate:
    post:
      summary: POST customers/impersonate
      deprecated: true
      description: Deprecated in favor of POST customers (createMaaSUser) of MaaS API
      operationId: createMaaSUser
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddMaaSUser'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GUser'
      tags:
        - Customers
  /customers/logout:
    patch:
      summary: PATCH customers/logout
      operationId: invalidateRefreshTokensForGivenRole
      parameters:
        - name: roleId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/reset/{email}':
    post:
      summary: 'POST customers/reset/{email}'
      operationId: resetPassword
      parameters:
        - name: email
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{customerId}/balances':
    get:
      summary: 'GET customers/{customerId}/balances'
      deprecated: true
      operationId: findBalancesByGUser
      parameters:
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Balance'
      tags:
        - Customers
  '/customers/{customerId}/balances/settle':
    post:
      summary: 'POST customers/{customerId}/balances/settle'
      deprecated: true
      operationId: settleBalanceByCustomerId
      parameters:
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: balanceId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{customerId}/balances/{balanceId}':
    get:
      summary: 'GET customers/{customerId}/balances/{balanceId}'
      deprecated: true
      operationId: findBalanceUpdatesByGUserAndBalance
      parameters:
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: balanceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BalanceUpdate'
      tags:
        - Customers
  '/customers/{customerId}/remove-sign-in-method':
    post:
      summary: 'POST customers/{customerId}/remove-sign-in-method'
      operationId: removeSignInMethod
      parameters:
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemoveSignInMethod'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{id}':
    get:
      summary: 'GET customers/{id}'
      operationId: findCustomersById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GUser'
      tags:
        - Customers
    patch:
      summary: 'PATCH customers/{id}'
      operationId: updateUserById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GUser'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GUser'
      tags:
        - Customers
    delete:
      summary: 'DELETE customers/{id}'
      operationId: deleteUser
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeleteUser'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{id}/add-email-sign-in-method':
    post:
      summary: 'POST customers/{id}/add-email-sign-in-method'
      operationId: addEmailSignInMethod
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddEmailSignInMethod'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{id}/add-phone-sign-in-method':
    post:
      summary: 'POST customers/{id}/add-phone-sign-in-method'
      operationId: addPhoneSignInMethod
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: Accept-Language
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddPhoneNumberSignInMethod'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{id}/add-email-code-sign-in-method':
    post:
      summary: 'POST customers/{id}/add-email-code-sign-in-method'
      operationId: addEmailCodeSignInMethod
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddEmailCodeSignInMethod'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{id}/details':
    get:
      summary: 'GET customers/{id}/details'
      operationId: findUserDetailsById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDetails'
      tags:
        - Customers
  '/customers/{id}/groups':
    get:
      summary: 'GET customers/{id}/groups'
      operationId: findUserGroupsById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserGroupsOwnerMember'
      tags:
        - Customers
  '/customers/{id}/logout':
    patch:
      summary: 'PATCH customers/{id}/logout'
      operationId: invalidateRefreshToken
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvalidateRefreshTokenRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{id}/mfa':
    delete:
      summary: 'DELETE customers/{id}/mfa'
      operationId: resetUserMfa
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{id}/name-mismatch-label':
    delete:
      summary: 'DELETE customers/{id}/name-mismatch-label'
      operationId: removeNameMismatchLabel
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{id}/password-reset-email':
    post:
      summary: 'POST customers/{id}/password-reset-email'
      operationId: sendResetPasswordEmail
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  '/customers/{id}/payment-sources':
    get:
      summary: 'GET customers/{id}/payment-sources'
      operationId: findUserPaymentSources
      description: Returns all payment sources the executing user has the permission to see.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PaymentSource'
      tags:
        - Customers
  '/customers/{id}/refresh-tokens':
    get:
      summary: 'GET customers/{id}/refresh-tokens'
      operationId: getUserRefreshTokens
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RefreshToken'
      tags:
        - Customers
  '/customers/{userId}/tags':
    put:
      summary: 'PUT customers/{userId}/tags'
      operationId: updateTags
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/Tag'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GUser'
      tags:
        - Customers
  '/customers/{userId}/voucher':
    post:
      summary: 'POST customers/{userId}/voucher'
      description: >-
        Deprecated — use /customers/{userId}/apply-vouchers instead, which returns all created vouchers.
      operationId: createVoucherForUser
      deprecated: true
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: signup
          in: query
          required: false
          schema:
            type: boolean
        - name: balanceId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerCareVoucherTemplate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Voucher'
      tags:
        - Customers
  '/customers/{userId}/apply-vouchers':
    post:
      summary: 'POST customers/{userId}/apply-vouchers'
      description: >-
        Apply vouchers to a user from a customer care voucherable. Returns all vouchers
        created from the voucherable's benefits. A single voucherable may produce multiple
        vouchers when it has multiple benefits configured.
      operationId: applyVouchersForUser
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: signup
          in: query
          required: false
          schema:
            type: boolean
        - name: balanceId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerCareVoucherTemplate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Voucher'
      tags:
        - Customers
  '/customers/{id}/accept-terms-and-conditions':
    post:
      summary: 'POST customers/{id}/accept-terms-and-conditions'
      operationId: acceptTermsAndConditionsForCustomerOnBranch
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: tacId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Customers
  /resources/messages-management:
    post:
      summary: POST resources/messages-management
      operationId: createMessageResource
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageResource'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageResource'
      tags:
        - Resources
  /resources/messages-management/defaults:
    get:
      summary: GET resources/messages-management/defaults
      operationId: getDefaultMessageResources
      parameters:
        - name: basename
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MessageResource'
      tags:
        - Resources
  /resources/messages-management/languages:
    get:
      summary: GET resources/messages-management/languages
      operationId: getLocales
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MessageResource'
      tags:
        - Resources
    post:
      summary: POST resources/messages-management/languages
      operationId: addLocale
      parameters:
        - name: locale
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Locale'
        - name: area
          in: query
          required: false
          deprecated: true
          description: Deprecated, has no affect anymore, defaulted to CORE internally
          schema:
            type: string
            enum:
              - APP
              - DASHBOARD
              - CORE
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Resources
    delete:
      summary: DELETE resources/messages-management/languages
      operationId: deleteLocale
      parameters:
        - name: locale
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Locale'
        - name: area
          in: query
          required: true
          schema:
            type: string
            enum:
              - APP
              - DASHBOARD
              - CORE
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Resources
  /resources/messages-management/reload:
    post:
      summary: POST resources/messages-management/reload
      operationId: triggerMessagesReload
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Resources
  /resources/messages-management/untranslated:
    get:
      summary: GET resources/messages-management/untranslated
      operationId: getEmptyTranslations
      parameters:
        - name: locale
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Locale'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
      tags:
        - Resources
  '/resources/messages-management/{id}':
    get:
      summary: 'GET resources/messages-management/{id}'
      operationId: getMessageResourceById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageResource'
      tags:
        - Resources
    put:
      summary: 'PUT resources/messages-management/{id}'
      operationId: updateMessageResource
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageResource'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageResource'
      tags:
        - Resources
    delete:
      summary: 'DELETE resources/messages-management/{id}'
      operationId: deleteMessageResource
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Resources
  /resources/messages-management/import-csv:
    post:
      summary: POST resources/messages-management/import-csv
      operationId: importMessageResourcesFromCsv
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
              properties:
                file:
                  type: string
                  format: binary
                  description: |
                    CSV file containing message resources

                    The file is expected to have the columns
                     - code
                     - area

                    and additional columns for every language containing the desired translation
                    fallback messages should be in a column with language code 'und' (undefined).
      responses:
        '200':
          description: Successfully imported message resources
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageResourceCsvImportResult'
      tags:
        - Resources
  /invoices:
    get:
      summary: GET invoices
      operationId: findAllInvoices
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: balanceId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: chargeId
          in: query
          required: false
          schema:
            type: string
        - name: invoiceId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: guser.firstName
          in: query
          required: false
          schema:
            type: string
        - name: invoiceType
          in: query
          required: false
          schema:
            type: string
            enum:
              - REGULAR
              - BUSINESS
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/InvoiceListDTO'
      tags:
        - Invoices
  /invoices/overview:
    get:
      summary: GET invoices/overview
      operationId: getInvoiceOverview
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: start
          in: query
          required: false
          schema:
            type: string
            format: date-time
            default: '1970-01-01T00:00:00Z'
        - name: end
          in: query
          required: false
          description: Defaulted to current time if missing
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceOverview'
      tags:
        - Invoices
  /invoices/reports:
    get:
      summary: GET invoices/reports
      operationId: generateInvoiceStatementReport
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: yearMonth
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/YearMonth'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/InvoiceStatementReportDTO'
      tags:
        - Invoices
  '/invoices/{invoiceId}':
    patch:
      summary: 'PATCH invoices/{invoiceId}'
      operationId: patchLineItemInvoice
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditLineItemInvoice'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LineItemInvoice'
      tags:
        - Invoices
    get:
      summary: 'GET invoices/{invoiceId}'
      operationId: findInvoicesById
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LineItemInvoice'
      tags:
        - Invoices
  '/invoices/{invoiceId}/line-items':
    get:
      summary: 'GET invoices/{invoiceId}/line-items'
      operationId: listInvoiceLineItemsByInvoiceId
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: bookingId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: rentalId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LineItem'
      tags:
        - Invoices
  '/invoices/{invoiceId}/line-items/{lineItemId}':
    delete:
      summary: 'DELETE invoices/{invoiceId}/line-items/{lineItemId}'
      operationId: deleteInvoiceLineItemByInvoiceId
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: lineItemId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: NO CONTENT
      tags:
        - Invoices
  '/invoices/{invoiceId}/bill':
    post:
      summary: 'POST invoices/{invoiceId}/bill'
      operationId: billInvoice
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DebugBillInvoiceRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Invoices
  '/invoices/{invoiceId}/download':
    get:
      summary: 'GET invoices/{invoiceId}/download'
      operationId: downloadInvoice
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: string
                format: url
      tags:
        - Invoices
  '/invoices/{invoiceId}/line-item/{lineItemId}':
    patch:
      summary: 'PATCH invoices/{invoiceId}/line-item/{lineItemId}'
      operationId: patchLineItemOfInvoice
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: lineItemId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUpdateLineItem'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LineItemInvoice'
      tags:
        - Invoices
  '/invoices/{invoiceId}/refund':
    post:
      summary: 'POST invoices/{invoiceId}/refund'
      operationId: refundInvoice
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInvoiceRefund'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Invoices
  '/invoices/{invoiceId}/resend':
    post:
      summary: 'POST invoices/{invoiceId}/resend'
      operationId: resendInvoice
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: mailMessage
          in: query
          required: true
          schema:
            type: string
        - name: notificationChannel
          in: query
          required: false
          schema:
            type: string
            enum:
              - SMS
              - EMAIL
              - PUSH
              - SLACK
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Invoices
  '/invoices/{invoiceId}/set-paid-externally':
    post:
      summary: 'POST invoices/{invoiceId}/set-paid-externally'
      operationId: setPaidExternally
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
      tags:
        - Invoices
  '/invoices/{invoiceId}/mark-as-lost':
    post:
      summary: 'POST invoices/{invoiceId}/mark-as-lost'
      operationId: markAsLost
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
      tags:
        - Invoices
  '/invoices/{invoiceId}/mark-for-collection':
    post:
      summary: 'POST invoices/{invoiceId}/mark-for-collection'
      operationId: markForCollection
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
      tags:
        - Invoices
  /invoices/line-item-templates:
    get:
      summary: GET invoice line item templates
      operationId: findAllInvoiceLineItemTemplates
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/InvoiceLineItemTemplate'
      tags:
        - Invoices
  /tasks:
    get:
      summary: GET tasks
      operationId: findAllTasks
      description: '`TASK_LIST` permission is needed to perform this action.'
      parameters:
        - name: branchId
          description: branchId is used to filter tasks by branch on which the tasks have been assigned when creating
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildBranches
          description: includeChildBranches is used to include users from child branches of the specified branch.
          in: query
          required: false
          schema:
            type: boolean
        - name: assignedTo.firstLastName
          description: filter for first and last name of assignee
          in: query
          required: false
          schema:
            type: string
        - name: searchText
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Task'
      tags:
        - Tasks
    post:
      summary: POST tasks
      operationId: createTask
      description: |
        Creates a new task. 
        
        **Permission:** `TASK_CREATE` is needed to perform this action.

        **File Linking:** Files can be linked to the task by providing file IDs in `taskData.files` array.
        Each file must be pre-uploaded via POST /files and the user must have permission to access it.
        Response includes linked files with full details and download links.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Task'
        required: true
      responses:
        '201':
          description: Task created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '400':
          description: Invalid request - validation failed
        '403':
          description: Insufficient permissions or file access denied
        '404':
          description: Referenced file or branch not found
      tags:
        - Tasks
  /tasks?forAllVehiclesByBranch=true:
    post:
      deprecated: true
      summary: POST tasks for all vehicles by branch
      operationId: createTaskForAllVehiclesByBranch
      description: |
        Creates a task for all vehicles in a branch.
        
        **Permission:** `TASK_CREATE` permission is needed to perform this action.

        **File Linking:** File linking is not supported, files need to be added later with `PATCH tasks/{id}`
      parameters:
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Task'
        required: true
      responses:
        '201':
          description: Tasks created successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Task'
        '400':
          description: Invalid request - validation failed
        '403':
          description: Insufficient permissions or file access denied
        '404':
          description: Referenced file or branch not found
      tags:
        - Tasks
  '/tasks/branch/{branchId}/completed-tasks':
    get:
      summary: 'GET tasks/branch/{branchId}/completed-tasks'
      operationId: findTaskCompletedOnSelectedBranch
      parameters:
        - name: branchId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: startDate
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: endDate
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: userTimezone
          in: query
          required: false
          schema:
            type: string
            default: Etc/UTC
        - name: interval
          in: query
          required: true
          schema:
            type: string
            enum:
              - HOUR
              - DAY
              - WEEK
              - MONTH
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskMetricsDto'
      tags:
        - Tasks
  /tasks/complete:
    patch:
      summary: PATCH tasks/complete
      operationId: bulkCompleteTasks
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: integer
                format: int64
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Task'
      tags:
        - Tasks
  '/tasks/user/{userAuthId}/completed-tasks':
    get:
      summary: 'GET tasks/user/{userAuthId}/completed-tasks'
      operationId: findTaskCompletedByUser
      parameters:
        - name: userAuthId
          in: path
          required: true
          schema:
            type: string
        - name: startDate
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: endDate
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: userTimezone
          in: query
          required: false
          schema:
            type: string
            default: Etc/UTC
        - name: interval
          in: query
          required: true
          schema:
            type: string
            enum:
              - HOUR
              - DAY
              - WEEK
              - MONTH
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskMetricsDto'
      tags:
        - Tasks
  '/tasks/{id}':
    get:
      summary: 'GET tasks/{id}'
      operationId: findTaskById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
      tags:
        - Tasks
    patch:
      summary: 'PATCH tasks/{id}'
      operationId: patchTask
      description: |
        Updates task properties. 
        
        **Permission:** `TASK_UPDATE` is needed to perform this action.

        **File Linking:** Files can be added to the task by providing file IDs in `taskData.files` array.
        Existing files remain linked unless explicitly replaced. Each file must be pre-uploaded via POST /files
        and the user must have permission to access it. Response includes all linked files with full details
        and download links.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Task'
        required: true
      responses:
        '200':
          description: Task updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '400':
          description: Invalid request - validation failed
        '403':
          description: Insufficient permissions or file access denied
        '404':
          description: Task or referenced file not found
      tags:
        - Tasks
    delete:
      summary: 'DELETE tasks/{id}'
      operationId: deleteTask
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Tasks
  '/tasks/{id}/tags':
    put:
      summary: 'PUT tasks/{id}/tags'
      operationId: updateTaskTags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/Tag'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
      tags:
        - Tasks
  /tasks/templates:
    get:
      summary: GET tasks/templates
      operationId: findAllTaskTemplates
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TaskTemplate'
      tags:
        - Tasks
    post:
      summary: POST tasks/templates
      operationId: createTaskTemplate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskTemplate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskTemplate'
      tags:
        - Tasks
  '/tasks/templates/{id}':
    get:
      summary: 'GET tasks/templates/{id}'
      operationId: findTaskTemplateById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskTemplate'
      tags:
        - Tasks
    patch:
      summary: 'PATCH tasks/templates/{id}'
      operationId: patchTaskTemplate
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskTemplate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskTemplate'
      tags:
        - Tasks
    delete:
      summary: 'DELETE tasks/templates/{id}'
      operationId: deleteTaskTemplate
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Tasks
  /task-categories:
    get:
      summary: GET task-categories
      operationId: findAllTaskCategories
      description: |
        Returns a paginated list of task categories.

        **Permission:** `TASK_LIST` permission is needed to perform this action.
      parameters:
        - name: searchText
          description: 'Case-insensitive partial match filter on category name or exact match on ID (e.g. "maint" matches "Maintenance", "1" matches ID 1)'
          in: query
          required: false
          schema:
            type: string
        - name: name
          description: Filter by category name (exact match)
          in: query
          required: false
          schema:
            type: string
        - name: page
          description: Page number (zero-based)
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
        - name: size
          description: Page size
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 20
        - name: sort
          description: 'Sort field and direction (e.g. name,asc). Default: name,asc'
          in: query
          required: false
          schema:
            type: string
            default: 'name,asc'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageTaskCategoryResponse'
      tags:
        - Task Categories
    post:
      summary: POST task-categories
      operationId: createTaskCategory
      description: |
        Creates a new task category.

        **Permission:** `TASK_CREATE` permission is needed to perform this action.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskCategoryCreateRequest'
        required: true
      responses:
        '201':
          description: Task category created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCategoryResponse'
        '400':
          description: Invalid request - name must contain only letters, numbers, and spaces
        '409':
          description: A task category with this name already exists
      tags:
        - Task Categories
  '/task-categories/{id}':
    get:
      summary: 'GET task-categories/{id}'
      operationId: getTaskCategory
      description: |
        Returns a single task category by ID.

        **Permission:** `TASK_LIST` permission is needed to perform this action.
      parameters:
        - name: id
          description: Task category ID
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCategoryResponse'
        '404':
          description: Task category not found
      tags:
        - Task Categories
    patch:
      summary: 'PATCH task-categories/{id}'
      operationId: updateTaskCategory
      description: |
        Updates an existing task category. Only provided fields will be updated.

        **Permission:** `TASK_UPDATE` permission is needed to perform this action.
      parameters:
        - name: id
          description: Task category ID
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskCategoryPatchRequest'
        required: true
      responses:
        '200':
          description: Task category updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCategoryResponse'
        '400':
          description: Invalid request - name must contain only letters, numbers, and spaces
        '404':
          description: Task category not found
        '409':
          description: A task category with this name already exists
      tags:
        - Task Categories
    delete:
      summary: 'DELETE task-categories/{id}'
      operationId: deleteTaskCategory
      description: |
        Deletes a task category. The category must not be in use by any tasks or recurring tasks.

        **Permission:** `TASK_DELETE` permission is needed to perform this action.
      parameters:
        - name: id
          description: Task category ID
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: Task category deleted successfully
        '404':
          description: Task category not found
        '409':
          description: Task category is in use and cannot be deleted
      tags:
        - Task Categories
  /message-transmissions:
    get:
      summary: GET message-transmissions
      operationId: getMessageTransmissions
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MessageTransmission'
      tags:
        - Misc
  '/notes/{noteId}':
    patch:
      summary: 'PATCH notes/{noteId}'
      operationId: updateNote
      parameters:
        - name: noteId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Note'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Note'
      tags:
        - Misc
  '/{entityType}/{entityId}/notes':
    get:
      summary: 'GET {entityType}/{entityId}/notes'
      operationId: getNotesByEntityId
      parameters:
        - name: entityType
          in: path
          required: true
          schema:
            type: string
            enum:
              - CUSTOMERS
              - BRANCHES
              - RENTALS
              - VEHICLES
              - DAMAGES
              - BOOKINGS
        - name: entityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: state
          in: query
          required: false
          schema:
            type: string
            enum:
              - ACTIVE
              - INACTIVE
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Note'
      tags:
        - Misc
    post:
      summary: 'POST {entityType}/{entityId}/notes'
      operationId: createCustomerNote
      parameters:
        - name: entityType
          in: path
          required: true
          schema:
            type: string
            enum:
              - CUSTOMERS
              - BRANCHES
              - RENTALS
              - VEHICLES
              - DAMAGES
              - BOOKINGS
        - name: entityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddNote'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Note'
      tags:
        - Misc
  '/fines/{id}':
    get:
      summary: 'GET fines/{id}'
      deprecated: true
      operationId: getFine
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Fine'
      tags:
        - Misc
  /pgs:
    get:
      summary: GET pgs
      operationId: get
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PGSConfiguration'
      tags:
        - PGS
    post:
      summary: POST pgs
      operationId: createPaymentGateway
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PGSConfiguration'
        required: true
      responses:
        '201':
          description: Created
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PGSConfiguration'
      tags:
        - PGS
  '/pgs/{id}':
    get:
      summary: 'GET pgs/{id}'
      operationId: getPaymentGateway
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PGSConfiguration'
      tags:
        - PGS
    put:
      summary: 'PUT pgs/{id}'
      operationId: updatePaymentGateway
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PGSConfiguration'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PGSConfiguration'
      tags:
        - PGS
    delete:
      summary: 'DELETE pgs/{id}'
      operationId: updatePaymentGatewayById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '204':
          description: No Content
      tags:
        - PGS
  /enums:
    get:
      summary: GET enums
      operationId: getEnumValues
      parameters:
        - name: type
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
      tags:
        - Misc
  /kpis:
    get:
      summary: GET kpis
      operationId: getKpis
      description: Get KPIs with their values. Optionally filter by KPI types.
      parameters:
        - name: type
          in: query
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/KpiType'
          description: Optional list of KPI types to filter. If not provided, returns all KPIs.
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
          description: Branch for which KPIs are being calculated.
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: Whether to include KPIs for child branches of the provided `branchId`.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Kpi'
      tags:
        - Analytics
  /vehicles-management/activities:
    get:
      summary: GET vehicles-management/activities
      operationId: findAllVehicleActivities
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleActivity'
      tags:
        - Vehicle Action Management
    post:
      summary: POST vehicles-management/activities
      operationId: createVehicleActivity
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleActivity'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleActivity'
      tags:
        - Vehicle Action Management
  '/vehicles-management/activities/{id}':
    get:
      summary: 'GET vehicles-management/activities/{id}'
      operationId: findVehicleActivityById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleActivity'
      tags:
        - Vehicle Action Management
    patch:
      summary: 'PATCH vehicles-management/activities/{id}'
      operationId: updateVehicleAcivityById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleActivity'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleActivity'
      tags:
        - Vehicle Action Management
    delete:
      summary: 'DELETE vehicles-management/activities/{id}'
      operationId: deleteVehicleActivityById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Vehicle Action Management
  /issues:
    get:
      summary: GET issues
      operationId: getIssuesByBranch
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
        - name: searchText
          in: query
          required: false
          schema:
            type: string
          description: 'Search filter for issues. Searches across issue ID (numeric match), title (case-insensitive partial match), and category name (case-insensitive match)'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Issue'
      tags:
        - Issues
    post:
      description: 'Create a new issue in the system to handle damages, fines or other problems with clients.'
      summary: POST issues
      operationId: createIssue
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateIssue'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
      tags:
        - Issues
  '/issues/comments/{commentId}/file':
    post:
      summary: 'POST issues/comments/{commentId}/file'
      operationId: addFile
      parameters:
        - name: commentId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/File'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
      tags:
        - Issues
  '/issues/{id}':
    get:
      summary: 'GET issues/{id}'
      operationId: getIssue
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
      tags:
        - Issues
    patch:
      summary: 'PATCH issues/{id}'
      operationId: updateIssue
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IssueUpdate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
      tags:
        - Issues
  '/issues/{id}/comments':
    post:
      summary: 'POST issues/{id}/comments'
      operationId: createIssueComment
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateIssueComment'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
      tags:
        - Issues
  '/issues/{id}/create-invoice':
    post:
      summary: 'POST issues/{id}/create-invoice'
      operationId: createInvoice
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateIssueInvoice'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
      tags:
        - Issues
  '/issues/{id}/invoice/add':
    post:
      summary: 'POST issues/{id}/invoice/add'
      operationId: addInvoiceLineItem
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUpdateLineItem'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
      tags:
        - Issues
  '/issues/{id}/invoice/bill':
    post:
      summary: 'POST issues/{id}/invoice/bill'
      operationId: billIssueToInvoice
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: mailMessage
          in: query
          required: false
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MailMessage'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
      tags:
        - Issues
  /verification:
    get:
      summary: GET verification
      operationId: getVerifications
      parameters:
        - name: guserId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeDetails
          description: Determines whether verification details will be included. Works faster without details.
          in: query
          required: false
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VerificationAttempt'
      tags:
        - Verification
  '/verification/{verificationId}':
    get:
      summary: 'GET verification/{verificationId}'
      operationId: getVerificationById
      parameters:
        - name: verificationId
          description: Unique identifier of verification
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: attemptUuid
          description: 'Determines which attempt to get, when verification provider contains multiple verification attempts. This is ignored for Onfido verification attempts.'
          in: query
          required: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerificationAttempt'
      tags:
        - Verification
  '/verification/media/{fileUuid}':
    get:
      summary: 'GET verification/media/{fileUuid}'
      operationId: getMedia
      parameters:
        - name: fileUuid
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Verification
  /vehicles-management/composite-activities:
    get:
      summary: GET vehicles-management/composite-activities
      operationId: findAllCompositeVehicleActivities
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleCompositeActivity'
      tags:
        - Vehicle Action Management
    post:
      summary: POST vehicles-management/composite-activities
      operationId: createVehicleCompositeActivity
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleCompositeActivity'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCompositeActivity'
      tags:
        - Vehicle Action Management
  '/vehicles-management/composite-activities/{id}':
    get:
      summary: 'GET vehicles-management/composite-activities/{id}'
      operationId: findVehicleCompositeActivityById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCompositeActivity'
      tags:
        - Vehicle Action Management
    patch:
      summary: 'PATCH vehicles-management/composite-activities/{id}'
      operationId: updateVehicleCompositeActivityById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleCompositeActivity'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCompositeActivity'
      tags:
        - Vehicle Action Management
    delete:
      summary: 'DELETE vehicles-management/composite-activities/{id}'
      operationId: deleteVehicleCompositeActivityById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Vehicle Action Management
  /vehicles:
    get:
      summary: GET vehicles
      operationId: getVehicles
      parameters:
        - name: branchId
          in: query
          required: true
          description: Includes only vehicles that are linked to specified branch IDs.
          schema:
            type: array
            items:
              type: integer
              format: int64
        - name: includeChildBranches
          in: query
          required: false
          description: Includes vehicles that are linked to child branches of specified branch IDs
          schema:
            type: boolean
            default: false
        - name: searchText
          in: query
          required: false
          description: Text to search vehicles
          schema:
            type: string
        - name: queryAnnotationsWithOrOperator
          in: query
          required: false
          description: Filter using OR operator for annotations
          schema:
            type: boolean
            default: false
        - name: available
          in: query
          required: false
          description: Filter vehicles by availability
          schema:
            type: boolean
        - name: offline
          in: query
          required: false
          description: Filter vehicles by offline status
          schema:
            type: boolean
        - name: excludeStationedVehicles
          in: query
          required: false
          description: Exclude stationed vehicles
          schema:
            type: boolean
            default: false
        - name: excludeRetiredVehicles
          in: query
          required: false
          deprecated: true
          description: "Deprecated: use excludeDecommissionedVehicles instead. Exclude retired vehicles."
          schema:
            type: boolean
            default: false
        - name: excludeDecommissionedVehicles
          in: query
          required: false
          description: Exclude decommissioned vehicles (retired and defleeted).
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: List of vehicles
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicles
    post:
      summary: POST vehicles
      operationId: createVehicle
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleCreate'
        required: true
      responses:
        '200':
          description: Vehicle created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicles
    patch:
      summary: 'PATCH vehicles?code={code}'
      operationId: updateVehicleByCode
      parameters:
        - name: code
          in: query
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Vehicle'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicles
  /vehicles/bulk-update:
    post:
      summary: POST vehicles/bulk-update
      operationId: bulkUpdateVehicles
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkUpdateDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkUpdateResponseDTO'
      tags:
        - Vehicles
  /vehicles/bulk-update-by-ids:
    post:
      summary: Update vehicles in bulk by their IDs
      description: |
        Updates multiple vehicles identified by their IDs with the same set of attributes.
        Supports updating branch, service state, vehicle category, and ignored rental blockers.
        Returns detailed results including successful updates, failures with error messages, and skipped vehicles.
      operationId: bulkUpdateVehiclesByIds
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleBulkUpdateByIds'
      responses:
        '200':
          description: All vehicles updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleBulkUpdateByIdsResult'
        '207':
          description: Partially successful or failed - some or all vehicles failed to update, or some were skipped
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleBulkUpdateByIdsResult'
      tags:
        - Vehicles
  /vehicles/bulk-create:
    post:
      summary: POST vehicles/bulk-create
      operationId: bulkCreateVehicles
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/VehicleCreate'
      responses:
        '201':
          description: Successfully created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleBulkCreationResult'
        '207':
          description: Partially successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleBulkCreationResult'
        '400':
          description: Failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleBulkCreationResult'
      tags:
        - Vehicles
  '/vehicles/code/{code}':
    get:
      summary: 'GET vehicles/code/{code}'
      operationId: findVehiclesByCode
      parameters:
        - name: code
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicles
  /vehicles/details:
    post:
      summary: POST vehicles/details
      operationId: getVehiclesTasksAndAnnotations
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleIdsRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleTasksAndAnnotations'
      tags:
        - Vehicles
  /vehicles/map:
    get:
      summary: GET vehicles/map
      operationId: getVehiclesListForMap
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: updatedAfter
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleListDTO'
      tags:
        - Vehicles
  /vehicles/open-tasks-overview:
    get:
      summary: GET vehicles/open-tasks-overview
      description: Retrieve vehicle-ID buckets of open tasks (NEW or IN_PROGRESS, on non-decommissioned vehicles) grouped by priority and category for the maintenance sidebar.
      operationId: getOpenTasksOverview
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpenTasksOverviewResponse'
      tags:
        - Vehicles
  /vehicles/open-damages-overview:
    get:
      summary: GET vehicles/open-damages-overview
      description: Retrieve vehicle-ID buckets of open damages (NEW, APPROVED or UNDER_REPAIR, on non-decommissioned vehicles) grouped by severity for the maintenance sidebar.
      operationId: getOpenDamagesOverview
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpenDamagesOverviewResponse'
      tags:
        - Vehicles
  '/vehicles/updateState/branch/{id}':
    post:
      summary: 'POST vehicles/updateState/branch/{id}'
      operationId: updateStateByBranch
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicles
  '/vehicles/{id}':
    get:
      summary: 'GET vehicles/{id}'
      operationId: findVehicleById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicles
    patch:
      summary: 'PATCH vehicles/{id}'
      operationId: updateVehicleById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Vehicle'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicles
    delete:
      summary: 'DELETE vehicles/{id}'
      operationId: retireById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Vehicles
  '/vehicles/{id}/bluetooth/generate-token':
    post:
      summary: 'POST vehicles/{id}/bluetooth/generate-token'
      description: Generate a Bluetooth token for service workers to interact with the specified vehicle.
      operationId: generateServiceBluetoothTokens
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateBluetoothTokenRequest'
        required: true
      responses:
        '201':
          description: Successfully created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BluetoothToken'
      tags:
        - Vehicles
  '/vehicles/{id}/activity':
    get:
      summary: 'GET vehicles/{id}/activity'
      operationId: getVehicleActivityLogsByVehicleId
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: filters
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
              enum:
                - SERVICE_STATE
                - BATTERY_LEVEL
                - IOT_STATE
                - LOST_VEHICLE_SCANNED
                - RFID_READER
                - COMMAND
                - OUT_OF_RENTAL_ACTIVITY
                - BRANCH_CHANGED
                - RENTAL_VEHICLE_COMMAND
                - RENTAL_BLOCKERS_IGNORED
                - DOCKING
                - BLUETOOTH
                - CHARGING
                - MAINTENANCE
                - SMOKE_DETECTION
        - name: startDate
          in: query
          required: false
          description: |-
            Required if 'endDate' is set.

            One either has to provide either 'startDate'/'endDate' or 'date' parameter.
          schema:
            type: string
            format: date-time
        - name: endDate
          in: query
          required: false
          description: |-
            Required if 'startDate' is set.

            One either has to provide either 'startDate'/'endDate' or 'date' parameter.
          schema:
            type: string
            format: date-time
        - name: date
          in: query
          required: false
          description: |-
            Specify a filter for a date for the event.
            If a single date parameter is provided all activities from that date until now are displayed.
            If two date parameters are provided all activities within those two dates are returned.

            It is not allowed to pass more than two date parameters.

            One either has to provide either 'startDate'/'endDate' or 'date' parameter.
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleActivityLog'
      tags:
        - Vehicles
  '/vehicles/{id}/telemetry':
    get:
      summary: 'GET vehicles/{id}/telemetry'
      operationId: getVehicleTelemetryByVehicleId
      description: |-
        Returns the latest telemetry data available for this vehicle.

        Note that this might return the last telemetry data transferred by the IoT and might not represent the latest state.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleTelemetry'
              examples:
                Example 1:
                  value:
                    position:
                      type: Point
                      coordinates:
                        - 16.092426
                        - 46.51080322
                    kilometers: 1088.3
                    stateOfCharge: 44
                    iotModuleLevel: 4.156
                    iotStateOfCharge: 99
                    speed: 0.0
                    batteryVoltage: 50.436
                    chargingState: UNPLUGGED
                    batteryLevel: MEDIUM
                    powerState: OFF
                    rfidCardReaderTagsRead: [ ]
                    versionInfo:
                      iotFirmware: '35.25'
                      iotHardware: '1.05'
                      ecuFirmware: '000000510000000401030000'
                      ecuHardware: '000000C3000000AA05000000'
                      modemFirmware: 'BG95M5LAR02A03_01.005.01.005'
                      modemHardware: 'BG95-M5'
                      bluetoothFirmware: '0601'
                      versionUpdatedAt: '2026-04-10T08:36:04Z'
                      updateStatus: 301
                      updateStatusUpdatedAt: '2026-04-09T08:36:01Z'
                      iccid: '89464271235108091234'
                      iccidUpdatedAt: '2026-04-10T08:36:01Z'
                    tailboxLidState: OPEN
                    isOnline: true
      tags:
        - Vehicles
  '/vehicles/{id}/alarmOff':
    post:
      summary: 'POST vehicles/{id}/alarmOff'
      deprecated: true
      operationId: alarmOffById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Commands
  '/vehicles/{id}/alarmOn':
    post:
      summary: 'POST vehicles/{id}/alarmOn'
      deprecated: true
      operationId: alarmOnById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Commands
  '/vehicles/{id}/customCommand':
    post:
      summary: 'POST vehicles/{id}/customCommand'
      deprecated: true
      operationId: customCommandById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                type: string
      tags:
        - Vehicle Commands
  '/vehicles/{id}/details':
    get:
      summary: 'GET vehicles/{id}/details'
      operationId: findVehicleDetailsById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleDetails'
      tags:
        - Vehicles
  '/vehicles/{id}/iot-module':
    post:
      summary: 'POST vehicles/{id}/iot-module'
      operationId: associateModule
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssociateModule'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Vehicles
    delete:
      summary: 'DELETE vehicles/{id}/iot-module'
      operationId: removeModule
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Vehicles
  '/vehicles/{id}/legalInspectionDate':
    delete:
      summary: 'DELETE vehicles/{id}/legalInspectionDate'
      operationId: deleteLegalInspectionDate
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicles
  '/vehicles/{id}/locate':
    post:
      summary: 'POST vehicles/{id}/locate'
      deprecated: true
      operationId: locateById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Commands
  '/vehicles/{id}/log-entries':
    get:
      summary: 'GET vehicles/{id}/log-entries'
      operationId: findVehicleLogEntriesById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleLogEntrySimple'
      tags:
        - Vehicles
  '/vehicles/{id}/openSaddle':
    post:
      summary: 'POST vehicles/{id}/openSaddle'
      deprecated: true
      operationId: openSaddleById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Commands
  '/vehicles/{id}/openTailbox':
    post:
      summary: 'POST vehicles/{id}/openTailbox'
      deprecated: true
      operationId: openTailboxById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Commands
  '/vehicles/{id}/speed':
    post:
      summary: 'POST vehicles/{id}/speed'
      deprecated: true
      operationId: setSpeedById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: value
          in: query
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Commands
  '/vehicles/{id}/start':
    post:
      summary: 'POST vehicles/{id}/start'
      deprecated: true
      operationId: startById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Commands
  '/vehicles/{id}/stop':
    post:
      summary: 'POST vehicles/{id}/stop'
      deprecated: true
      operationId: stopById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicle Commands
  '/vehicles/{id}/updateState':
    post:
      summary: 'POST vehicles/{id}/updateState'
      operationId: updateStateById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicles
  '/vehicles/{id}/tags':
    put:
      summary: 'PUT vehicles/{id}/tags'
      operationId: updateVehicleTags
      description: Update the tags of a vehicle, if a tag does not exist yet is is being created.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/VehicleTagUpdate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
      tags:
        - Vehicles
  '/vehicles/{id}/damages':
    get:
      summary: 'GET vehicles/{id}/damages'
      operationId: getDamagesByVehicleId
      parameters:
        - name: id
          description: ID of the vehicle
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Damage'
      tags:
        - Vehicles
  '/vehicles/{id}/tasks':
    get:
      summary: 'GET vehicles/{id}/tasks'
      operationId: getTasksByVehicleId
      parameters:
        - name: id
          description: ID of the vehicle
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: assignedTo.firstLastName
          description: filter for first and last name of assignee
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Task'
      tags:
        - Vehicles
  '/vehicles/tasks/bulk-create':
    post:
      summary: 'POST vehicles/tasks/bulk-create'
      operationId: bulkCreateTasks
      description: Create tasks in bulk for multiple vehicles. All vehicles will receive a task with the same properties.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleTaskBulkCreate'
        required: true
      responses:
        '200':
          description: OK - Returns results with successes and failures for each vehicle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleTaskBulkCreateResult'
        '207':
          description: Multi-Status - Partial success (some tasks created, some failed)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleTaskBulkCreateResult'
        '400':
          description: Bad Request - Invalid input parameters
      tags:
        - Vehicles
  '/vehicles/notes/bulk-create':
    post:
      summary: 'POST vehicles/notes/bulk-create'
      operationId: bulkCreateNotes
      description: Create notes in bulk for multiple vehicles. All vehicles will receive a note with the same content.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleNoteBulkCreate'
        required: true
      responses:
        '200':
          description: OK - Returns results with successes and failures for each vehicle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleNoteBulkCreateResult'
        '207':
          description: Multi-Status - Partial success (some notes created, some failed)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleNoteBulkCreateResult'
        '400':
          description: Bad Request - Invalid input parameters
      tags:
        - Vehicles
  '/vehicles/tags/bulk-update':
    patch:
      summary: 'PATCH vehicles/tags/bulk-update'
      operationId: bulkUpdateTags
      description: Update tags in bulk for multiple vehicles. Allows adding and/or removing tags from the specified vehicles. At least one of tagsToAdd or tagsToRemove must be provided.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleTagsBulkUpdate'
        required: true
      responses:
        '200':
          description: OK - Returns results with successes, failures, and skipped operations for each vehicle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleTagsBulkUpdateResult'
        '207':
          description: Multi-Status - Partial success (some tags updated, some failed or skipped)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleTagsBulkUpdateResult'
        '400':
          description: Bad Request - Invalid input parameters or both tagsToAdd and tagsToRemove are empty
      tags:
        - Vehicles
  /files:
    post:
      summary: POST files
      operationId: uploadMultipart
      parameters:
        - name: public
          in: query
          required: true
          schema:
            type: boolean
        - name: mediaType
          in: query
          required: false
          schema:
            type: string
        - name: fileName
          in: query
          required: false
          schema:
            type: string
        - name: file
          in: query
          required: true
          schema:
            type: string
            format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/File'
      tags:
        - Files
  /files/links:
    get:
      summary: GET files/links
      operationId: getDownloadLinks
      parameters:
        - name: ids
          in: query
          required: true
          schema:
            type: array
            items:
              type: integer
              format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/File'
      tags:
        - Files
  /files/public-assets:
    post:
      summary: POST files/public-assets
      operationId: uploadMultipartWithoutSave
      parameters:
        - name: file
          in: query
          required: true
          schema:
            type: string
            format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicAsset'
      tags:
        - Files
  '/files/{id}':
    get:
      summary: 'GET files/{id}'
      operationId: downloadLink
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
      tags:
        - Files
    patch:
      summary: 'PATCH files/{id}'
      operationId: patchFile
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileUpdate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/File'
      tags:
        - Files
  '/issues/comments/{entityId}/files':
    get:
      summary: 'GET issues/comments/{entityId}/files'
      operationId: getFilesForIssueComment
      parameters:
        - name: entityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: state
          in: query
          required: false
          schema:
            type: string
            enum:
              - ACTIVE
              - INACTIVE
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/File'
      tags:
        - Issues
  '/{entityType}/{entityId}/files':
    get:
      summary: 'GET {entityType}/{entityId}/files'
      operationId: getFilesForEntity
      parameters:
        - name: entityType
          in: path
          required: true
          schema:
            type: string
            enum:
              - CUSTOMERS
              - VEHICLES
              - RENTALS
              - ISSUE_COMMENTS
              - DAMAGES
        - name: entityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: state
          in: query
          required: false
          schema:
            type: string
            enum:
              - ACTIVE
              - INACTIVE
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/File'
      tags:
        - Files
  /vehicles/categories:
    get:
      summary: GET vehicles/categories
      operationId: getVehiclesCategories
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleCategory'
      tags:
        - Vehicle Categories
      parameters:
        - schema:
            type: string
          in: query
          name: searchText
          description: Search for vehicle categories
  /vehicles/categories/actions:
    get:
      summary: GET vehicles/categories/actions
      operationId: getAvailableVehicleActions
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: integer
                format: int64
      tags:
        - Vehicle Categories
  /vehicles/categories/commands:
    get:
      summary: GET vehicles/categories/commands
      deprecated: true
      operationId: getAvailableVehicleCommands
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: integer
                format: int64
      tags:
        - Vehicle Categories
  /damages:
    get:
      summary: GET damages
      operationId: getDamages
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
            default: true
        - name: activeFirst
          in: query
          required: false
          schema:
            type: boolean
        - schema:
            type: string
          in: query
          name: createdBySearchText
          description: 'Search text for the createdBy field. Will find mutlti-field streams (e.g.: `Max Muster` will match `{firstname: Max, lastname: Mustermann}`'
        - schema:
            type: string
          in: query
          name: reportedBySearchText
          description: 'Search text for the reportedBy field. Will find mutlti-field streams (e.g.: `Max Muster` will match `{firstname: Max, lastname: Mustermann}`'
        - schema:
            type: string
          in: query
          name: causedBySearchText
          description: 'Search text for the causedBy field. Will find mutlti-field streams (e.g.: `Max Muster` will match `{firstname: Max, lastname: Mustermann}`'
        - name: searchText
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Damage'
      tags:
        - Damages
    post:
      summary: POST damages
      operationId: submitDamage
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Damage'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Damage'
        '406':
          description: Severity must be set before approving a damage report
      tags:
        - Damages
  '/damages/{id}':
    get:
      summary: 'GET damages/{id}'
      operationId: getDamageById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Damage'
      tags:
        - Damages
    patch:
      summary: 'PATCH damages/{id}'
      operationId: updateDamage
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Damage'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Damage'
        '406':
          description: Severity must be set before approving a damage report
      tags:
        - Damages
  /vehicles/categories-management:
    get:
      summary: GET vehicles/categories-management
      operationId: getVehicleCategoryList
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleCategory'
      tags:
        - Vehicle Categories
    post:
      summary: POST vehicles/categories-management
      operationId: createVehicleCategory
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleCategory'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCategory'
      tags:
        - Vehicle Categories
  /vehicles/categories-management/reload:
    post:
      summary: POST vehicles/categories-management/reload
      operationId: triggerVehicleCategoryReload
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Vehicle Categories
  '/vehicles/categories-management/{id}':
    get:
      summary: 'GET vehicles/categories-management/{id}'
      operationId: findVehicleCategoryById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCategory'
      tags:
        - Vehicle Categories
    patch:
      summary: 'PATCH vehicles/categories-management/{id}'
      operationId: updateVehicleCategoryById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleCategory'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCategory'
      tags:
        - Vehicle Categories
    delete:
      summary: 'DELETE vehicles/categories-management/{id}'
      operationId: deleteVehicleCategoryById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: force
          in: query
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Vehicle Categories
  /settings:
    get:
      summary: GET settings
      operationId: findByKeyInAndAreaInAndBranchId
      parameters:
        - name: keys
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: branchIds
          in: query
          required: false
          schema:
            type: array
            items:
              type: integer
              format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SettingSimple'
      tags:
        - Settings
  '/groups/{id}/balances':
    get:
      summary: 'GET groups/{id}/balances'
      deprecated: true
      operationId: findBalancesByGroupId
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Balance'
      tags:
        - Groups
  '/groups/{id}/members':
    get:
      summary: 'GET groups/{id}/members'
      operationId: findMembersByGroupIdAndState
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: state
          in: query
          required: false
          schema:
            type: string
            enum:
              - ACTIVE
              - INACTIVE
        - name: searchText
          in: query
          required: false
          description: Filter members by case-insensitive substring match on first name, last name, email, phone, or referral code.
          schema:
            type: string
            maxLength: 200
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserGroupMember'
      tags:
        - Groups
  '/groups/{id}/tags':
    put:
      summary: 'PUT groups/{id}/tags'
      operationId: updateUserGroupTags
      description: Update the tags of a user group. If a tag does not yet exist, it will be created. Only tag-type annotations are affected; labels remain unchanged.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/Tag'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserGroup'
      tags:
        - Groups
  /vehicles-management/custom-commands:
    get:
      summary: GET vehicles-management/custom-commands
      operationId: findAllCustomVehicleCommands
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomVehicleCommand'
      tags:
        - Vehicle Action Management
    post:
      summary: POST vehicles-management/custom-commands
      operationId: createCustomVehicleCommand
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomVehicleCommand'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomVehicleCommand'
      tags:
        - Vehicle Action Management
  '/vehicles-management/custom-commands/{id}':
    get:
      summary: 'GET vehicles-management/custom-commands/{id}'
      operationId: findCustomVehicleCommandById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomVehicleCommand'
      tags:
        - Vehicle Action Management
    patch:
      summary: 'PATCH vehicles-management/custom-commands/{id}'
      operationId: updateCustomVehicleCommandById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomVehicleCommand'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomVehicleCommand'
      tags:
        - Vehicle Action Management
    delete:
      summary: 'DELETE vehicles-management/custom-commands/{id}'
      operationId: deleteCustomVehicleCommandById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Vehicle Action Management
  /tutorials-management:
    get:
      summary: GET tutorials-management
      operationId: getAllTutorialsForManagement
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Tutorial'
      tags:
        - Tutorials
    post:
      summary: POST tutorials-management
      operationId: createTutorial
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Tutorial'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tutorial'
      tags:
        - Tutorials
  /tutorials-management/slide:
    post:
      summary: POST tutorials-management/slide
      operationId: createSlide
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TutorialSlide'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TutorialSlide'
      tags:
        - Tutorials
  '/tutorials-management/slide/{id}':
    patch:
      summary: 'PATCH tutorials-management/slide/{id}'
      operationId: updateSlide
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TutorialSlide'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TutorialSlide'
      tags:
        - Tutorials
    delete:
      summary: 'DELETE tutorials-management/slide/{id}'
      operationId: deleteSlide
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Tutorials
  '/tutorials-management/{id}':
    patch:
      summary: 'PATCH tutorials-management/{id}'
      operationId: updateTutorial
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Tutorial'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tutorial'
      tags:
        - Tutorials
    delete:
      summary: 'DELETE tutorials-management/{id}'
      operationId: deleteTutorial
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Tutorials
  /settings-management:
    get:
      summary: GET settings-management
      operationId: getSettingsList
      parameters:
        - name: key
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
        - name: exactMatch
          in: query
          required: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Setting'
      tags:
        - Settings
    post:
      summary: POST settings-management
      operationId: createSetting
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Setting'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Setting'
      tags:
        - Settings
  /settings-management/bulk:
    put:
      summary: PUT settings-management/bulk
      operationId: updateSettingBulk
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/SettingBulkUpdate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Setting'
      tags:
        - Settings
  /settings-management/reload:
    post:
      summary: POST settings-management/reload
      operationId: triggerSettingsReload
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SettingValidationResult'
      tags:
        - Settings
  /settings-management/validate:
    post:
      summary: POST settings-management/validate
      operationId: validateDatabaseContent
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SettingValidationResult'
      tags:
        - Settings
  '/settings-management/{id}':
    get:
      summary: 'GET settings-management/{id}'
      operationId: getSettingForManagementById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Setting'
      tags:
        - Settings
    put:
      summary: 'PUT settings-management/{id}'
      operationId: updateSettingById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: updateSettingValueType
          in: query
          required: false
          description: if the settingValueType should always be updated
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeSetting'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Setting'
      tags:
        - Settings
    delete:
      summary: 'DELETE settings-management/{id}'
      operationId: deleteSettingById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Settings
  /radars:
    get:
      summary: GET radars
      operationId: getAllRadars
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Radar'
      tags:
        - Radars
  '/radars/{radarId}':
    get:
      summary: 'GET radars/{radarId}'
      operationId: getRadarById
      parameters:
        - name: radarId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Radar'
      tags:
        - Radars
  /payments:
    get:
      summary: GET payments
      operationId: getPaymentsByBranch
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Payment'
      tags:
        - Payments
    delete:
      summary: DELETE payments
      operationId: deletePaymentSource
      parameters:
        - name: userGroupId
          in: query
          description: User group ID. Either userId or userGroupId must be provided.
          required: false
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: userId
          in: query
          description: User ID. Either userId or userGroupId must be provided.
          required: false
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeSource'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Payments
  '/payments/{id}':
    get:
      summary: 'GET payments/{id}'
      operationId: getPayment
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payment'
      tags:
        - Payments
  '/payments/{id}/retry':
    post:
      summary: 'POST payments/{id}/retry'
      operationId: retryPayment
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Payments
  /annotations:
    get:
      summary: GET annotations
      operationId: getAllAnnotations
      parameters:
        - name: type
          in: query
          required: false
          description: Restrict results to certain types of annotations only
          schema:
            type: string
            enum:
              - TAG
              - LABEL
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Annotation'
      tags:
        - Annotations
    post:
      summary: POST annotations
      operationId: createAnnotation
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Annotation'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Annotation'
      tags:
        - Annotations
  '/annotations/{id}':
    get:
      summary: 'GET annotations/{id}'
      operationId: getAnnotationById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Annotation'
      tags:
        - Annotations
    put:
      summary: 'PUT annotations/{id}'
      operationId: updateAnnotationById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Annotation'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Annotation'
      tags:
        - Annotations
  /packages:
    get:
      summary: GET packages
      deprecated: true
      operationId: getPackages
      parameters:
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Package'
      tags:
        - Packages
    post:
      summary: POST packages
      deprecated: true
      operationId: createPackage
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Package'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Package'
      tags:
        - Packages
  '/packages/{id}':
    get:
      summary: 'GET packages/{id}'
      deprecated: true
      operationId: getPackageById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Package'
      tags:
        - Packages
    patch:
      summary: 'PATCH packages/{id}'
      deprecated: true
      operationId: patchPackage
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Package'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Package'
      tags:
        - Packages
  /subscriptions:
    get:
      summary: GET subscriptions
      deprecated: true
      operationId: GetAllSubscriptions
      parameters:
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Subscription'
      tags:
        - Subscriptions
    post:
      summary: POST subscriptions
      deprecated: true
      operationId: createSubscription
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Subscription'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
      tags:
        - Subscriptions
  '/subscriptions/{id}':
    get:
      summary: 'GET subscriptions/{id}'
      deprecated: true
      operationId: getSubscriptionById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
      tags:
        - Subscriptions
    patch:
      summary: 'PATCH subscriptions/{id}'
      deprecated: true
      operationId: updateSubscriptionById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: deactivateActiveSubscriptions
          in: query
          required: false
          schema:
            type: boolean
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Subscription'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
      tags:
        - Subscriptions
    delete:
      summary: 'DELETE subscriptions/{id}'
      deprecated: true
      operationId: deleteSubscriptionById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Subscriptions
  '/user-subscriptions':
    get:
      summary: 'List all user subscriptions'
      operationId: getUserSubscriptions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserSubscription'
      tags:
        - User Subscriptions
  '/user-subscriptions/{userSubscriptionId}/cancel':
    post:
      summary: 'Cancel user subscription'
      operationId: cancelUserSubscription
      parameters:
        - name: userSubscriptionId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: cancelBenefits
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: When true, cancels all active vouchers granted by this subscription
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserSubscription'
      tags:
        - User Subscriptions
  /events:
    get:
      summary: GET events
      operationId: getEvents
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Event'
      tags:
        - Events
  /events/types:
    get:
      summary: GET events/types
      operationId: getEventTypes
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  type: string
                  enum:
                    - UNKNOWN
                    - LOGIN
                    - SIGNUP
                    - LOGOUT
                    - START
                    - APP_LOGIN
                    - APP_SIGNUP
                    - APP_LOGOUT
                    - APP_CLOSE
                    - APP_MAP_NAVIGATION
                    - APP_VEHICLE_SELECTION
                    - APP_START
                    - APP_INACTIVATE
                    - APP_ACTIVATE
                    - APP_BT_ACTION
                    - APP_BT_ACTION_FAIL
                    - RENTAL_RESERVATION
                    - RENTAL_START
                    - RENTAL_END
                    - RENTAL_FEEDBACK
                    - RENTAL_DRIVE
                    - RENTAL_PARK
                    - RENTAL_RENEW_RESERVATION
                    - RENTAL_CANCEL_RESERVATION
                    - RENTAL_OPEN_TAILBOX
                    - RENTAL_LIST
                    - RENTAL_DETAILS
                    - RENTAL_BUY_RESERVATION
                    - RENTAL_PRE_END_ACTIONS
                    - RENTAL_OPERATION_FAILED
                    - RENTAL_UPDATE
                    - RENTAL_DEPOSIT_RELEASE
                    - NOTIFICATION
                    - VEHICLE_LOCATE
                    - BOOKING_CREATED
                    - BOOKING_UPDATED
                    - BOOKING_CANCELED
                    - BOOKING_SUCCESSFUL
                    - BOOKING_DETAILS
                    - BOOKING_LIST
                    - BOOKING_PICKUP
                    - BOOKING_TIMESLOT
                    - BOOKING_DELIVERED
                    - BOOKING_CHECKED_IN
                    - GROUP_BOOKING_LIST
                    - GROUP_BOOKING_CREATED
                    - VEHICLE_MAINTENANCE_APPROACH
                    - VEHICLE_MAINTENANCE_DEPLOY
                    - VEHICLE_MAINTENANCE_CLOSE
                    - BOOKING_AVAILABLE_CATEGORIES
                    - BOOKING_AVAILABILITY
                    - VEHICLE_COMMAND_START
                    - VEHICLE_COMMAND_STOP
                    - VEHICLE_COMMAND_LOCK
                    - VEHICLE_COMMAND_UNLOCK
                    - VEHICLE_COMMAND_LOCATE
                    - VEHICLE_COMMAND_OPEN_SADDLE
                    - VEHICLE_COMMAND_OPEN_TAILBOX
                    - VEHICLE_COMMAND_LOCK_TAILBOX
                    - VEHICLE_COMMAND_UNLOCK_TAILBOX
                    - VEHICLE_COMMAND_ALARM_ON
                    - VEHICLE_COMMAND_ALARM_OFF
                    - VEHICLE_COMMAND_SET_MAX_SPEED
                    - VEHICLE_COMMAND_CUSTOM_COMMAND
                    - VEHICLE_COMMAND_UNLOCK_BIKE_LOCK
                    - VEHICLE_COMMAND_UNKNOWN
                    - VEHICLE_UPDATE
                    - VEHICLE_SERVICE_STATE_OPERATIONAL
                    - VEHICLE_SERVICE_STATE_OUT_OF_ORDER
                    - VEHICLE_TAGS_UPDATE
                    - VEHICLE_SERVICE_STATE_RETIRED
                    - VEHICLE_COMMAND_REBOOT
                    - VEHICLE_SERVICE_STATE_LOW_SOC
                    - VEHICLE_SERVICE_STATE_UNKNOWN
                    - VEHICLE_FAULT_STATE_FAULT
                    - VEHICLE_FAULT_STATE_ILLEGAL_MOVEMENT
                    - VEHICLE_FAULT_STATE_FALLEN_OVER
                    - VEHICLE_FAULT_STATE_MODULE_REMOVED
                    - VEHICLE_FAULT_STATE_LIFTED_UP
                    - VEHICLE_FAULT_STATE_UNKNOWN
                    - VEHICLE_MAINTENANCE
                    - VEHICLE_OFFLINE
                    - VEHICLE_ONLINE
                    - VEHICLE_OUT_OF_RENTAL_ACTIVITY
                    - VEHICLE_SERVICE_STATE_V2_FUNCTIONAL
                    - VEHICLE_SERVICE_STATE_V2_INSPECT
                    - VEHICLE_SERVICE_STATE_V2_RELOCATE
                    - VEHICLE_SERVICE_STATE_V2_COLLECT
                    - VEHICLE_SERVICE_STATE_V2_SERVICE_ON_SITE
                    - VEHICLE_SERVICE_STATE_V2_SERVICE_WORKSHOP
                    - VEHICLE_SERVICE_STATE_V2_SERVICE_EXTERNAL
                    - VEHICLE_SERVICE_STATE_V2_REPLACE
                    - VEHICLE_SERVICE_STATE_V2_IMPOUNDED
                    - VEHICLE_SERVICE_STATE_V2_LOST
                    - VEHICLE_SERVICE_STATE_V2_RETIRED
                    - VEHICLE_SERVICE_STATE_V2_READY_FOR_DEPLOYMENT
                    - VEHICLE_SERVICE_STATE_V2_MAINTENANCE
                    - VEHICLE_SERVICE_STATE_V2_OTHER
                    - VEHICLE_SERVICE_STATE_V2_WAITING_FOR_PARTS
                    - VEHICLE_SERVICE_STATE_V2_UNREPAIRABLE
                    - VEHICLE_SERVICE_STATE_V2_DEFLEETED
                    - VEHICLE_SERVICE_STATE_V2_OPERATIONAL_HOLD
                    - VEHICLE_SERVICE_STATE_V2_AWAITING_ACTION
                    - VEHICLE_SERVICE_STATE_V2_SERVICE_MECHANICS
                    - VEHICLE_SERVICE_STATE_V2_REGULATORY_INSPECTION_READY
                    - VEHICLE_SERVICE_STATE_V2_REGULATORY_INSPECTION
                    - VEHICLE_SERVICE_STATE_V2_SERVICE_WORKSHOP_INSURANCE
                    - VEHICLE_SERVICE_STATE_V2_SERVICE_WORKSHOP_QUEUE
                    - VEHICLE_SERVICE_STATE_V2_READY_FOR_DEPLOYMENT_NEW
                    - VEHICLE_SERVICE_STATE_V2_COLLECT_EXTERNAL
                    - VEHICLE_BATTERY_LEVEL_UNKNOWN
                    - VEHICLE_BATTERY_LEVEL_CRITICAL
                    - VEHICLE_BATTERY_LEVEL_LOW
                    - VEHICLE_BATTERY_LEVEL_MEDIUM
                    - VEHICLE_BATTERY_LEVEL_HIGH
                    - USER_PASSWORD_RESET_EMAIL
                    - USER_PASSWORD_CHANGED
                    - USER_EMAIL_VERIFIED
                    - USER_EMAIL_CHANGED
                    - USER_LICENCE_VERIFICATION
                    - USER_MANUAL_VERIFICATION
                    - USER_PROFILE_DATA_CHANGED
                    - USER_PAYMENT_METHOD_ADD
                    - USER_PAYMENT_METHOD_CHANGED
                    - USER_PAYMENT_METHOD_REMOVED
                    - GENERATE_BLUETOOTH_TOKEN
                    - BALANCE_SETTLEMENT_FAILED
                    - BALANCE_SETTLEMENT_SUCCESSFUL
                    - USER_PHONE_REGISTRATION_DENIED
                    - USER_PHONE_REGISTRATION_DENIED_SILENT
                    - USER_PHONE_REGISTRATION_NO_SMS_SENT
                    - PARKING_RESERVATION_CREATED
                    - PARKING_RESERVATION_REMOVED
                    - PARKING_RESERVATION_CHANGED
                    - VALIDATION_EXCEPTIONS
                    - value
                    - SERVICE_STATE_EVENTS
                    - IOT_MODULE_STATE_EVENTS
                    - BATTERY_LEVEL_EVENTS
                    - log
      tags:
        - Events
  '/{entityType}/{entityId}/events':
    get:
      summary: 'GET {entityType}/{entityId}/events'
      operationId: getEventsByEntityId
      parameters:
        - name: entityType
          in: path
          required: true
          schema:
            type: string
            enum:
              - CUSTOMERS
              - RENTALS
              - BOOKINGS
              - VEHICLES
        - name: entityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Event'
      tags:
        - Events
  /analytics/rentals/startPositions:
    get:
      summary: GET analytics/rentals/startPositions
      operationId: getStartPositions
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TimePosition'
      tags:
        - Analytics
  /analytics/userEvents:
    get:
      summary: GET analytics/userEvents
      description: Retrieve stored user/app event positions for branch-level analytics. Positions are populated from event data such as the User API Device-Position header.
      operationId: getUserEvents
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TimePosition'
      tags:
        - Analytics
  /terms-and-conditions:
    get:
      summary: GET terms-and-conditions
      operationId: find
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TermsAndConditions'
      tags:
        - Terms and Conditions
    post:
      summary: POST terms-and-conditions
      operationId: createTermsAndConditions
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TermsAndConditionsCreate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TermsAndConditions'
      tags:
        - Terms and Conditions
  '/terms-and-conditions/{id}':
    get:
      summary: 'GET terms-and-conditions/{id}'
      operationId: getTermsAndConditionsById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TermsAndConditions'
      tags:
        - Terms and Conditions
    put:
      summary: 'PUT terms-and-conditions/{id}'
      operationId: updateTermsAndConditionsById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TermsAndConditions'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TermsAndConditions'
      tags:
        - Terms and Conditions
    delete:
      summary: 'DELETE terms-and-conditions/{id}'
      operationId: delete
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Terms and Conditions
  /voucherables:
    post:
      summary: POST voucherables
      operationId: createVoucherable
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/ConstraintVoucherable'
                  x-stoplight:
                    id: faklaajwuaa2r
                - $ref: '#/components/schemas/SurchargeVoucherable'
                  x-stoplight:
                    id: 2v7mzptt0me7f
                - $ref: '#/components/schemas/PricedVoucherable'
                  x-stoplight:
                    id: 9kj3oy2iqk6aq
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ConstraintVoucherable'
                    x-stoplight:
                      id: 5msj7eds5cs4j
                  - $ref: '#/components/schemas/SurchargeVoucherable'
                    x-stoplight:
                      id: v8gbrv7fu6aur
                  - $ref: '#/components/schemas/PricedVoucherable'
                    x-stoplight:
                      id: vpvxhr16agasfg
              examples: { }
      tags:
        - Voucherables
      description: |-
        This endpoint can be used to create many different kinds of voucherables.
        A voucherable is a template for a voucher and the different kinds of voucherables are used in different situations where users receive vouchers.

        ### The available kinds of voucherables

        **Kinds that generate a voucher which can be used at a later point in time.**
        * Promotion - Has a promotion code that can be redeemed by endusers to get a voucher
        * Package - Can be bought by a user to get a straight value voucher
        * RidePass - Can be bought by a user to get a discount voucher for an amount of time
        * Subscription - Can be bought by a user to get a voucher and will be automatically renewed at a defined intervall
        * SignupReferral - This voucherable can be assigned on a business unit to choose which benefits a user gets on: signing up / referring a friend / being referred
        * CustomerCare - Represents templates which can be used by customer support to give the user credits

        **Kinds that get directly applied to a rental**
        * GeoFencePromotion - Rentals started / ended in the defined area will get discounted
        * VehiclePromotion - Rentals performed on vehicles that fit the criteria will get discounted
        * GeoFenceSurcharge - Rentals started / ended in the defined area will get a surcharge
  '/voucherables/by-code/{code}':
    get:
      summary: 'GET voucherables/by-code/{code}'
      operationId: findByCode
      parameters:
        - name: code
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ConstraintVoucherable'
                    x-stoplight:
                      id: 0wdj29haugzov
                  - $ref: '#/components/schemas/SurchargeVoucherable'
                    x-stoplight:
                      id: vdvnmfdraoji9
                  - $ref: '#/components/schemas/PricedVoucherable'
                    x-stoplight:
                      id: grcilxestn6nm
      tags:
        - Voucherables
  '/voucherables/{id}':
    get:
      summary: 'GET voucherables/{id}'
      operationId: getVoucherableById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ConstraintVoucherable'
                    x-stoplight:
                      id: 3cqalfietzplk
                  - $ref: '#/components/schemas/SurchargeVoucherable'
                    x-stoplight:
                      id: 52zbep8i88hsu
                  - $ref: '#/components/schemas/PricedVoucherable'
                    x-stoplight:
                      id: zhorjpmx5aw5g
      tags:
        - Voucherables
    put:
      summary: 'PUT voucherables/{id}'
      operationId: updateVoucherableById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/ConstraintVoucherable'
                  x-stoplight:
                    id: e2mwga6p0jvb9
                - $ref: '#/components/schemas/SurchargeVoucherable'
                  x-stoplight:
                    id: a6loe7ss4e4ug
                - $ref: '#/components/schemas/PricedVoucherable'
                  x-stoplight:
                    id: ya4vv49bfj0iy
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ConstraintVoucherable'
                    x-stoplight:
                      id: n43vzqdr6dz9r
                  - $ref: '#/components/schemas/SurchargeVoucherable'
                    x-stoplight:
                      id: q4cmtcdfgievc
                  - $ref: '#/components/schemas/PricedVoucherable'
                    x-stoplight:
                      id: x3876udq0u4jq
      tags:
        - Voucherables
      x-stoplight:
        id: kgk6f8x6nqqu8
    delete:
      summary: 'DELETE voucherables/{id}'
      operationId: deleteVoucherableById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Voucherables
      x-stoplight:
        id: b5j6gtn6b8stz
  '/voucherables/{id}/activate':
    post:
      summary: 'POST voucherables/{id}/activate'
      operationId: activateVoucherableById
      description: Activate a voucherable by validating its configuration and setting state to ACTIVE
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: No Content - Voucherable successfully activated
        '400':
          description: Bad Request - Validation failed
        '404':
          description: Not Found - Voucherable not found
        '403':
          description: Forbidden - Insufficient permissions
      tags:
        - Voucherables
  '/voucherables/{id}/deactivate':
    post:
      summary: 'POST voucherables/{id}/deactivate'
      operationId: deactivateVoucherableById
      description: Deactivate a voucherable by setting its state to INACTIVE
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: No Content - Voucherable successfully deactivated
        '401':
          description: Unauthorized - Authentication required or invalid credentials
        '404':
          description: Not Found - Voucherable not found
        '403':
          description: Forbidden - Insufficient permissions
      tags:
        - Voucherables
  /resources/messages:
    get:
      summary: GET resources/messages
      operationId: getNonEmptyMessageResources
      parameters:
        - name: locale
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Locale'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
      tags:
        - Misc
  /resources/messages/languages:
    get:
      summary: GET resources/messages/languages
      operationId: getMessageResourcesLocales
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Locale'
      tags:
        - Misc
  /notifications:
    post:
      summary: POST notifications
      operationId: notify
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationResponse'
      tags:
        - Misc
  /rental-authority:
    get:
      summary: GET rental-authority
      operationId: getCustomerRentalAuthorities
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/JsonGUserEmail'
      tags:
        - Rental Authority
    post:
      summary: POST rental-authority
      operationId: addRentalAuthority
      parameters:
        - name: guserId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Rental Authority
    delete:
      summary: DELETE rental-authority
      operationId: deleteRentalAuthority
      parameters:
        - name: guserId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Rental Authority
  /rental-authority/bulk:
    put:
      summary: PUT rental-authority/bulk
      operationId: addRentalAuthorityForUsers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkRentalAuthorityUpdate'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Rental Authority
  '/{resource}.schema':
    get:
      summary: 'GET {resource}.schema'
      operationId: getDataSchema
      parameters:
        - name: resource
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
      tags:
        - Misc
  /iot-modules:
    get:
      summary: GET iot-modules
      operationId: findAll
      parameters:
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
        - name: searchText
          in: query
          required: false
          description: Filter modules by id, iccid, name, or type (case-insensitive)
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Module'
      tags:
        - Modules
    post:
      summary: POST iot-modules
      operationId: createIoTModule
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateModule'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Module'
      tags:
        - Modules
    patch:
      summary: PATCH iot-modules
      tags:
        - Modules
      responses:
        '201':
          description: Successfully created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModuleCreationResult'
        '207':
          description: Partially successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModuleCreationResult'
        '400':
          description: Failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModuleCreationResult'
      operationId: patch-iot-modules
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateModule'
  /iot-modules/retired:
    get:
      summary: GET iot-modules/retired
      operationId: findAllRetirements
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ModuleRetirement'
      tags:
        - Modules
  '/iot-modules/{id}':
    get:
      summary: 'GET iot-modules/{id}'
      operationId: getIoTModuleById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Module'
      tags:
        - Modules
    patch:
      summary: 'PATCH iot-modules/{id}'
      operationId: updateIoTModuleById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateModule'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Module'
      tags:
        - Modules
  '/iot-modules/{id}/retire':
    post:
      summary: 'POST iot-modules/{id}/retire'
      operationId: retireIoTModuleById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RetireModule'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Modules
  /pricing-simulator/booking:
    post:
      summary: POST pricing-simulator/booking
      operationId: estimateBookingPriceWithSettings
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingData'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/RentalPriceResponse'
      tags:
        - Pricing Simulator
  /pricing-simulator/free-floating:
    post:
      summary: POST pricing-simulator/free-floating
      operationId: estimateFreeFloatingPriceWithSettings
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FreeFloatingData'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/RentalPriceResponse'
      tags:
        - Pricing Simulator
  /pricing-bundles:
    get:
      summary: GET pricing-bundles
      operationId: getAllPricingBundles
      parameters:
        - name: searchText
          in: query
          required: false
          schema:
            type: string
          description: Text to search for in pricing bundle names or descriptions
        - name: includeVersions
          in: query
          required: false
          schema:
            type: boolean
          description: Whether to include pricing bundle versions in the response
        - name: vehicleCategoryId
          in: query
          required: false
          schema:
            type: integer
            format: int64
          description: Filter by vehicle category ID
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
          description: Filter by branch ID
        - name: page
          in: query
          required: false
          schema:
            type: integer
            default: 0
          description: Page number (0-based)
        - name: size
          in: query
          required: false
          schema:
            type: integer
            default: 20
          description: Page size
        - name: sort
          in: query
          required: false
          schema:
            type: string
          description: Sort field and direction (e.g., id,desc)
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PricingBundle'
      tags:
        - Pricing Bundles
    post:
      summary: POST pricing-bundles
      operationId: createPricingBundle
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PricingBundleCreate'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PricingBundle'
      tags:
        - Pricing Bundles
  '/pricing-bundles/{pricingBundleId}':
    get:
      summary: 'GET pricing-bundles/{pricingBundleId}'
      operationId: getPricingBundleById
      parameters:
        - name: pricingBundleId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PricingBundle'
      tags:
        - Pricing Bundles
    put:
      summary: 'PUT pricing-bundles/{pricingBundleId}'
      operationId: updatePricingBundle
      parameters:
        - name: pricingBundleId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PricingBundleUpdate'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PricingBundle'
      tags:
        - Pricing Bundles
    delete:
      summary: 'DELETE pricing-bundles/{pricingBundleId}'
      operationId: deletePricingBundle
      parameters:
        - name: pricingBundleId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle
      responses:
        '204':
          description: No Content
      tags:
        - Pricing Bundles
  '/pricing-bundles/{pricingBundleId}/versions':
    get:
      summary: 'GET pricing-bundles/{pricingBundleId}/versions'
      operationId: getAllPricingBundleVersions
      parameters:
        - name: pricingBundleId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle
        - name: searchText
          in: query
          required: false
          schema:
            type: string
          description: Text to search for in pricing bundle version labels
        - name: sort
          in: query
          required: false
          schema:
            type: string
            default: effectiveFrom,asc
          description: Sort field and direction (e.g., effectiveFrom,asc)
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PricingBundleVersion'
      tags:
        - Pricing Bundles
    post:
      summary: 'POST pricing-bundles/{pricingBundleId}/versions'
      operationId: createPricingBundleVersion
      parameters:
        - name: pricingBundleId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PricingBundleVersionCreate'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PricingBundleVersion'
      tags:
        - Pricing Bundles
  '/pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}':
    get:
      summary: 'GET pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}'
      operationId: getPricingBundleVersion
      parameters:
        - name: pricingBundleId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle
        - name: pricingBundleVersionId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle version
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PricingBundleVersion'
      tags:
        - Pricing Bundles
    put:
      summary: 'PUT pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}'
      operationId: updatePricingBundleVersion
      parameters:
        - name: pricingBundleId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle
        - name: pricingBundleVersionId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle version
        - name: allowImmutableUpdate
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: Whether to allow updating immutable fields
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PricingBundleVersionUpdate'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PricingBundleVersion'
      tags:
        - Pricing Bundles
  '/pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}/publish':
    post:
      summary: 'POST pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}/publish'
      operationId: publishPricingBundleVersion
      parameters:
        - name: pricingBundleId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle
        - name: pricingBundleVersionId
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: ID of the pricing bundle version
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PricingBundleVersionPublish'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PricingBundleVersion'
      tags:
        - Pricing Bundles
  /pricing-bundles/pricing-calculator:
    get:
      summary: GET price by pricing bundle
      operationId: calculatePriceByPricingBundleOrAssignment
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: pricingBundleId
          in: query
          schema:
            type: integer
            format: int64
        - name: vehicleCategoryId
          in: query
          schema:
            type: integer
            format: int64
        - name: startTime
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: endTime
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: additions
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
        - name: distance
          in: query
          schema:
            type: number
            format: double
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PriceV3Dto'
      tags:
        - Pricing Bundle Pricing Calculator
  /pricing-bundles/pricing-simulator:
    get:
      summary: GET pricing-bundles/pricing-simulator
      operationId: simulatePriceByPricingBundle
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: pricingBundleId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: startTime
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: endTime
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: additions
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
        - name: distance
          in: query
          schema:
            type: number
            format: double
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PricingBundlePrice'
      tags:
        - Pricing Bundle Pricing Simulator
  /revenue-centers:
    get:
      summary: GET revenue-centers
      operationId: getAllRevenueCenters
      parameters:
        - name: searchText
          in: query
          required: false
          schema:
            type: string
      deprecated: true
      description: Deprecated 2025/10 - Replaced by /business-units
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RevenueCenter'
      tags:
        - Revenue Centers (Business Units)
    post:
      summary: POST revenue-centers
      operationId: createRevenueCenter
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RevenueCenter'
        required: true
      deprecated: true
      description: Deprecated 2025/10 - Replaced by /business-units
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevenueCenter'
      tags:
        - Revenue Centers (Business Units)
  '/revenue-centers/{id}':
    get:
      summary: 'GET revenue-centers/{id}'
      operationId: getRevenueCenterById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      deprecated: true
      description: Deprecated 2025/10 - Replaced by /business-units
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevenueCenter'
      tags:
        - Revenue Centers (Business Units)
    put:
      summary: 'PUT revenue-centers/{id}'
      operationId: updateRevenueCenter
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      deprecated: true
      description: Deprecated 2025/10 - Replaced by /business-units
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RevenueCenter'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevenueCenter'
      tags:
        - Revenue Centers (Business Units)
    delete:
      summary: 'DELETE revenue-centers/{id}'
      operationId: deleteRevenueCenterById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      deprecated: true
      description: Deprecated 2025/10 - Replaced by /business-units
      responses:
        '204':
          description: No Content
      tags:
        - Revenue Centers (Business Units)
  /tasks/recurring:
    get:
      summary: GET tasks/recurring
      operationId: getAllRecurringTasks
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RecurringTask'
      tags:
        - Tasks
    post:
      summary: POST tasks/recurring
      operationId: createRecurringTask
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecurringTask'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecurringTask'
      tags:
        - Tasks
  '/tasks/recurring/{id}':
    get:
      summary: 'GET tasks/recurring/{id}'
      operationId: findRecurringTaskById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: includeTasks
          in: query
          required: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecurringTask'
      tags:
        - Tasks
    patch:
      summary: 'PATCH tasks/recurring/{id}'
      operationId: patchRecurringTask
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: closeChildren
          in: query
          required: false
          schema:
            type: boolean
        - name: closeRecurringChildren
          in: query
          required: false
          schema:
            type: boolean
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecurringTask'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecurringTask'
      tags:
        - Tasks
    delete:
      summary: 'DELETE tasks/recurring/{id}'
      operationId: deleteRecurringTask
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: children
          in: query
          required: false
          schema:
            type: boolean
        - name: includeRecurringChildren
          in: query
          required: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Tasks
  /onesignal/session:
    post:
      summary: POST onesignal/session
      operationId: newSession
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OneSignalSubscription'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OneSignalSubscription'
      tags:
        - Misc
  /branches:
    post:
      summary: POST branches
      operationId: createBillable
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Branch'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Branch'
      tags:
        - Branches
  /branches-list:
    get:
      summary: List all branches
      operationId: findAllByPredicate
      parameters:
        - name: searchText
          in: query
          required: false
          schema:
            type: string
          description: Search branches by name containing searchText
        - name: rootBranchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
          description: Search branches within this hierarchy
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Branch'
      tags:
        - Branches
  '/branches/billable/{id}':
    put:
      summary: 'PUT branches/billable/{id}'
      operationId: updateBillable
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Branch'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Branch'
      tags:
        - Branches
  '/branches/{id}':
    get:
      summary: 'GET branches/{id}'
      operationId: getBranchById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildren
          in: query
          required: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Branch'
      tags:
        - Branches
    put:
      summary: 'PUT branches/{id}'
      operationId: updateBranchById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Branch'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Branch'
      tags:
        - Branches
    delete:
      summary: 'DELETE branches/{id}'
      operationId: deleteBranchById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Branches
  '/branches/{id}/compatible-branches':
    get:
      summary: 'GET branches/{id}/compatible-branches'
      operationId: getCompatibleBranches
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CompatibleBranch'
      tags:
        - Branches
    put:
      summary: 'PUT branches/{id}/compatible-branches'
      operationId: updateCompatibleBranches
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CompatibleBranchPutRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CompatibleBranch'
      tags:
        - Branches
  /service-workers:
    get:
      summary: GET service-workers
      operationId: findServiceWorkerByPredicate
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: searchText
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ServiceWorker'
      tags:
        - Misc
  /bookings:
    get:
      summary: GET bookings
      operationId: getBookingsByBranch
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: intersectTime
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: includeChildren
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: searchText
          in: query
          required: false
          schema:
            type: string
        - name: onlyOverdueBookings
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: hasRatingDescription
          in: query
          required: false
          schema:
            type: boolean
          description: |
            Filter bookings by whether they have a rating description.
            - true: Only bookings with a non-empty rating description
            - false: Only bookings with no rating description
        - name: directionsRelativeToBranch
          in: query
          required: false
          schema:
            type: string
            enum:
              - OUTBOUND
              - INBOUND
              - ROUND_TRIP
            example: OUTBOUND
          description: |
            This parameter is used to filter bookings based on their direction relative to the branch.
            - INBOUND: Only bookings ending in the station and coming from another station (e.g. A -> B) 
            - OUTBOUND: Only bookings starting from the station and ending in another station (e.g. B -> A)
            - ROUND_TRIP: Only bookings that start and end in the same station (e.g. A -> A)
            To list all bookings starting or ending in the station simply leave the parameter out.
        - name: activeWithin
          in: query
          required: false
          description: |-
            You need to specify this parameter twice, 
            to represent the range within which booking needs to be active.
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BookingListDTO'
      tags:
        - Bookings
    post:
      summary: POST bookings
      operationId: createBooking
      parameters:
        - name: ignoreTimeConstraints
          in: query
          required: false
          schema:
            type: boolean
          description: indicates if time constraints should be ignored when creating this booking
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddBookingByAdmin'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Booking'
      tags:
        - Bookings
  /bookings/availability:
    get:
      summary: GET bookings/availability
      operationId: getBookingAvailability
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: startDate
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: endDate
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: excludePastAvailability
          in: query
          required: false
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BookingAvailabilityDay'
      tags:
        - Bookings
  /bookings/availability/validate:
    post:
      summary: POST bookings/availability/validate
      operationId: validateBookingAvailability
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingAvailabilityValidationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingTimeValidationResult'
      tags:
        - Bookings
  /bookings/available-categories:
    get:
      summary: GET bookings/available-categories
      description: |
        Returns vehicle categories that have at least one vehicle bookable on the requested
        branch in the given timeframe. Categories without rental requirements configured for the
        branch are included only when `includeWithoutRentalRequirements=true`; categories without
        pricing are included only when `includeWithoutPricing=true`.
      operationId: getAvailableCategoriesBack
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: startTime
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: endTime
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: includeWithoutPricing
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: includeWithoutRentalRequirements
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: excludeBookingId
          in: query
          required: false
          description: |
            ID of a booking whose own timeslot should be ignored by the availability check. Used
            when editing an existing booking so that its current reservation does not make its
            own vehicle category appear unavailable.
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/JsonVehicleCategory'
      tags:
        - Bookings
  /bookings/utilization:
    get:
      summary: GET bookings/utilization
      operationId: getBookingUtilization
      parameters:
        - name: until
          in: query
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingUtilizationPerBranchResult'
      tags:
        - Bookings
  /bookings/cooldowns:
    get:
      summary: GET bookings/cooldowns
      operationId: calculateBookingCooldown
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: endBranchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: vehicleCategoryId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingCooldownResponse'
      tags:
        - Bookings
  /bookings/bookable-categories:
    get:
      summary: GET /bookings/bookable-categories
      description: Retrieve bookable vehicle categories for a specific branch. By default, only categories that have at least one vehicle assigned globally and that are configured with both pricing and rental requirements are returned. Optional flags relax the pricing/rental-requirement filters so misconfigured categories can be surfaced.
      operationId: getBookableCategoriesForAdmin
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
          description: Identifier of the branch to check bookable categories for
        - name: includeWithoutPricing
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: When true, include vehicle categories that do not have pricing configured.
        - name: includeWithoutRentalRequirements
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: When true, include vehicle categories that do not have rental requirements configured.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/JsonVehicleCategory'
      tags:
        - Bookings
  '/bookings/{bookingId}':
    get:
      summary: 'GET bookings/{bookingId}'
      operationId: getBookingById
      parameters:
        - name: bookingId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Booking'
      tags:
        - Bookings
    post:
      summary: 'POST bookings/{bookingId}'
      operationId: pickupBookingById
      x-stoplight:
        id: c67btlv0ye98z
      parameters:
        - name: bookingId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: rentalAuthOverride
          in: query
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Booking'
      tags:
        - Bookings
      x-internal: false
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties: { }
      description: ''
    patch:
      summary: 'PATCH bookings/{bookingId}'
      operationId: updateBookingById
      description: |-
        Note that by providing pricingBundleId, you can change the pricing of a booking. 
        If the pricingBundleId is not provided, the existing configuration will be reset
        and the default pricing bundle or pricing strategy will be used.
      parameters:
        - name: bookingId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: ignoreTimeConstraints
          in: query
          required: false
          schema:
            type: boolean
          description: indicates if time constraints should be ignored when updating this booking
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingUpdate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Booking'
      tags:
        - Bookings
  '/bookings/{bookingId}/approval':
    patch:
      summary: 'PATCH bookings/{bookingId}/approval'
      operationId: processApproval
      parameters:
        - name: bookingId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateBookingState'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Booking'
      tags:
        - Bookings
  '/bookings/{bookingId}/cancel':
    post:
      summary: 'POST bookings/{bookingId}/cancel'
      operationId: cancelBookingById
      description: Cancellation of a booking via admin
      parameters:
        - name: bookingId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingCancellation'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Booking'
      tags:
        - Bookings
  '/bookings/{bookingId}/deliver':
    post:
      summary: 'POST bookings/{bookingId}/deliver'
      operationId: deliverVehicleToBookingById
      parameters:
        - name: bookingId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: vehicleId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Booking'
      tags:
        - Bookings
  '/bookings/{bookingId}/billing-overview':
    get:
      summary: 'GET bookings/{bookingId}/billing-overview'
      operationId: getBookingBillingOverview
      parameters:
        - name: bookingId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingOverview'
      tags:
        - Bookings
  /balances:
    post:
      summary: POST balances
      operationId: createBalance
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Balance'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Balance'
      tags:
        - Balances
    get:
      summary: GET balances
      operationId: getBalances
      description: 'Fetch balances of a user or a group, optionally filtered by the branch they are applicable on.\nEither `userId` or `groupId` has to be provided. If both are provided, `userId` will be used.'
      parameters:
        - name: userId
          in: query
          required: false
          schema:
            type: integer
            format: int64
          description: Fetch balances for user with provided id
        - name: groupId
          in: query
          required: false
          schema:
            type: integer
            format: int64
          description: Fetch balances for group with provided id
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
          description: Limit results to balances linked to the billable branch of the branch with the provided id.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Balance'
      tags:
        - Balances
  /balances/bulk-settle:
    post:
      summary: POST balances/bulk-settle
      operationId: bulkSettleBalance
      parameters:
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 10000
        - name: branchId
          in: query
          required: false
          schema:
            type: array
            items:
              type: integer
              format: int64
        - name: balanceValue
          in: query
          required: false
          schema:
            type: number
            format: float
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkBalanceSettleResult'
      tags:
        - Balances
  '/balances/{balanceId}':
    get:
      summary: 'GET balances/{balanceId}'
      operationId: findBalance
      parameters:
        - name: balanceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Balance'
      tags:
        - Balances
  '/balances/{balanceId}/events':
    get:
      summary: 'GET balances/{balanceId}/events'
      operationId: findBalanceEventsByGUserAndBalance
      parameters:
        - name: balanceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Event'
      tags:
        - Balances
  '/balances/{balanceId}/settle':
    post:
      summary: 'POST balances/{balanceId}/settle'
      operationId: settleBalanceByBalanceId
      parameters:
        - name: balanceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Balances
  '/balances/{balanceId}/settle-by-collection-invoice':
    post:
      summary: 'POST balances/{balanceId}/settle-by-collection-invoice'
      operationId: generateCollectionInvoice
      parameters:
        - name: balanceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Balances
  '/balances/{balanceId}/updates':
    get:
      summary: 'GET balances/{balanceId}/updates'
      operationId: getBalanceUpdatesById
      parameters:
        - name: balanceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BalanceUpdate'
      tags:
        - Balances
  '/balances/extended':
    get:
      summary: 'GET balances/extended'
      operationId: getBalanceExtended
      parameters:
        - name: userId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: vehicleId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Balance'
      tags:
        - Balances
  /stations:
    get:
      summary: GET stations
      operationId: getAllStations
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildren
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StationListDTO'
      tags:
        - Stations
    post:
      summary: POST stations
      operationId: createStation
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Station'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Station'
      tags:
        - Stations
  '/stations/{id}':
    get:
      summary: 'GET stations/{id}'
      operationId: getStationDetails
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StationDetails'
      tags:
        - Stations
    patch:
      summary: 'PATCH stations/{id}'
      operationId: updateStation
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Station'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Station'
      tags:
        - Stations
    delete:
      summary: 'DELETE stations/{id}'
      operationId: deleteStation
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Stations
  /rentals:
    get:
      summary: GET rentals
      operationId: getRentalsByBranch
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildren
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: intersectTime
          in: query
          required: false
          description: Filters rentals whose time window contains the given timestamp (startTime <= intersectTime AND endTime >= intersectTime). Rentals with a null endTime (e.g. active free-floating rentals) are excluded since the comparison fails.
          schema:
            type: string
            format: date-time
        - name: startTime
          in: query
          required: false
          description: >-
            Filters rentals by their start time. Supports two modes:
            - **Single value**: filters rentals where startTime falls within the given calendar day (truncated to day boundaries).
            - **Range (two values)**: pass the parameter twice to define a from/to range, e.g. `?startTime=2026-03-01T00:00:00Z&startTime=2026-04-01T00:00:00Z` returns rentals with startTime between those two timestamps.
          schema:
            type: array
            items:
              type: string
              format: date-time
            minItems: 1
            maxItems: 2
        - name: rating
          in: query
          required: false
          schema:
            type: array
            items:
              type: integer
              format: int32
        - name: ratingDescription
          in: query
          required: false
          schema:
            type: boolean
        - name: activeDeposit
          in: query
          required: false
          schema:
            type: boolean
        - name: priceGross
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/BigDecimal'
        - name: unrebatedGross
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/BigDecimal'
        - name: includeOnDemandOnly
          description: Returns only rentals that are on-demand (aka free-floating)
          in: query
          required: false
          schema:
            type: boolean
        - name: searchText
          in: query
          required: false
          schema:
            type: string
          description: 'search by first name, last name, license plate or rental ID'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RentalListDTO'
      tags:
        - Rentals
    post:
      summary: POST rentals
      operationId: addRentalByAdmin
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdminAddRental'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rental'
      tags:
        - Rentals
  '/rentals/{rentalId}':
    get:
      summary: 'GET rentals/{rentalId}'
      operationId: getRentalById
      parameters:
        - name: rentalId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rental'
      tags:
        - Rentals
    delete:
      summary: 'DELETE rentals/{rentalId}'
      operationId: deleteReservationById
      parameters:
        - name: rentalId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rental'
      tags:
        - Rentals
  /rentals/export:
    get:
      summary: GET rentals/export
      operationId: getRentalsForExport
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: includeChildren
          in: query
          required: false
          schema:
            type: boolean
        - name: includeChildBranches
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: yearMonth
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/YearMonth'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RentalExportDTO'
      tags:
        - Rentals
  '/rentals/{id}/routes':
    get:
      summary: 'GET rentals/{id}/routes'
      operationId: getRentalRouteDetails
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RentalWaypointDTO'
      tags:
        - Rentals
  /rentals/additions:
    post:
      summary: POST rentals/additions
      operationId: createRentalAddition
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RentalAdditionCreation'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RentalAddition'
      tags:
        - Rentals
    get:
      summary: GET rentals/additions
      operationId: searchAndCalculateRentalAdditions
      parameters:
        - name: pricingBundleVersionId
          in: query
          required: false
          description: >-
            Filter additions by a specific pricing bundle version. Takes highest priority when provided.
            Overrides `pricingBundleId`, `vehicleCategoryId`, and `branchId`.
          schema:
            type: integer
            format: int64
        - name: pricingBundleId
          in: query
          required: false
          description: >-
            Filter additions by a specific pricing bundle. Takes priority over `vehicleCategoryId` and `branchId`.
            Also used for price calculation when `vehicleCategoryId` and `branchId` are provided.
          schema:
            type: integer
            format: int64
        - name: vehicleCategoryId
          in: query
          required: false
          schema:
            type: integer
            format: int64
          description: >-
            Filter additions for this vehicle category. When provided, `branchId` is required.
            Pricing information is included in the response when both `vehicleCategoryId` and `branchId` are provided.
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
          description: >-
            Filter additions for this branch. Required when `vehicleCategoryId` is provided.
            Used together with `vehicleCategoryId` to include pricing information in the response.
        - name: bookingStartTime
          in: query
          description: >-
            The start time of the booking, used for price estimation. Must be provided together with `bookingEndTime`; providing only one of the two returns a `400` error with code `S150` ("Booking start date or end date is not specified"). When both are provided, `bookingEndTime` must be after `bookingStartTime` or a `400` error with code `S117.2` is returned. Omitting both is allowed and skips time-based price estimation. Only relevant when `vehicleCategoryId` is provided.
          schema:
            type: string
            format: date-time
        - name: bookingEndTime
          in: query
          description: >-
            The end time of the booking, used for price estimation. Must be provided together with `bookingStartTime`; providing only one of the two returns a `400` error with code `S150` ("Booking start date or end date is not specified"). When both are provided, `bookingEndTime` must be after `bookingStartTime` or a `400` error with code `S117.2` is returned. Omitting both is allowed and skips time-based price estimation. Only relevant when `vehicleCategoryId` is provided.
          schema:
            type: string
            format: date-time
        - name: guserId
          in: query
          description: User ID for annotation-based filtering of available additions.
          schema:
            type: integer
            format: int64
        - name: userGroupId
          in: query
          description: User group ID for annotation-based filtering of available additions.
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          headers:
            X-Total-Count:
              description: Total number of matching additions
              schema:
                type: integer
            X-Total-Pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RentalAddition'
      tags:
        - Rentals
      description: |-
        Retrieve rental additions with optional filtering and pricing information.

        The additions returned are resolved based on the following priority:
        1. `pricingBundleVersionId` — returns additions from that specific bundle version
        2. `pricingBundleId` — returns additions from the latest version of that bundle
        3. `vehicleCategoryId` + `branchId` — returns additions configured for that vehicle category (requires `branchId`)
        4. No filter parameters — returns all additions (paginated)

        When `vehicleCategoryId` and `branchId` are both provided, pricing information is calculated and included for each addition. The booking start and end time can be provided to refine the pricing estimation.

        Results are always paginated. Use `page`, `size`, and `sort` query parameters for pagination control.
  '/rentals/additions/{id}':
    get:
      summary: 'GET rentals/additions/{id}'
      operationId: getRentalAdditionById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RentalAddition'
      tags:
        - Rentals
    patch:
      summary: 'PATCH rentals/additions/{id}'
      operationId: updateRentalAdditionById
      description: |
        This endpoint is **deprecated** and will be removed in a future release.
        Please use **`PATCH /additions-management/{id}`** instead.
      deprecated: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RentalAddition'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RentalAddition'
      tags:
        - Rentals
    delete:
      summary: 'DELETE rentals/additions/{id}'
      operationId: deleteRentalAdditionById
      description: |
        This endpoint is **deprecated** and will be removed in a future release.
        Please use **`DELETE /additions-management/{id}`** instead.
      deprecated: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Rentals
  '/rentals/{rentalId}/operation':
    post:
      summary: 'POST rentals/{rentalId}/operation'
      operationId: rentalOperationById
      parameters:
        - name: rentalId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdminRentalOperation'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rental'
      tags:
        - Rentals
  '/rentals/{rentalId}/release-deposit':
    post:
      summary: 'POST rentals/{rentalId}/release-deposit'
      operationId: releaseDepositByRentalId
      parameters:
        - name: rentalId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rental'
      tags:
        - Rentals
  '/rentals/{rentalId}/billing-overview':
    get:
      summary: 'GET rentals/{rentalId}/billing-overview'
      operationId: getRentalBillingOverview
      parameters:
        - name: rentalId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingOverview'
      tags:
        - Rentals
  /vouchers:
    get:
      summary: GET vouchers
      operationId: getAllVouchers
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Voucher'
      tags:
        - Vouchers
    post:
      summary: POST vouchers
      deprecated: true
      operationId: createVouchersDeprecated
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateVouchers'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Voucher'
      tags:
        - Vouchers
  '/vouchers/by-code/{code}':
    get:
      summary: 'GET vouchers/by-code/{code}'
      operationId: getByCode
      parameters:
        - name: code
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Voucher'
      tags:
        - Vouchers
  /vouchers/constraint-vouchers:
    get:
      summary: GET vouchers/constraint-vouchers
      operationId: getConstraintVouchers
      parameters:
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Voucher'
      tags:
        - Vouchers
  '/vouchers/constraint-vouchers/{id}/cancel':
    post:
      summary: 'POST vouchers/constraint-vouchers/{id}/cancel'
      operationId: cancelConstraintVoucher
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Vouchers
  /vouchers/redeemable:
    post:
      summary: POST vouchers/redeemable
      operationId: createVouchers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateVouchers'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Voucher'
      tags:
        - Vouchers
  /vouchers/redeemable/constraint:
    post:
      summary: POST vouchers/redeemable/constraint
      operationId: createConstraintVouchers
      description: |-
        Allows the creation of unique marketing vouchers where every code can only be redeemed once.

        `VOUCHER_CREATE` permission is needed to perform this action.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateVouchers'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Voucher'
      tags:
        - Vouchers
  /vouchers/redeemable/summary:
    get:
      summary: GET vouchers/redeemable/summary
      operationId: getRedeemableSummary
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RedeemableVoucherSummary'
      tags:
        - Vouchers
  /vouchers/voucher-campaigns:
    get:
      summary: GET vouchers/voucher-campaigns
      deprecated: true
      operationId: getVoucherCampaigns
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VoucherCampaign'
      tags:
        - Vouchers
  /roles:
    get:
      summary: GET roles
      operationId: getAll
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RoleWithPermissions'
      tags:
        - Roles
    post:
      summary: POST roles
      operationId: createRole
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RoleWithPermissions'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleWithPermissions'
      tags:
        - Roles
  /roles/assignments:
    get:
      summary: GET roles/assignments
      operationId: findRoleAssignmentsByPredicate
      parameters:
        - name: guserId
          in: query
          required: false
          schema:
            type: array
            items:
              type: integer
              format: int64
        - name: roleName
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RoleAssignment'
      tags:
        - Roles
    post:
      summary: POST roles/assignments
      operationId: addRoleAssignment
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RoleAssignment'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleAssignment'
      tags:
        - Roles
  /roles/assignments-detailed:
    get:
      summary: GET roles/assignments-detailed
      operationId: findCustomersWithRolesByBranch
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GUserWithRoles'
      tags:
        - Roles
  /roles/assignments/exists:
    get:
      summary: GET roles/assignments/exists
      operationId: hasGivenPermission
      parameters:
        - name: permission
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
              enum:
                - ANALYTICS_READ
                - USER_DEMAND_READ
                - BALANCE_CHARGE
                - BALANCE_READ
                - BALANCE_CREATE
                - BOOKING_CREATE
                - BOOKING_READ
                - BOOKING_LIST_READ
                - BOOKING_UPDATE
                - BOOKING_PICKUP
                - BOOKING_DELIVER_VEHICLE
                - BOOKING_UTILIZATION
                - BOOKING_EVENTS
                - BRANCH_CREATE
                - BRANCH_READ
                - BRANCH_UPDATE
                - BRANCH_DELETE
                - BRANCH_ADD_NOTES
                - BRANCH_READ_NOTES
                - VEHICLE_CATEGORY_BASIC_READ
                - VEHICLE_CATEGORY_CREATE
                - VEHICLE_CATEGORY_READ
                - VEHICLE_CATEGORY_UPDATE
                - VEHICLE_CATEGORY_DELETE
                - VEHICLE_CATEGORY_RELOAD
                - EVENT_READ
                - FILE_CREATE_PUBLIC_ASSET
                - IMPERSONATED_USER_CREATE
                - INVOICE_READ
                - INVOICE_REFUND
                - INVOICE_UPDATE
                - INVOICE_EXPORT
                - ISSUE_CREATE
                - ISSUE_READ
                - ISSUE_LIST_READ
                - ISSUE_UPDATE
                - ISSUE_INVOICE
                - ISSUE_READ_FILES
                - MESSAGE_RESOURCE_CREATE
                - MESSAGE_RESOURCE_READ
                - MESSAGE_RESOURCE_UPDATE
                - MESSAGE_RESOURCE_DELETE
                - MESSAGE_RESOURCE_RELOAD
                - MESSAGE_TRANSMISSION_READ
                - MODULE_CREATE
                - MODULE_READ
                - MODULE_RETIREMENTS_READ
                - MODULE_RETIRE
                - MODULE_UPDATE
                - PAYMENT_DELETE_SOURCE
                - PAYMENT_READ
                - PAYMENT_RETRY
                - PACKAGE_READ
                - PACKAGE_CREATE
                - PACKAGE_UPDATE
                - PACKAGE_DELETE
                - PROMOTION_READ
                - PROMOTION_CREATE
                - PROMOTION_UPDATE
                - PROMOTION_DELETE
                - RENTAL_CREATE
                - RENTAL_READ
                - RENTAL_LIST_READ
                - RENTAL_RECALCULATE_TIMES
                - RENTAL_OPERATION
                - RENTAL_ADD_NOTES
                - RENTAL_READ_NOTES
                - RENTAL_UPDATE_FILES
                - RENTAL_READ_FILES
                - RENTAL_EXPORT
                - RENTAL_EVENTS
                - RENTAL_DEPOSIT_RELEASE
                - RENTAL_ADDITION_CREATE
                - RENTAL_ADDITION_DELETE
                - RENTAL_ADDITION_READ
                - RENTAL_ADDITION_UPDATE
                - RENTAL_AUTHORITY_CREATE
                - RENTAL_AUTHORITY_DELETE
                - RENTAL_AUTHORITY_READ
                - RENTAL_AUTHORITY_UPDATE
                - REWARD_FLAG_VEHICLE
                - REWARD_CREATE
                - REWARD_DELETE
                - REWARD_READ
                - REWARD_UPDATE
                - ROLE_ASSIGNMENT_READ
                - ROLE_ASSIGNMENT_UPDATE
                - ROLE_CREATE
                - ROLE_DELETE
                - ROLE_READ
                - ROLE_UPDATE
                - SETTING_CREATE
                - SETTING_DELETE
                - SETTING_READ
                - SETTING_RELOAD
                - SETTING_UPDATE
                - SETTING_VALIDATE
                - SUBSCRIPTION_CREATE
                - SUBSCRIPTION_DELETE
                - SUBSCRIPTION_READ
                - SUBSCRIPTION_UPDATE
                - USER_CREATE
                - USER_READ
                - USER_READ_ALL_BRANCHES
                - USER_READ_FILES
                - USER_REMOVE_SIGN_IN_METHOD
                - USER_LIST_READ
                - USER_LIST_READ_ALL_BRANCHES
                - USER_DELETE
                - USER_ADD_CREDIT
                - USER_ADD_NOTES
                - USER_READ_NOTES
                - USER_EXPORT
                - USER_ASSIGN_CUSTOMER_CARE_VOUCHER
                - USER_UPDATE
                - USER_UPDATE_DATA
                - USER_UPDATE_BLOCK
                - USER_UPDATE_HOME_BILLABLE_BRANCH
                - USER_UPDATE_LICENSE_VERIFICATION
                - USER_UPDATE_MANUAL_VERIFICATION
                - USER_UPDATE_FILES
                - USER_UPDATE_PROPERTIES
                - USER_UPDATE_PAYMENT_STATE
                - USER_TAGS
                - USER_EVENTS
                - USER_LICENSE_VERIFICATION_READ
                - USER_AUTHENTICATION_READ
                - USER_AUTHENTICATION_LOGOUT
                - USER_AUTHENTICATION_LOGOUT_ROLES
                - USER_ADD_EMAIL_SIGN_IN_METHOD
                - USER_ADD_EMAIL_CODE_SIGN_IN_METHOD
                - USER_ADD_PHONE_SIGN_IN_METHOD
                - USER_RESET_MFA
                - USER_GROUP_CREATE
                - USER_GROUP_READ
                - USER_GROUP_LIST_READ
                - USER_GROUP_UPDATE
                - USER_GROUP_MEMBERS_READ
                - USER_GROUP_DELETE
                - USER_GROUP_ADD_MEMBERS
                - USER_GROUP_REMOVE_MEMBERS
                - USER_GROUP_CREATE_JOIN_REQUESTS
                - USER_GROUP_ASSIGN_VOUCHER
                - USER_GROUP_ADD_CREDIT
                - VEHICLE_CREATE
                - VEHICLE_READ
                - VEHICLE_LIST_READ
                - VEHICLE_RETIRE
                - VEHICLE_ADD_NOTES
                - VEHICLE_READ_NOTES
                - VEHICLE_UPDATE
                - VEHICLE_UPDATE_BRANCH
                - VEHICLE_UPDATE_ADDRESS
                - VEHICLE_UPDATE_CODE
                - VEHICLE_UPDATE_LICENSE_PLATE
                - VEHICLE_UPDATE_INSPECTION_DATE
                - VEHICLE_UPDATE_POSITION
                - VEHICLE_UPDATE_FILES
                - VEHICLE_READ_FILES
                - VEHICLE_UPDATE_SERVICE_STATE
                - VEHICLE_UPDATE_CUSTOM_PROPERTIES
                - VEHICLE_UPDATE_VIN
                - VEHICLE_UPDATE_CATEGORY
                - VEHICLE_UPDATE_ADD_MODULE
                - VEHICLE_UPDATE_REMOVE_MODULE
                - VEHICLE_ACTIVITY_CREATE
                - VEHICLE_ACTIVITY_READ
                - VEHICLE_ACTIVITY_UPDATE
                - VEHICLE_ACTIVITY_DELETE
                - VEHICLE_CUSTOM_COMMAND_CREATE
                - VEHICLE_CUSTOM_COMMAND_READ
                - VEHICLE_CUSTOM_COMMAND_UPDATE
                - VEHICLE_CUSTOM_COMMAND_DELETE
                - VEHICLE_COMPOSITE_ACTIVITY_CREATE
                - VEHICLE_COMPOSITE_ACTIVITY_READ
                - VEHICLE_COMPOSITE_ACTIVITY_UPDATE
                - VEHICLE_COMPOSITE_ACTIVITY_DELETE
                - VEHICLE_COMMAND
                - VEHICLE_COMMAND_CUSTOM
                - VEHICLE_COMMAND_UPDATE
                - VEHICLE_COMMAND_OPENTAILBOX
                - VEHICLE_COMMAND_LOCATE
                - VEHICLE_COMMAND_START
                - VEHICLE_COMMAND_STOP
                - VEHICLE_COMMAND_ALARM
                - VEHICLE_COMMAND_SADDLE
                - VEHICLE_COMMAND_REBOOT
                - VEHICLE_COMMAND_LOCKING
                - VEHICLE_CONFIG_SPEED
                - VEHICLE_DAMAGE_READ
                - VEHICLE_DAMAGE_CREATE
                - VEHICLE_DAMAGE_UPDATE
                - VEHICLE_EVENTS
                - VEHICLE_MAINTENANCE
                - VEHICLE_TAGS
                - VEHICLE_RADAR_LIST_READ
                - VEHICLE_RADAR_READ
                - MAINTENANCE_ROUTING
                - VOUCHER_CREATE
                - VOUCHER_READ
                - VOUCHER_CANCEL
                - VOUCHERABLE_CREATE
                - VOUCHERABLE_READ
                - VOUCHERABLE_UPDATE
                - VOUCHERABLE_DELETE
                - TRIGGERED_VOUCHERABLE_READ
                - TRIGGERED_VOUCHERABLE_CREATE
                - TRIGGERED_VOUCHERABLE_UPDATE
                - TRIGGERED_VOUCHERABLE_DELETE
                - CUSTOMER_CARE_VOUCHERABLE_READ
                - CUSTOMER_CARE_VOUCHERABLE_CREATE
                - CUSTOMER_CARE_VOUCHERABLE_UPDATE
                - CUSTOMER_CARE_VOUCHERABLE_DELETE
                - SIGNUP_REFERRAL_VOUCHERABLE_READ
                - SIGNUP_REFERRAL_VOUCHERABLE_CREATE
                - SIGNUP_REFERRAL_VOUCHERABLE_UPDATE
                - SIGNUP_REFERRAL_VOUCHERABLE_DELETE
                - VEHICLE_PROMOTION_VOUCHERABLE_READ
                - VEHICLE_PROMOTION_VOUCHERABLE_CREATE
                - VEHICLE_PROMOTION_VOUCHERABLE_UPDATE
                - VEHICLE_PROMOTION_VOUCHERABLE_DELETE
                - STATION_CREATE
                - STATION_READ
                - STATION_UPDATE
                - STATION_DELETE
                - TAG_UPDATE
                - TAG_DELETE
                - TASK_READ
                - TASK_CREATE
                - TASK_UPDATE
                - TASK_DELETE
                - TASK_TAGS
                - TERMS_AND_CONDITIONS_CREATE
                - TERMS_AND_CONDITIONS_READ
                - TERMS_AND_CONDITIONS_UPDATE
                - TERMS_AND_CONDITIONS_DELETE
                - TUTORIAL_CREATE
                - TUTORIAL_DELETE
                - TUTORIAL_READ
                - TUTORIAL_UPDATE
                - API_CLIENT_CREATE
                - POI_CATEGORY_CREATE
                - POI_CATEGORY_DELETE
                - POI_CATEGORY_READ
                - POI_CATEGORY_UPDATE
                - POI_CREATE
                - POI_DELETE
                - POI_READ
                - POI_UPDATE
                - POI_STATION_CREATE
                - POI_STATION_DELETE
                - POI_STATION_READ
                - POI_STATION_UPDATE
                - POI_VEHICLE_CREATE
                - POI_VEHICLE_DELETE
                - POI_VEHICLE_READ
                - POI_VEHICLE_UNLOCK
                - POI_VEHICLE_UPDATE
                - AREA_CREATE
                - AREA_READ
                - AREA_UPDATE
                - AREA_DELETE
                - AREA_TYPE_CREATE
                - AREA_TYPE_READ
                - AREA_TYPE_UPDATE
                - AREA_TYPE_DELETE
                - BUSINESS_UNIT_LIST
                - BUSINESS_UNIT_DELETE
                - BUSINESS_UNIT_CREATE
                - BUSINESS_UNIT_UPDATE
                - UNKNOWN
                - ALL_PERMISSION_NAMES
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
                enum:
                  - ANALYTICS_READ
                  - USER_DEMAND_READ
                  - BALANCE_CHARGE
                  - BALANCE_READ
                  - BALANCE_CREATE
                  - BOOKING_CREATE
                  - BOOKING_READ
                  - BOOKING_LIST_READ
                  - BOOKING_UPDATE
                  - BOOKING_PICKUP
                  - BOOKING_DELIVER_VEHICLE
                  - BOOKING_UTILIZATION
                  - BOOKING_EVENTS
                  - BRANCH_CREATE
                  - BRANCH_READ
                  - BRANCH_UPDATE
                  - BRANCH_DELETE
                  - BRANCH_ADD_NOTES
                  - BRANCH_READ_NOTES
                  - VEHICLE_CATEGORY_BASIC_READ
                  - VEHICLE_CATEGORY_CREATE
                  - VEHICLE_CATEGORY_READ
                  - VEHICLE_CATEGORY_UPDATE
                  - VEHICLE_CATEGORY_DELETE
                  - VEHICLE_CATEGORY_RELOAD
                  - EVENT_READ
                  - FILE_CREATE_PUBLIC_ASSET
                  - IMPERSONATED_USER_CREATE
                  - INVOICE_READ
                  - INVOICE_REFUND
                  - INVOICE_UPDATE
                  - INVOICE_EXPORT
                  - ISSUE_CREATE
                  - ISSUE_READ
                  - ISSUE_LIST_READ
                  - ISSUE_UPDATE
                  - ISSUE_INVOICE
                  - ISSUE_READ_FILES
                  - MESSAGE_RESOURCE_CREATE
                  - MESSAGE_RESOURCE_READ
                  - MESSAGE_RESOURCE_UPDATE
                  - MESSAGE_RESOURCE_DELETE
                  - MESSAGE_RESOURCE_RELOAD
                  - MESSAGE_TRANSMISSION_READ
                  - MODULE_CREATE
                  - MODULE_READ
                  - MODULE_RETIREMENTS_READ
                  - MODULE_RETIRE
                  - MODULE_UPDATE
                  - PAYMENT_DELETE_SOURCE
                  - PAYMENT_READ
                  - PAYMENT_RETRY
                  - PACKAGE_READ
                  - PACKAGE_CREATE
                  - PACKAGE_UPDATE
                  - PACKAGE_DELETE
                  - PROMOTION_READ
                  - PROMOTION_CREATE
                  - PROMOTION_UPDATE
                  - PROMOTION_DELETE
                  - RENTAL_CREATE
                  - RENTAL_READ
                  - RENTAL_LIST_READ
                  - RENTAL_RECALCULATE_TIMES
                  - RENTAL_OPERATION
                  - RENTAL_ADD_NOTES
                  - RENTAL_READ_NOTES
                  - RENTAL_UPDATE_FILES
                  - RENTAL_READ_FILES
                  - RENTAL_EXPORT
                  - RENTAL_EVENTS
                  - RENTAL_DEPOSIT_RELEASE
                  - RENTAL_ADDITION_CREATE
                  - RENTAL_ADDITION_DELETE
                  - RENTAL_ADDITION_READ
                  - RENTAL_ADDITION_UPDATE
                  - RENTAL_AUTHORITY_CREATE
                  - RENTAL_AUTHORITY_DELETE
                  - RENTAL_AUTHORITY_READ
                  - RENTAL_AUTHORITY_UPDATE
                  - REWARD_FLAG_VEHICLE
                  - REWARD_CREATE
                  - REWARD_DELETE
                  - REWARD_READ
                  - REWARD_UPDATE
                  - ROLE_ASSIGNMENT_READ
                  - ROLE_ASSIGNMENT_UPDATE
                  - ROLE_CREATE
                  - ROLE_DELETE
                  - ROLE_READ
                  - ROLE_UPDATE
                  - SETTING_CREATE
                  - SETTING_DELETE
                  - SETTING_READ
                  - SETTING_RELOAD
                  - SETTING_UPDATE
                  - SETTING_VALIDATE
                  - SUBSCRIPTION_CREATE
                  - SUBSCRIPTION_DELETE
                  - SUBSCRIPTION_READ
                  - SUBSCRIPTION_UPDATE
                  - USER_CREATE
                  - USER_READ
                  - USER_READ_ALL_BRANCHES
                  - USER_READ_FILES
                  - USER_REMOVE_SIGN_IN_METHOD
                  - USER_LIST_READ
                  - USER_LIST_READ_ALL_BRANCHES
                  - USER_DELETE
                  - USER_ADD_CREDIT
                  - USER_ADD_NOTES
                  - USER_READ_NOTES
                  - USER_EXPORT
                  - USER_ASSIGN_CUSTOMER_CARE_VOUCHER
                  - USER_UPDATE
                  - USER_UPDATE_DATA
                  - USER_UPDATE_BLOCK
                  - USER_UPDATE_HOME_BILLABLE_BRANCH
                  - USER_UPDATE_LICENSE_VERIFICATION
                  - USER_UPDATE_MANUAL_VERIFICATION
                  - USER_UPDATE_FILES
                  - USER_UPDATE_PROPERTIES
                  - USER_UPDATE_PAYMENT_STATE
                  - USER_TAGS
                  - USER_EVENTS
                  - USER_LICENSE_VERIFICATION_READ
                  - USER_AUTHENTICATION_READ
                  - USER_AUTHENTICATION_LOGOUT
                  - USER_AUTHENTICATION_LOGOUT_ROLES
                  - USER_ADD_EMAIL_SIGN_IN_METHOD
                  - USER_ADD_EMAIL_CODE_SIGN_IN_METHOD
                  - USER_ADD_PHONE_SIGN_IN_METHOD
                  - USER_RESET_MFA
                  - USER_GROUP_CREATE
                  - USER_GROUP_READ
                  - USER_GROUP_LIST_READ
                  - USER_GROUP_UPDATE
                  - USER_GROUP_MEMBERS_READ
                  - USER_GROUP_DELETE
                  - USER_GROUP_ADD_MEMBERS
                  - USER_GROUP_REMOVE_MEMBERS
                  - USER_GROUP_CREATE_JOIN_REQUESTS
                  - USER_GROUP_ASSIGN_VOUCHER
                  - USER_GROUP_ADD_CREDIT
                  - VEHICLE_CREATE
                  - VEHICLE_READ
                  - VEHICLE_LIST_READ
                  - VEHICLE_RETIRE
                  - VEHICLE_ADD_NOTES
                  - VEHICLE_READ_NOTES
                  - VEHICLE_UPDATE
                  - VEHICLE_UPDATE_BRANCH
                  - VEHICLE_UPDATE_ADDRESS
                  - VEHICLE_UPDATE_CODE
                  - VEHICLE_UPDATE_LICENSE_PLATE
                  - VEHICLE_UPDATE_INSPECTION_DATE
                  - VEHICLE_UPDATE_POSITION
                  - VEHICLE_UPDATE_FILES
                  - VEHICLE_READ_FILES
                  - VEHICLE_UPDATE_SERVICE_STATE
                  - VEHICLE_UPDATE_CUSTOM_PROPERTIES
                  - VEHICLE_UPDATE_VIN
                  - VEHICLE_UPDATE_CATEGORY
                  - VEHICLE_UPDATE_ADD_MODULE
                  - VEHICLE_UPDATE_REMOVE_MODULE
                  - VEHICLE_ACTIVITY_CREATE
                  - VEHICLE_ACTIVITY_READ
                  - VEHICLE_ACTIVITY_UPDATE
                  - VEHICLE_ACTIVITY_DELETE
                  - VEHICLE_CUSTOM_COMMAND_CREATE
                  - VEHICLE_CUSTOM_COMMAND_READ
                  - VEHICLE_CUSTOM_COMMAND_UPDATE
                  - VEHICLE_CUSTOM_COMMAND_DELETE
                  - VEHICLE_COMPOSITE_ACTIVITY_CREATE
                  - VEHICLE_COMPOSITE_ACTIVITY_READ
                  - VEHICLE_COMPOSITE_ACTIVITY_UPDATE
                  - VEHICLE_COMPOSITE_ACTIVITY_DELETE
                  - VEHICLE_COMMAND
                  - VEHICLE_COMMAND_CUSTOM
                  - VEHICLE_COMMAND_UPDATE
                  - VEHICLE_COMMAND_OPENTAILBOX
                  - VEHICLE_COMMAND_LOCATE
                  - VEHICLE_COMMAND_START
                  - VEHICLE_COMMAND_STOP
                  - VEHICLE_COMMAND_ALARM
                  - VEHICLE_COMMAND_SADDLE
                  - VEHICLE_COMMAND_REBOOT
                  - VEHICLE_COMMAND_LOCKING
                  - VEHICLE_CONFIG_SPEED
                  - VEHICLE_DAMAGE_READ
                  - VEHICLE_DAMAGE_CREATE
                  - VEHICLE_DAMAGE_UPDATE
                  - VEHICLE_EVENTS
                  - VEHICLE_MAINTENANCE
                  - VEHICLE_TAGS
                  - VEHICLE_RADAR_LIST_READ
                  - VEHICLE_RADAR_READ
                  - MAINTENANCE_ROUTING
                  - VOUCHER_CREATE
                  - VOUCHER_READ
                  - VOUCHER_CANCEL
                  - VOUCHERABLE_CREATE
                  - VOUCHERABLE_READ
                  - VOUCHERABLE_UPDATE
                  - VOUCHERABLE_DELETE
                  - TRIGGERED_VOUCHERABLE_READ
                  - TRIGGERED_VOUCHERABLE_CREATE
                  - TRIGGERED_VOUCHERABLE_UPDATE
                  - TRIGGERED_VOUCHERABLE_DELETE
                  - CUSTOMER_CARE_VOUCHERABLE_READ
                  - CUSTOMER_CARE_VOUCHERABLE_CREATE
                  - CUSTOMER_CARE_VOUCHERABLE_UPDATE
                  - CUSTOMER_CARE_VOUCHERABLE_DELETE
                  - SIGNUP_REFERRAL_VOUCHERABLE_READ
                  - SIGNUP_REFERRAL_VOUCHERABLE_CREATE
                  - SIGNUP_REFERRAL_VOUCHERABLE_UPDATE
                  - SIGNUP_REFERRAL_VOUCHERABLE_DELETE
                  - VEHICLE_PROMOTION_VOUCHERABLE_READ
                  - VEHICLE_PROMOTION_VOUCHERABLE_CREATE
                  - VEHICLE_PROMOTION_VOUCHERABLE_UPDATE
                  - VEHICLE_PROMOTION_VOUCHERABLE_DELETE
                  - STATION_CREATE
                  - STATION_READ
                  - STATION_UPDATE
                  - STATION_DELETE
                  - TAG_UPDATE
                  - TAG_DELETE
                  - TASK_READ
                  - TASK_CREATE
                  - TASK_UPDATE
                  - TASK_DELETE
                  - TASK_TAGS
                  - TERMS_AND_CONDITIONS_CREATE
                  - TERMS_AND_CONDITIONS_READ
                  - TERMS_AND_CONDITIONS_UPDATE
                  - TERMS_AND_CONDITIONS_DELETE
                  - TUTORIAL_CREATE
                  - TUTORIAL_DELETE
                  - TUTORIAL_READ
                  - TUTORIAL_UPDATE
                  - API_CLIENT_CREATE
                  - POI_CATEGORY_CREATE
                  - POI_CATEGORY_DELETE
                  - POI_CATEGORY_READ
                  - POI_CATEGORY_UPDATE
                  - POI_CREATE
                  - POI_DELETE
                  - POI_READ
                  - POI_UPDATE
                  - POI_STATION_CREATE
                  - POI_STATION_DELETE
                  - POI_STATION_READ
                  - POI_STATION_UPDATE
                  - POI_VEHICLE_CREATE
                  - POI_VEHICLE_DELETE
                  - POI_VEHICLE_READ
                  - POI_VEHICLE_UNLOCK
                  - POI_VEHICLE_UPDATE
                  - AREA_CREATE
                  - AREA_READ
                  - AREA_UPDATE
                  - AREA_DELETE
                  - AREA_TYPE_CREATE
                  - AREA_TYPE_READ
                  - AREA_TYPE_UPDATE
                  - AREA_TYPE_DELETE
                  - BUSINESS_UNIT_LIST
                  - BUSINESS_UNIT_DELETE
                  - BUSINESS_UNIT_CREATE
                  - BUSINESS_UNIT_UPDATE
                  - UNKNOWN
                  - ALL_PERMISSION_NAMES
      tags:
        - Roles
  '/roles/assignments/{id}':
    delete:
      summary: 'DELETE roles/assignments/{id}'
      operationId: deleteRoleAssignment
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Roles
  /roles/permissions:
    get:
      summary: GET roles/permissions
      operationId: getAllPermissions
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Permission'
      tags:
        - Roles
  '/roles/{id}':
    put:
      summary: 'PUT roles/{id}'
      operationId: updateRole
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RoleWithPermissions'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleWithPermissions'
      tags:
        - Roles
    delete:
      summary: 'DELETE roles/{id}'
      operationId: deleteRoleWithPermission
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Roles
  '/roles/{id}/actions':
    post:
      summary: 'POST roles/{id}/actions'
      operationId: addRoleActions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: integer
                format: int64
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleWithPermissions'
      tags:
        - Roles
    delete:
      summary: 'DELETE roles/{id}/actions'
      operationId: removeRoleActions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: integer
                format: int64
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleWithPermissions'
      tags:
        - Roles
  /customer-identity-cards:
    get:
      summary: GET /customer-identity-cards
      operationId: listCustomerIdentityCards
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: searchText
          in: query
          required: false
          schema:
            type: string
          description: 'search by cardNumber, rfidUid, or rfidType'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomerIdentityCardResponse'
      tags:
        - Customer Identity Cards
      description: List customer identity cards
    post:
      summary: POST /customer-identity-cards
      operationId: createNewCustomerIdentityCards
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerIdentityCardCreationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerIdentityCardResponse'
      tags:
        - Customer Identity Cards
      description: Create a new customer identity card
    patch:
      summary: PATCH /customer-identity-cards
      operationId: batchCreateNewCustomerIdentityCards
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CustomerIdentityCardCreationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomerIdentityCardResponse'
      tags:
        - Customer Identity Cards
  '/customer-identity-cards/{cardId}':
    get:
      summary: 'GET /customer-identity-cards/{cardId}'
      operationId: retrieveCustomerIdentityCardById
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerIdentityCardResponse'
      tags:
        - Customer Identity Cards
      description: Retrieve a customer identity card by it's identifier
    patch:
      summary: 'PATCH /customer-identity-cards/{cardId}'
      operationId: updateCustomerIdentityCardById
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerIdentityCardUpdateRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerIdentityCardResponse'
      tags:
        - Customer Identity Cards
      description: Update a customer identity card
    parameters:
      - schema:
          type: string
        name: cardId
        in: path
        required: true
        description: Identifier of the card
  '/customer-identity-cards/{cardId}/assign':
    post:
      summary: 'POST /customer-identity-cards/{cardId}/assign'
      operationId: assignCustomerIdentityCardToUser
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                userId:
                  type: integer
                  format: int64
                  description: Identifier of the user that should have the card assigned
              required:
                - userId
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerIdentityCardResponse'
      tags:
        - Customer Identity Cards
      description: Assign a customer identity card to a user
    parameters:
      - schema:
          type: string
        name: cardId
        in: path
        required: true
        description: Identifier of the card
  '/customer-identity-cards/{cardId}/unassign':
    post:
      summary: 'POST /customer-identity-cards/{cardId}/unassign'
      operationId: unassignCustomerIdentityCard
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                state:
                  type: string
                  description: State of the customer identity card after the unassignment
                  default: UNASSIGNED
                  enum:
                    - UNASSIGNED
                    - BROKEN
                    - LOST
                    - ARCHIVED
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerIdentityCardResponse'
      tags:
        - Customer Identity Cards
      description: Unassign a customer identity card from a user with an optional reason
    parameters:
      - schema:
          type: string
        name: cardId
        in: path
        required: true
        description: Identifier of the card
  /vehicle-cards:
    get:
      summary: GET /vehicle-cards
      operationId: listVehicleCards
      parameters:
        - name: branchId
          in: query
          required: true
          schema:
            type: integer
            format: int64
        - name: searchText
          in: query
          required: false
          schema:
            type: string
          description: 'search by cardNumber, rfidUid, or rfidType'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleCardResponse'
      tags:
        - Vehicle Cards
      description: List vehicle cards
    post:
      summary: POST /vehicle-cards
      operationId: createNewVehicleCards
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleCardCreationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCardResponse'
      tags:
        - Vehicle Cards
      description: Create a new vehicle card
    patch:
      summary: PATCH /vehicle-cards
      operationId: batchCreateNewVehicleCards
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/VehicleCardCreationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleCardResponse'
      tags:
        - Vehicle Cards
      description: Bulk create new vehicle cards
  '/vehicle-cards/{cardId}':
    get:
      summary: 'GET /vehicle-cards/{cardId}'
      operationId: retrieveVehicleCardById
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCardResponse'
      tags:
        - Vehicle Cards
      description: Retrieve a vehicle card by it's identifier
    patch:
      summary: 'PATCH /vehicle-cards/{cardId}'
      operationId: updateVehicleCardById
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleCardUpdateRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCardResponse'
      tags:
        - Vehicle Cards
      description: Update a vehicle card
    parameters:
      - schema:
          type: string
        name: cardId
        in: path
        required: true
        description: Identifier of the card
  '/vehicle-cards/{cardId}/assign':
    post:
      summary: 'POST /vehicle-cards/{cardId}/assign'
      operationId: assignVehicleCardToUser
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                vehicleId:
                  type: integer
                  format: int64
                  description: Identifier of the vehicle that should have the card assigned
              required:
                - vehicleId
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCardResponse'
      tags:
        - Vehicle Cards
      description: Assign a vehicle card to a user
    parameters:
      - schema:
          type: string
        name: cardId
        in: path
        required: true
        description: Identifier of the card
  '/vehicle-cards/{cardId}/unassign':
    post:
      summary: 'POST /vehicle-cards/{cardId}/unassign'
      operationId: unassignVehicleCard
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                state:
                  type: string
                  description: State of the vehicle card after the unassignment
                  default: UNASSIGNED
                  enum:
                    - UNASSIGNED
                    - BROKEN
                    - LOST
                    - ARCHIVED
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleCardResponse'
      tags:
        - Vehicle Cards
      description: Unassign a vehicle card from a user with an optional reason
    parameters:
      - schema:
          type: string
        name: cardId
        in: path
        required: true
        description: Identifier of the card
  /vehicle-attribute-groups:
    get:
      summary: GET /vehicle-attribute-groups
      operationId: listVehicleAttributeGroups
      parameters:
        - name: includeAttributes
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: include all attributes of the group in the response
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleAttributeGroupResponse'
      description: List all vehicle attribute groups
      tags:
        - Vehicle Attributes
    post:
      summary: POST /vehicle-attribute-groups
      operationId: createNewVehicleAttributeGroup
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleAttributeGroupCreationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleAttributeGroupResponse'
      description: Create a new vehicle attribute group
      tags:
        - Vehicle Attributes
  '/vehicle-attribute-groups/{groupId}':
    get:
      summary: 'GET /vehicle-attribute-groups/{groupId}'
      operationId: retrieveVehicleAttributeGroupById
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleAttributeGroupResponse'
      tags:
        - Vehicle Attributes
      description: Retrieve a vehicle attribute group by it's identifier
    put:
      summary: 'PUT /vehicle-attribute-groups/{groupId}'
      operationId: updateVehicleAttributeGroupById
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleAttributeGroupUpdateRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleAttributeGroupResponse'
      tags:
        - Vehicle Attributes
      description: Update a vehicle attribute group
    delete:
      summary: 'DELETE /vehicle-attribute-groups/{groupId}'
      operationId: deleteVehicleAttributeGroupById
      responses:
        '204':
          description: deletion successful
      tags:
        - Vehicle Attributes
      description: Delete a vehicle attribute group
    parameters:
      - schema:
          type: string
        name: groupId
        in: path
        required: true
        description: Identifier of the attribute group
  '/vehicle-attribute-groups/{groupId}/vehicle-attributes':
    post:
      summary: 'POST /vehicle-attribute-groups/{groupId}/vehicle-attributes'
      operationId: createNewVehicleAttributeInGroup
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleAttributeCreationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleAttributeResponse'
      description: Create a new vehicle attribute in a group
      tags:
        - Vehicle Attributes
    parameters:
      - schema:
          type: string
        name: groupId
        in: path
        required: true
        description: Identifier of the attribute group
  '/vehicle-attribute-groups/{groupId}/vehicle-attributes/{attributeId}':
    put:
      summary: 'PUT /vehicle-attribute-groups/{groupId}/vehicle-attributes/{attributeId}'
      operationId: updateVehicleAttributeOfGroupById
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleAttributeUpdateRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleAttributeResponse'
      tags:
        - Vehicle Attributes
      description: Update a vehicle attribute within a group
    delete:
      summary: 'DELETE /vehicle-attribute-groups/{groupId}/vehicle-attributes/{attributeId}'
      operationId: deleteVehicleAttributeOfGroupById
      responses:
        '204':
          description: deletion successful
      tags:
        - Vehicle Attributes
      description: Delete a vehicle attribute from a group
    parameters:
      - schema:
          type: string
        name: groupId
        in: path
        required: true
        description: Identifier of the attribute group
      - schema:
          type: string
        name: attributeId
        in: path
        required: true
        description: Identifier of the attribute
  /booking-stations:
    get:
      summary: List booking stations
      tags:
        - Booking Stations
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BookingStation'
                  x-stoplight:
                    id: 7rvb74b3bvovf
        '404':
          description: 'Branch not Found '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      operationId: list-booking-stations
      description: List booking stations for a specified branch
      parameters:
        - $ref: '#/components/parameters/Authorization'
        - schema:
            type: string
          in: query
          name: branchId
          description: Branch unique identifier
          required: true
        - schema:
            type: string
          in: query
          name: searchText
          description: Filter stations by text
        - schema:
            type: string
          in: query
          name: sort
          description: Sort by id or name fields
    parameters: [ ]
  '/booking-stations/{bookingStationId}/vehicle-categories':
    parameters:
      - schema:
          type: integer
          format: int64
        name: bookingStationId
        in: path
        required: true
        description: Booking station (branch) unique identifier
      - schema:
          type: string
        in: query
        name: searchText
        description: Filter stations by station name
      - schema:
          type: string
          format: date-time
        in: query
        name: activeWithin
        required: false
        description: |-
          You need to specify this parameter twice, 
          to represent the timeframe within which booking were/are/will be active.
    get:
      summary: List booking station vehicle categories
      tags:
        - Booking Stations
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BookingStationVehicleCategory'
                  x-stoplight:
                    id: 5zjeazh6xd5cj
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      operationId: list-booking-station-vehicle-categories
      description: List booking station vehicle categories
      parameters: [ ]
  '/booking-stations/{bookingStationId}/vehicles':
    parameters:
      - schema:
          type: integer
          format: int64
        name: bookingStationId
        in: path
        required: true
        description: Booking station (branch) unique identifier
      - schema:
          type: array
          items:
            type: string
            format: date-time
          minItems: 2
          maxItems: 2
        style: form
        explode: true
        in: query
        name: activeWithin
        required: false
        description: |-
          Provide exactly two values (start and end) to represent the timeframe
          within which bookings were/are/will be active.
          When provided, the response also includes vehicles that move through the
          station via bookings (incoming B->A and outgoing A->B) overlapping the range.
      - schema:
          type: integer
          format: int64
        in: query
        name: vehicleCategoryId
        required: false
        description: Optional filter to only return vehicles of the specified category.
    get:
      summary: List booking station vehicles
      tags:
        - Booking Stations
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/VehicleListDTO'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      operationId: list-booking-station-vehicles
      description: |-
        Returns vehicles expected to be at the station during the optional time range,
        including vehicles currently assigned to the station, vehicles arriving via
        B->A bookings ending within the range, and vehicles leaving via A->B bookings
        that overlap the range.
      parameters: []
  /rental-requirements/start:
    get:
      summary: List rental start requirements for a user
      tags:
        - Rentals
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GUserRentalRequirement'
                  x-stoplight:
                    id: ahgo5jqluk5w3
      operationId: list-rental-start-requirements
      description: List rental start requirements for a user
      parameters:
        - schema:
            type: string
          in: query
          name: userId
          description: User unique identifier to check requirements for
          required: true
        - schema:
            type: string
          in: query
          name: branchId
          description: Used branch
        - schema:
            type: string
          in: query
          name: vehicleCategoryId
          description: Used vehicle category
        - schema:
            type: string
          in: query
          name: userGroupId
          description: In case of business rentals
        - schema:
            type: string
          in: query
          name: userGroupCode
          description: In case of business rentals
        - schema:
            type: string
            format: date-time
          in: query
          name: bookingStartTime
          description: Booking start time
        - schema:
            type: string
            format: date-time
          in: query
          name: bookingEndTime
          description: Booking end time
    parameters: [ ]
  '/booking-stations/{bookingStationId}/conflicts':
    parameters:
      - schema:
          type: integer
          format: int64
        name: bookingStationId
        in: path
        required: true
        description: Booking station unique identifier
    get:
      summary: List booking conflicts for specified period
      tags:
        - Booking Stations
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BookingConflict'
                  x-stoplight:
                    id: zfh1ru7fe45l8
              examples:
                Example 1:
                  value:
                    - vehicleCategoryId: 12
                      range:
                        startTime: '2019-08-24T14:15:22Z'
                        endTime: '2019-08-24T14:15:22Z'
                      type: OVERBOOKED
      operationId: list-booking-station-bookingStationId-conflicts
      description: List booking station conflicts per vehicle category
      parameters:
        - schema:
            type: integer
          in: query
          name: vehicleId
          description: List conflicts for specific vehicle
        - schema:
            type: integer
          in: query
          name: vehicleCategoryId
          description: List conflicts for specific vehicle category
        - schema:
            type: string
          in: query
          name: startTime
          required: true
          description: Show conflicts from this time to end time
        - schema:
            type: string
          in: query
          name: endTime
          required: true
          description: Show conflicts from start time to this time
  '/booking-stations/{bookingStationId}/capacity-forecast':
    parameters:
      - schema:
          type: integer
          format: int64
        name: bookingStationId
        in: path
        required: true
        description: Booking station unique identifier
    get:
      summary: Get forecasted vehicle capacity for the station
      tags:
        - Booking Stations
      description: |-
        Returns forecasted vehicle capacity at the booking station over the requested time window, broken down per vehicle category.

        The forecast reflects vehicle movements planned by the booking planner — including A-to-B inbound arrivals at this station and outbound departures from it. Cancelled or modified bookings are reflected automatically because the planner re-plans affected branches when a booking changes.

        Each timeline is a list of change-points; the capacity at any instant is the value of the latest change-point whose `time` is less than or equal to that instant.

        - `startTime` must be before `endTime`.
        - The requested range must be at most 32 days.
      operationId: get-booking-station-capacity-forecast
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StationCapacityForecast'
        '400':
          description: Validation failed (BS104 startTime not before endTime, BS105 duration > 32 days)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: User does not have BRANCH_READ permission on this station
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: Booking station not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      parameters:
        - schema:
            type: string
            format: date-time
          in: query
          name: startTime
          required: true
          description: Start of the forecast window (ISO 8601)
        - schema:
            type: string
            format: date-time
          in: query
          name: endTime
          required: true
          description: End of the forecast window (ISO 8601). Must be after startTime and within 32 days of startTime.
  '/booking-stations/{bookingStationId}/check-booking-creation-availability':
    parameters:
      - schema:
          type: integer
          format: int64
        name: bookingStationId
        in: path
        required: true
        description: Booking station unique identifier
    post:
      summary: Check booking availability for creation
      deprecated: true
      tags:
        - Booking Stations
      operationId: check-booking-creation-availability-on-a-station
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingCreationAvailability'
      description: |-
        **Deprecated:** Use `POST /bookings/availability/validate` instead, which combines availability checking with time constraint validations.

        Check if a new booking will cause any capacity issues on provided booking station.
      parameters:
        - schema:
            type: string
          in: query
          name: startTime
          description: Booking start time
          required: true
        - schema:
            type: string
          in: query
          name: endTime
          description: Booking end time
          required: true
        - schema:
            type: string
          in: query
          name: vehicleCategoryId
          description: Vehicle category for which booking is being created
          required: true
        - schema:
            type: string
          in: query
          name: vehicleId
          description: Vehicle for which booking is being created
          required: false
  /physical-stations:
    post:
      summary: POST /physical-stations
      description: Create a new physical station
      operationId: createPhysicalStations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhysicalStationCreate'
        required: true
      responses:
        '201':
          description: Physical Station created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStation'
      tags:
        - Physical Stations
    get:
      summary: GET /physical-stations
      description: Retrieves all stations
      operationId: getPhysicalStations
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PhysicalStation'
      tags:
        - Physical Stations
  '/physical-stations/{stationId}':
    parameters:
      - in: path
        name: stationId
        schema:
          type: integer
        required: true
        description: Unique id of the station
    patch:
      summary: 'PATCH /physical-stations/{stationId}'
      description: Update a station
      operationId: updatePhysicalStationById
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhysicalStationPatch'
        required: true
      responses:
        '200':
          description: Station updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStation'
      tags:
        - Physical Stations
    get:
      summary: 'GET /physical-stations/{stationId}'
      description: Retrieves a station
      operationId: getPhysicalStationById
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStation'
      tags:
        - Physical Stations
  '/physical-stations/{stationId}/slots':
    parameters:
      - in: path
        name: stationId
        schema:
          type: integer
        required: true
        description: Unique id of the station
    post:
      summary: 'POST /physical-stations/{stationId}/slots'
      description: Create a new station slot
      operationId: createPhysicalStationSlots
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhysicalStationSlotCreate'
        required: true
      responses:
        '201':
          description: Station slot created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationSlot'
      tags:
        - Physical Stations
    get:
      summary: 'GET /physical-stations/{stationId}/slots'
      description: Retrieves all slots of a station
      operationId: getPhysicalStationSlots
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PhysicalStationSlot'
      tags:
        - Physical Stations
  '/physical-stations/{stationId}/slots/{slotId}':
    parameters:
      - in: path
        name: stationId
        schema:
          type: integer
        required: true
        description: Unique id of the station
      - in: path
        name: slotId
        schema:
          type: integer
        required: true
        description: Unique id of the slot
    patch:
      summary: 'PATCH /physical-stations/{stationId}/slots/{slotId}'
      description: Update a station slot
      operationId: updatePhysicalStationSlotById
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhysicalStationSlotPatch'
        required: true
      responses:
        '200':
          description: Station slot updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationSlot'
      tags:
        - Physical Stations
    get:
      summary: 'GET /physical-stations/{stationId}/slots/{slotId}'
      description: Retrieves a station slot
      operationId: getPhysicalStationSlotById
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationSlot'
      tags:
        - Physical Stations
    delete:
      summary: 'DELETE /physical-stations/{stationId}/slots/{slotId}'
      description: Deletes a station slot
      operationId: deletePhysicalStationSlotById
      responses:
        '204':
          description: Station slot deleted
      tags:
        - Physical Stations
  '/physical-stations/{stationId}/slots/{slotId}/connect-vehicle':
    parameters:
      - in: path
        name: stationId
        schema:
          type: integer
        required: true
        description: Unique id of the station
      - in: path
        name: slotId
        schema:
          type: integer
        required: true
        description: Unique id of the slot
    post:
      summary: 'POST /physical-stations/{stationId}/slots/{slotId}/connect-vehicle'
      description: Connect a vehicle to a station slot
      operationId: connectVehicleToPhysicalStationSlotById
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhysicalStationSlotVehicleConnect'
        required: true
      responses:
        '200':
          description: Vehicle connected to slot
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationSlot'
      tags:
        - Physical Stations
  '/physical-stations/{stationId}/slots/{slotId}/disconnect-vehicle':
    parameters:
      - in: path
        name: stationId
        schema:
          type: integer
        required: true
        description: Unique id of the station
      - in: path
        name: slotId
        schema:
          type: integer
        required: true
        description: Unique id of the slot
    post:
      summary: 'POST /physical-stations/{stationId}/slots/{slotId}/disconnect-vehicle'
      description: Disconnect a vehicle from a station slot
      operationId: disconnectVehicleToPhysicalStationSlotById
      responses:
        '200':
          description: Vehicle disconnected from slot
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationSlot'
      tags:
        - Physical Stations
  '/physical-stations/{stationId}/parking-area':
    parameters:
      - in: path
        name: stationId
        schema:
          type: integer
        required: true
        description: Unique id of the station
    get:
      summary: 'GET /physical-stations/{stationId}/parking-area'
      description: Retrieves a station parking area
      operationId: getPhysicalStationParkingAreaById
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationParkingArea'
      tags:
        - Physical Stations
      parameters:
        - schema:
            type: boolean
          in: query
          name: includeVehicles
          description: Whether vehicles should be included into response or not
    post:
      summary: 'POST /physical-stations/{stationId}/parking-area'
      operationId: createStationParkingAreaById
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationParkingArea'
      description: Creates a station parking area
      tags:
        - Physical Stations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhysicalStationParkingAreaCreate'
    patch:
      summary: 'PATCH /physical-stations/{stationId}/parking-area'
      operationId: updateStationParkingAreaByid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationParkingArea'
      description: Updates a station parking area
      tags:
        - Physical Stations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhysicalStationParkingAreaPatch'
    delete:
      summary: 'DELETE /physical-stations/{stationId}/parking-area'
      description: Deletes a station parking area
      operationId: deleteStationParkingAreaByid
      responses:
        '204':
          description: Station parking area deleted
      tags:
        - Physical Stations
  '/physical-stations/{stationId}/parking-area/vehicles':
    parameters:
      - in: path
        name: stationId
        schema:
          type: integer
        required: true
        description: Unique id of the station
    get:
      summary: 'GET /physical-stations/{stationId}/parking-area/vehicles'
      description: Retrieves a station parking area vehicles
      operationId: getPhysicalStationParkingAreaVehicles
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Vehicle'
                  x-stoplight:
                    id: pbx7bfebc2bgt
      tags:
        - Physical Stations
      parameters: [ ]
  '/physical-stations/{stationId}/parking-area/park-vehicle':
    parameters:
      - in: path
        name: stationId
        schema:
          type: integer
        required: true
        description: Unique id of the station
    post:
      summary: 'POST /physical-stations/{stationId}/parking-area/park-vehicle'
      operationId: addVehiclesToStationParkingArea
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationParkingArea'
      tags:
        - Physical Stations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhysicalStationParkingAreaVehiclePark'
  '/physical-stations/{stationId}/parking-area/park-vehicles':
    parameters:
      - in: path
        name: stationId
        schema:
          type: integer
        required: true
        description: Unique id of the station
    post:
      summary: 'POST /physical-stations/{stationId}/parking-area/park-vehicles'
      operationId: addVehicleToStationParkingArea
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationParkingArea'
      tags:
        - Physical Stations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhysicalStationParkingAreaVehicleParkBatch'
  '/physical-stations/{stationId}/parking-area/remove-vehicle':
    parameters:
      - in: path
        name: stationId
        schema:
          type: integer
        required: true
        description: Unique id of the station
    post:
      summary: 'POST /physical-stations/{stationId}/parking-area/remove-vehicle'
      operationId: removeVehicleFromStationParkingArea
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhysicalStationParkingArea'
      tags:
        - Physical Stations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhysicalStationParkingAreaVehicleRemove'
  /on-demand-pricing-options:
    get:
      summary: GET /on-demand-pricing-options
      tags:
        - On-demand Pricing
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OnDemandPricingOption'
                  x-stoplight:
                    id: ymemfnc7sfich
      operationId: get-on-demand-pricing-options
      parameters:
        - schema:
            type: string
          in: query
          name: categoryId
          description: Vehicle category id
      description: List pricing options
  /on-demand-pricing-assignments:
    get:
      summary: GET /on-demand-pricing-assignments
      tags:
        - On-demand Pricing Assignments
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OnDemandPricingOption'
                  x-stoplight:
                    id: yta1p8oftmpbw
      operationId: get-all-assignments
      parameters: [ ]
      description: Get all on demand pricing assignments
    parameters: [ ]
    post:
      summary: POST /on-demand-pricing-assignments
      tags:
        - On-demand Pricing Assignments
      operationId: create-assignment
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OnDemandPricingAssignment'
      description: Create on demand pricing assignment
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                categoryId:
                  type: integer
                  x-stoplight:
                    id: gwmdw9xl0pjm8
                  format: int64
                branchId:
                  type: integer
                  x-stoplight:
                    id: zl2pvcx3ppvbl
                  format: int64
                priceSetttingId:
                  type: integer
                  x-stoplight:
                    id: 7u4rccx8pa13c
                  format: int64
                defaultForCategoryAndBranch:
                  type: boolean
                  x-stoplight:
                    id: cdkhrzuf1hoq2
              required:
                - categoryId
                - branchId
                - priceSetttingId
                - defaultForCategoryAndBranch
      x-stoplight:
        id: 4o8qo81hywgpc
  /on-demand-pricing-assignments/overview:
    get:
      summary: GET /on-demand-pricing-assignments/overview
      tags:
        - On-demand Pricing Assignments
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  x-stoplight:
                    id: uy6ln99uaqkbp
                  type: object
                  properties:
                    branch:
                      $ref: '#/components/schemas/Branch'
                      x-stoplight:
                        id: mqqd2huo1m3z2
                    assignments:
                      type: array
                      x-stoplight:
                        id: ku2avi1rjmuek
                      items:
                        x-stoplight:
                          id: pj1lafs8ne2mz
                        type: object
                        properties:
                          category:
                            $ref: '#/components/schemas/VehicleCategory'
                            x-stoplight:
                              id: li964tyx54yjv
                          defaultAssignment:
                            $ref: '#/components/schemas/OnDemandPricingOption'
                            x-stoplight:
                              id: 0l9jdjnf5bxjc
                          alternativeAssignments:
                            type: array
                            x-stoplight:
                              id: emz2baobgdauy
                            items:
                              $ref: '#/components/schemas/OnDemandPricingOption'
                              x-stoplight:
                                id: 69pcrewxgcspc
      operationId: get-assignments-overview
      parameters:
        - schema:
            type: string
          in: query
          name: branchId
          description: Branch identifier
      description: Get on demand pricing assignments overview
    parameters: [ ]
  /on-demand-pricing-assignments/replace-default:
    parameters: [ ]
    put:
      summary: PUT /on-demand-pricing-assignments/replace-default
      tags:
        - On-demand Pricing Assignments
      operationId: replace-default-assignment
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OnDemandPricingAssignment'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                categoryId:
                  type: integer
                  x-stoplight:
                    id: ltfuetubgbze3
                  format: int64
                branchId:
                  type: integer
                  x-stoplight:
                    id: 7wub25fnvvuss
                  format: int64
                priceSettingId:
                  type: integer
                  x-stoplight:
                    id: 08jn8sc0j10as
                  format: int64
              required:
                - categoryId
                - branchId
                - priceSettingId
      description: Replace default on demand assignment with another one
  /on-demand-pricing-assignments/replace-alternatives:
    parameters: [ ]
    put:
      summary: PUT /on-demand-pricing-assignments/replace-alternatives
      tags:
        - On-demand Pricing Assignments
      operationId: replace-alternative-assignments
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OnDemandPricingAssignment'
                  x-stoplight:
                    id: iu5nk188ozujw
      description: 'Replace alternative on demand pricing assignments '
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                categoryId:
                  type: integer
                  x-stoplight:
                    id: h0h0vzmjyo7k9
                  format: int64
                branchId:
                  type: integer
                  x-stoplight:
                    id: chuqmawhvnzs8
                  format: int64
                priceSettingIds:
                  type: array
                  x-stoplight:
                    id: x9v7hnyshmd4p
                  items:
                    x-stoplight:
                      id: u8ssumd6et861
                    type: integer
              required:
                - categoryId
                - branchId
                - priceSettingIds
  '/on-demand-pricing-assignments/{id}':
    get:
      summary: 'GET /on-demand-pricing-assignments/{id}'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OnDemandPricingAssignment'
      operationId: get-assignment-by-id
      parameters: [ ]
      description: Get on demand pricing assignment by id
      tags:
        - On-demand Pricing Assignments
    parameters:
      - schema:
          type: string
        name: id
        in: path
        required: true
        description: assignment id
    delete:
      summary: 'DELETE /on-demand-pricing-assignments/{id}'
      operationId: delete-assignment-by-id
      responses:
        '204':
          description: No Content
        '412':
          description: Precondition Failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      description: Delete on demand pricing assignment by id
      tags:
        - On-demand Pricing Assignments
  '/on-demand-pricing-assignments/{id}/mark-as-default':
    parameters:
      - schema:
          type: string
        name: id
        in: path
        required: true
        description: assignment id
    post:
      summary: 'POST /on-demand-pricing-assignments/{id}/mark-as-default'
      tags:
        - On-demand Pricing Assignments
      operationId: mark-assignment-as-default
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OnDemandPricingAssignment'
      description: Mark on demand pricing assignment as default
  '/customers/{accountId}/ratings':
    parameters:
      - schema:
          type: integer
          example: 4142
        name: accountId
        in: path
        required: true
        description: Id of either the gUser or the UserGroup.
    get:
      summary: Fetch users ratings
      tags:
        - credit-rating
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Rating'
      operationId: get-back-customers-accountId-ratings
      description: |-
        > Requires Permission: `RATING_READ`

        Return all list of all available ratings for the given accountId.
    post:
      summary: Manual creation of user credit rating
      operationId: post-back-customers-accountId-ratings
      tags:
        - credit-rating
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ManualRatingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rating'
  '/customers/{accountId}/ratings/approve':
    parameters:
      - schema:
          type: integer
          example: 4142
        name: accountId
        in: path
        required: true
        description: Id of either the gUser or the UserGroup.
    post:
      summary: Manually approve the users credit status
      tags:
        - credit-rating
      operationId: post-back-customers-accountId-ratings-approve
      responses:
        '200':
          description: OK
      description: |-
        > Requires Permission: `RATING_WRITE`
        Manually mark the users credit rating as approved (GREEN).
  '/customers/{accountId}/ratings/reject':
    parameters:
      - schema:
          type: integer
          example: 4142
        name: accountId
        in: path
        required: true
        description: Id of either the gUser or the UserGroup.
    post:
      summary: Manually reject the users credit status
      tags:
        - credit-rating
      operationId: post-back-customers-accountId-ratings-reject
      responses:
        '200':
          description: OK
      description: |-
        > Requires Permission: `RATING_WRITE`
        Manually mark the users credit rating as rejected (RED).
  '/customers/{accountId}/ratings/queue':
    parameters:
      - schema:
          type: integer
          example: 4142
        name: accountId
        in: path
        required: true
        description: Id of either the gUser or the UserGroup.
    post:
      summary: Queue retrieval of automated users credit status
      tags:
        - credit-rating
      operationId: post-back-customers-accountId-ratings-queue
      responses:
        '200':
          description: OK
      description: |-
        > Requires Permission: `RATING_TRIGGER`
        Manually (re)trigger a credit rating. This can be used to re-verify a failed credit rating after e.g. the customer has contacted the support after removing the cause for the negative rating and asked to be rechecked.

        **IMPORTANT**: Every queue request triggers a rating with the configured provider, even if an active rating is already available. As each requests incurs costs this should be used sparingly.
  '/notification-channels':
    get:
      summary: GET notification-channels
      tags:
        - notification-channels
      operationId: getNotificationChannelList
      parameters:
        - name: searchText
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NotificationChannel'
  '/notification-channels/key/{key}':
    patch:
      summary: PATCH notification-channel
      tags:
        - notification-channels
      operationId: patchNotificationChannel
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NotificationChannel"
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationChannel"
  '/thoughtspot/token':
    post:
      summary: POST thoughtspot/token
      description: Provides ThoughtSpot trusted authentication token for authenticated user with ANALYTICS_READ permission
      operationId: getThoughtSpotAccessToken
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ThoughtSpotAccessDetails"
        "401":
          description: Unauthorized - User does not have ANALYTICS_READ permission
        "403":
          description: Forbidden - ThoughtSpot service is not configured or enabled
      tags:
        - Analytics
  /business-units:
    get:
      summary: GET business-units
      operationId: listBusinessUnits
      parameters:
        - name: searchText
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BusinessUnit'
      tags:
        - Business Units
    post:
      summary: POST business-units
      operationId: createBusinessUnit
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BusinessUnit'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessUnit'
      tags:
        - Business Units
  '/business-units/{id}':
    get:
      summary: 'GET business-units/{id}'
      operationId: getBusinessUnitById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessUnit'
      tags:
        - Business Units
    put:
      summary: 'PUT business-units/{id}'
      operationId: updateBusinessUnit
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BusinessUnit'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessUnit'
      tags:
        - Business Units
    delete:
      summary: 'DELETE business-units/{id}'
      operationId: deleteBusinessUnit
      description: Only works in case the business unit has not been referenced anywhere yet.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: No Content
      tags:
        - Business Units
  /additions-management:
    post:
      summary: POST additions-management
      operationId: createAddition
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RentalAddition'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RentalAddition'
      tags:
        - Additions
    get:
      summary: GET additions-management
      operationId: searchAndCalculateAdditions
      parameters:
        - name: pricingBundleVersionId
          in: query
          required: false
          description: Filter additions to those in a specific pricing bundle version. Takes highest priority.
          schema:
            type: integer
            format: int64
        - name: pricingBundleId
          in: query
          required: false
          description: Filter additions to those in the most recent published version of this pricing bundle.
          schema:
            type: integer
            format: int64
        - name: vehicleCategoryId
          in: query
          required: false
          schema:
            type: integer
            format: int64
          description: Filter additions by vehicle category. Resolves via pricing bundle assignment for the branch/category pair, falling back to vehicle category configuration.
        - name: branchId
          in: query
          required: false
          schema:
            type: integer
            format: int64
          description: Branch context for vehicle category resolution and pricing information. Required when `vehicleCategoryId` is provided (error code RA104).
        - name: bookingStartTime
          in: query
          required: false
          description: >-
            The start time of the booking, used for price estimation when `vehicleCategoryId` and `branchId` are provided. When `vehicleCategoryId` is present, `bookingStartTime` and `bookingEndTime` must be provided together; supplying only one returns a `400` error with code `S150` ("Booking start date or end date is not specified"). When both are provided, `bookingEndTime` must be after `bookingStartTime` or a `400` error with code `S117.2` is returned. Omitting both is allowed and skips time-based price estimation. When `vehicleCategoryId` is not provided, these parameters are ignored.
          schema:
            type: string
            format: date-time
        - name: bookingEndTime
          in: query
          required: false
          description: >-
            The end time of the booking, used for price estimation when `vehicleCategoryId` and `branchId` are provided. When `vehicleCategoryId` is present, `bookingStartTime` and `bookingEndTime` must be provided together; supplying only one returns a `400` error with code `S150` ("Booking start date or end date is not specified"). When both are provided, `bookingEndTime` must be after `bookingStartTime` or a `400` error with code `S117.2` is returned. Omitting both is allowed and skips time-based price estimation. When `vehicleCategoryId` is not provided, these parameters are ignored.
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RentalAddition'
        '400':
          description: |-
            Bad Request - parameter validation failed. Possible error codes:
            - `RA104`: `branchId` is required when `vehicleCategoryId` is provided.
            - `S150`: Only one of `bookingStartTime` / `bookingEndTime` was supplied (both or neither are required when `vehicleCategoryId` is present).
            - `S117.2`: `bookingEndTime` is not after `bookingStartTime`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      tags:
        - Additions
      description: |-
        Retrieve additions with optional filtering by pricing bundle or vehicle category.

        Filtering priority:
        1. `pricingBundleVersionId` - returns additions from that specific pricing bundle version
        2. `pricingBundleId` - returns additions from the most recent published version of that bundle
        3. `vehicleCategoryId` + `branchId` (required) - returns additions resolved via pricing bundle assignment for the branch/category pair, falling back to vehicle category configuration
        4. No filter params - returns all additions (paginated)

        When both `vehicleCategoryId` and `branchId` are provided, pricing information is mapped onto each returned addition. Optional `bookingStartTime`/`bookingEndTime` control time-based pricing estimation.
  '/additions-management/{id}':
    get:
      summary: 'GET additions-management/{id}'
      operationId: getAdditionById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RentalAddition'
      tags:
        - Additions
    patch:
      summary: 'PATCH additions-management/{id}'
      operationId: updateAdditionById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RentalAddition'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RentalAddition'
      tags:
        - Additions
    delete:
      summary: 'DELETE additions-management/{id}'
      operationId: deleteAdditionById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Void'
      tags:
        - Additions
  '/{entityType}/{id}/revision-changes':
    get:
      summary: 'GET {entityType}/{id}/revision-changes'
      operationId: getRevisionChanges
      parameters:
        - name: entityType
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: sortByRevisionDate
          in: query
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Revision'
      tags:
        - Audit Logs
  '/{entityType}/{id}/revisions':
    get:
      summary: 'GET {entityType}/{id}/revisions'
      operationId: getRevisions
      parameters:
        - name: entityType
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Revision'
      tags:
        - Audit Logs
  '/{entityType}/{id}/revision-diff-at':
    get:
      summary: 'GET {entityType}/{id}/revision-diff-at'
      operationId: getRevisionDiffAt
      parameters:
        - name: entityType
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: timestamp
          in: query
          required: true
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RevisionDiff'
      tags:
        - Audit Logs
components:
  schemas:
    GenerateBluetoothTokenRequest:
      type: object
      properties:
        parameters:
          type: object
          additionalProperties: true
      required:
        - parameters
      x-stoplight:
        id: generatebluetoothtokenrequest-ops
    BluetoothToken:
      type: object
      properties:
        validFrom:
          type: string
          format: date-time
        validTo:
          type: string
          format: date-time
        deviceType:
          type: string
        bluetoothKeyId:
          type: string
        parameters:
          type: object
          additionalProperties: true
      x-stoplight:
        id: bluetoothtoken-ops
    UserDevice:
      type: object
      properties:
        deviceFamily:
          type: string
        osFamily:
          type: string
        osMajor:
          type: string
        osMinor:
          type: string
        osPatch:
          type: string
        osPatchMinor:
          type: string
        userAgentFamily:
          type: string
        userAgentMajor:
          type: string
        userAgentMinor:
          type: string
        userAgentPatch:
          type: string
      x-stoplight:
        id: nb6q4z3dttb7m
    BigDecimal:
      type: object
      properties: { }
      x-stoplight:
        id: bm7qducfffjcj
    CostSourceType:
      type: string
      enum:
        - RENTAL
        - ADDITION
        - SURCHARGE
    PriceCategoryType:
      type: string
      enum:
        - TIME
        - DISTANCE
        - PARKING
        - DRIVING
        - RESERVATION
        - UNCATEGORIZED
        - NON_REBATEABLE
    BenefitType:
      type: string
      enum:
        - VALUE
        - DISCOUNT
        - RENTAL_REBATE
        - FREE_UNLOCKS
        - DISCOUNT_ON_PACKAGES
        - ADDITION_ENTITLEMENT
        - FREE_MINUTES
    Benefit:
      type: object
      required:
        - type
      properties:
        id:
          type: integer
          format: int64
        type:
          type: string
          enum:
            - Value
            - Discount
            - RentalRebate
            - FreeUnlocks
            - DiscountOnPackages
            - AdditionEntitlement
            - FreeMinutes
          description: Discriminator for the benefit subtype.
        applicablePriceType:
          type: string
          enum:
            - TIME_PRICE
            - DRIVING_PRICE
            - PARKING_PRICE
            - DISTANCE_PRICE
            - RESERVATION_PRICE
            - UNLOCK_FEE
        costSources:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: A mapping between CostSourceType and a list of applicable cost source codes.
        validityTimeUnit:
          type: string
          enum:
            - HOURS
            - DAYS
            - WEEKS
            - MONTHS
            - YEARS
        validityPeriod:
          type: integer
          minimum: 1
        validityDateUntil:
          type: string
          format: date-time
        numberOfRentals:
          type: integer
          minimum: 1
          description: >-
            Number of rentals this benefit is valid for.
        applicableBranchIds:
          type: array
          items:
            type: integer
            format: int64
        applicableVehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
        creditAmount:
          type: number
          description: Credit amount in gross. Only for Value benefits.
        discountPercentage:
          type: number
          description: Discount as a decimal fraction (0-1). Only for Discount and DiscountOnPackages benefits.
        rebateAmount:
          type: number
          description: Rebate amount. Only for RentalRebate benefits.
        freeMinutesCount:
          type: number
          minimum: 1
          description: Number of free minutes. Only for FreeMinutes benefits.
        additionEntitlementId:
          type: integer
          format: int64
          description: ID of the entitled addition. Only for AdditionEntitlement benefits.
        additionEntitlementCode:
          type: string
          description: Code of the entitled addition. Only for AdditionEntitlement benefits.
      discriminator:
        propertyName: type
        mapping:
          Value: '#/components/schemas/Benefit'
          Discount: '#/components/schemas/Benefit'
          RentalRebate: '#/components/schemas/Benefit'
          FreeUnlocks: '#/components/schemas/Benefit'
          DiscountOnPackages: '#/components/schemas/Benefit'
          AdditionEntitlement: '#/components/schemas/Benefit'
          FreeMinutes: '#/components/schemas/Benefit'
      description: >-
        A benefit defines what a voucherable grants. The `type` property determines which
        type-specific fields are relevant. Shared fields (applicablePriceType, costSources,
        validity, numberOfRentals, applicableBranchIds, applicableVehicleCategoryIds) apply
        to all benefit types.
    Balance:
      type: object
      properties:
        id:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        ownerId:
          type: integer
          format: int64
        value:
          $ref: '#/components/schemas/BigDecimal'
        remainingVouchersGrossValue:
          $ref: '#/components/schemas/BigDecimal'
        remainingMinutesValue:
          $ref: '#/components/schemas/BigDecimal'
        name:
          type: string
        defaultBalance:
          type: boolean
        currency:
          type: string
      x-stoplight:
        id: 8o85ebp82e8q7
    Credits:
      type: object
      properties:
        remainingValueNet:
          $ref: '#/components/schemas/BigDecimal'
        remainingValueGross:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: n8sc16j5gwt8d
    Annotation:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        properties:
          type: string
      x-stoplight:
        id: e82op4rx972rv
    GUser:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        firstName:
          type: string
          minLength: 1
          maxLength: 90
        lastName:
          type: string
          minLength: 1
          maxLength: 90
        email:
          type: string
        language:
          type: string
          description: The user's desired language for UI and notifications. It must be a valid IETF BCP 47 language tag.
        birthdate:
          type: string
          format: date
        phone:
          type: string
        userDevice:
          $ref: '#/components/schemas/UserDevice'
        customProperties:
          type: string
        dashboardProperties:
          type: string
        phoneIsVerified:
          type: boolean
        emailIsVerified:
          type: boolean
        licenseExpirationDate:
          type: string
          format: date
        licenseVerificationState:
          $ref: '#/components/schemas/DocumentVerificationState'
        manualVerificationState:
          type: string
          enum:
            - UNVERIFIED
            - PROCESSING
            - VERIFIED
            - REJECTED
            - RETRY
        idExpirationDate:
          type: string
          format: date
        idVerificationState:
          type: string
          enum:
            - UNVERIFIED
            - VERIFIED
        idDocumentType:
          type: string
          enum:
            - PASSPORT
            - ID_CARD
            - DRIVERS_LICENSE
            - RESIDENCE_PERMIT
            - OTHER
        customExternalVerificationState:
          type: string
          enum:
            - UNVERIFIED
            - VERIFIED
        paymentSourceIsAvailable:
          type: boolean
        paymentState:
          type: string
          enum:
            - NONE
            - PUSH_INITIATED
            - PUSH_COMPLETED
            - SOURCE_ADDED
            - INVOICING
        paymentStates:
          type: integer
          format: int64
        creditStatus:
          type: string
          description: Credit status of the user
          enum:
            - PENDING
            - GREEN
            - YELLOW
            - RED
            - FAILED
        signupFeeSettled:
          type: boolean
        street:
          type: string
        postcode:
          type: string
        city:
          type: string
        country:
          type: string
        referralCode:
          type: string
        blockState:
          type: string
          enum:
            - NOT_BLOCKED
            - BLOCKED_UNKNOWN
            - BLOCKED_BY_ADMIN
            - BLOCKED_BY_ADMINDELETE
            - GROUP_DELETED
        receiveNewsletter:
          type: boolean
        newsletterOptions:
          type: object
          properties:
            receiveNews:
              type: boolean
            receiveMarketingOffers:
              type: boolean
        rides:
          type: integer
          format: int64
        ridesKilometers:
          type: number
          format: double
        co2SavedInG:
          type: number
          format: double
        homeBillableBranchId:
          type: integer
          format: int64
        fileIds:
          type: array
          items:
            type: integer
            format: int64
        balances:
          type: array
          items:
            $ref: '#/components/schemas/Balance'
        credits:
          $ref: '#/components/schemas/Credits'
        annotations:
          type: array
          items:
            $ref: '#/components/schemas/Annotation'
        signInMethods:
          type: string
          enum:
            - EMAIL
            - SMS
            - EMAIL_CODE
            - SOCIAL_GOOGLE
            - SOCIAL_APPLE
            - SOCIAL_FACEBOOK
            - API
            - PIM_OPENID
            - val
            - ALL
            - SOCIAL
        drivingLicenseCategories:
          type: array
          items:
            type: string
        drivingLicenseCategoryObject:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/DrivingLicenseCategoryObject'
        impersonateUuid:
          type: string
        authId:
          type: string
        requestedDeletion:
          type: boolean
      x-stoplight:
        id: 3k78bmdfj4iq1
    UserSimple:
      title: UserSimple
      x-stoplight:
        id: bjwave5yuel3d
      type: object
      examples: [ ]
      description: 'Simplified user model containing only id, first name, last name, email, phone number.'
      properties:
        id:
          type: integer
          description: 'Identifier of the user within the system, this value is assigned by the system.'
          example: 1
          readOnly: true
        firstName:
          type: string
          description: First name of the user.
          example: John
        lastName:
          type: string
          description: Last name of the user.
          example: Doe
        email:
          type: string
          format: email
          description: User's email.
          example: dummy@wundermobility.com
        phone:
          type: string
          description: User's phone number.
        userGroups:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
                description: Identifier of the user group within the system
                example: 1
              name:
                type: string
                description: Name of the user group.
                example: Evergreen Enterprises
          description: List of user groups the user is part of.
          example:
            - USER
    Part:
      type: object
      properties:
        name:
          type: string
        code:
          type: string
        critical:
          type: boolean
        posX:
          type: number
          format: double
        posY:
          type: number
          format: double
      x-stoplight:
        id: lypsvcunuyhjs
    VehicleCategoryFeature:
      type: object
      properties:
        icon:
          type: string
        title:
          type: string
      x-stoplight:
        id: nc0gi1wpxqdbp
    SharedVehicleProperties:
      type: object
      properties:
        imageUrl:
          type: string
        checksum:
          type: string
        parts:
          type: array
          items:
            $ref: '#/components/schemas/Part'
        capacity:
          type: integer
          format: int32
        cancellationTags:
          type: array
          items:
            type: string
        applicableMaintenanceActionKeys:
          type: array
          items:
            type: string
        vehicleCategoryFeatures:
          type: array
          items:
            $ref: '#/components/schemas/VehicleCategoryFeature'
        concurrentRentalCount:
          type: integer
          format: int32
        concurrentBookingCount:
          type: integer
          format: int32
        proximityCheckForServiceAppToggle:
          type: boolean
        proximityCheckForServiceAppDistanceInMeters:
          type: integer
          format: int32
      x-stoplight:
        id: 7ppzroo9llk4b
    SOCLevels:
      type: object
      properties:
        medium:
          type: integer
          format: int32
        low:
          type: integer
          format: int32
        critical:
          type: integer
          format: int32
      x-stoplight:
        id: f6xe0z3yf0x5x
    IoTBatteryLevels:
      type: object
      properties:
        medium:
          type: number
          format: float
        low:
          type: number
          format: float
        critical:
          type: number
          format: float
      x-stoplight:
        id: m45zrflr705xk
    CoreVehicleProperties:
      type: object
      properties:
        socLevels:
          $ref: '#/components/schemas/SOCLevels'
        ioTBatteryLevels:
          $ref: '#/components/schemas/IoTBatteryLevels'
        rentalAdditionPriceCalcs:
          type: string
        priceCalcKey:
          type: string
        rentalRequirementsKey:
          type: string
        preEndRentalActionsKey:
          type: string
        remainingKilometers:
          type: integer
          format: int32
        chargingTimeFactor:
          type: number
          format: double
        bookingQuota:
          type: number
          format: double
        maxSpeedInWarningArea:
          type: integer
          format: int32
        maxSpeed:
          type: integer
          format: int32
        approachVehicleActions:
          type: array
          items:
            type: string
            enum:
              - START
              - STOP
              - SET_OUT_OF_ORDER
              - SET_OPERATIONAL
              - OPEN_SADDLE
              - LOCATE
              - REFRESH
              - DELAY
              - UPDATE_BRANCH_WITH_BUSINESS_AREA_STRICT
              - ADD_ANNOTATION
              - REMOVE_ANNOTATION
              - SET_MAX_SPEED
              - LOCK
              - UNLOCK
              - OPEN_TAILBOX
              - LOCK_TAILBOX
              - UNLOCK_TAILBOX
              - parameterNameToType
              - NAME_TO_ACTION
        deployVehicleActions:
          type: array
          items:
            type: string
            enum:
              - START
              - STOP
              - SET_OUT_OF_ORDER
              - SET_OPERATIONAL
              - OPEN_SADDLE
              - LOCATE
              - REFRESH
              - DELAY
              - UPDATE_BRANCH_WITH_BUSINESS_AREA_STRICT
              - ADD_ANNOTATION
              - REMOVE_ANNOTATION
              - SET_MAX_SPEED
              - LOCK
              - UNLOCK
              - OPEN_TAILBOX
              - LOCK_TAILBOX
              - UNLOCK_TAILBOX
              - parameterNameToType
              - NAME_TO_ACTION
        leaveVehicleActions:
          type: array
          items:
            type: string
            enum:
              - START
              - STOP
              - SET_OUT_OF_ORDER
              - SET_OPERATIONAL
              - OPEN_SADDLE
              - LOCATE
              - REFRESH
              - DELAY
              - UPDATE_BRANCH_WITH_BUSINESS_AREA_STRICT
              - ADD_ANNOTATION
              - REMOVE_ANNOTATION
              - SET_MAX_SPEED
              - LOCK
              - UNLOCK
              - OPEN_TAILBOX
              - LOCK_TAILBOX
              - UNLOCK_TAILBOX
              - parameterNameToType
              - NAME_TO_ACTION
        closeVehicleActions:
          type: array
          items:
            type: string
            enum:
              - START
              - STOP
              - SET_OUT_OF_ORDER
              - SET_OPERATIONAL
              - OPEN_SADDLE
              - LOCATE
              - REFRESH
              - DELAY
              - UPDATE_BRANCH_WITH_BUSINESS_AREA_STRICT
              - ADD_ANNOTATION
              - REMOVE_ANNOTATION
              - SET_MAX_SPEED
              - LOCK
              - UNLOCK
              - OPEN_TAILBOX
              - LOCK_TAILBOX
              - UNLOCK_TAILBOX
              - parameterNameToType
              - NAME_TO_ACTION
        tompProperties:
          type: string
        rentalOperationOverrides:
          type: string
          enum:
            - START
            - END
            - DRIVE
            - PARK
            - OPEN_TAILBOX
            - PRE_END
            - PRE_START
        useIoTSoCLevel:
          type: boolean
        useIoTBatteryLevel:
          type: boolean
        useHelmetsTracking:
          type: boolean
        ignoreSoC:
          type: boolean
        triggerDockingInfoUpdateEnabled:
          type: boolean
        triggerDockingInfoUpdateCommand:
          type: string
        stationChargingToggle:
          type: boolean
        chargingLimit:
          type: integer
          format: int32
        useOutOfRentalActivityMonitoring:
          type: boolean
        type:
          type: string
      x-stoplight:
        id: sopu18jsvteeh
    VehicleCategory:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        createdBy:
          $ref: '#/components/schemas/GUser'
        updatedBy:
          $ref: '#/components/schemas/GUser'
        parentId:
          type: integer
          format: int64
        name:
          type: string
        description:
          type: string
        appProperties:
          type: string
        dashboardProperties:
          type: string
        sharedProperties:
          $ref: '#/components/schemas/SharedVehicleProperties'
        coreProperties:
          $ref: '#/components/schemas/CoreVehicleProperties'
        bookable:
          type: boolean
        vehicleCommandIds:
          type: array
          items:
            type: integer
            format: int64
        actionIds:
          type: array
          items:
            type: integer
            format: int64
        vehicleAttributeIds:
          type: array
          items:
            type: integer
            format: int64
            example: 1
          description: List of identifiers of vehicle attributes of this vehicle category.
      x-stoplight:
        id: rfcasyonufzp7
    CoordinateSequence:
      type: object
      properties: { }
      x-stoplight:
        id: fu6m478pxu6b6
    Envelope:
      type: object
      properties: { }
      x-stoplight:
        id: pl4o0uhw0upyz
    PrecisionModel:
      type: object
      properties:
        scale:
          type: number
          format: double
      x-stoplight:
        id: umqs364tz0s0l
    CoordinateSequenceFactory:
      type: object
      properties: { }
      x-stoplight:
        id: ubgqpit6u3m75
    GeometryFactory:
      type: object
      properties:
        precisionModel:
          $ref: '#/components/schemas/PrecisionModel'
        coordinateSequenceFactory:
          $ref: '#/components/schemas/CoordinateSequenceFactory'
        SRID:
          type: integer
          format: int32
      x-stoplight:
        id: 7kbn8cocoswgf
    Object:
      type: object
      properties: { }
      x-stoplight:
        id: nw59ez0kxbcbi
    Point:
      type: object
      x-examples:
        Vienna:
          type: Point
          coordinates:
            - 16.363449
            - 48.210033
      description: Describes a single point on a coordinate system
      properties:
        type:
          type: string
          default: Point
          description: The type is always set to 'Point'
        coordinates:
          type: array
          description: 'Contains two values: `[lng,lat]`'
          items:
            type: number
            format: double
    VehicleActivityLogDetails:
      type: object
      properties:
        rentalId:
          type: integer
          format: int64
        oldBranchId:
          type: integer
          format: int64
        oldBranchName:
          type: string
        newBranchId:
          type: integer
          format: int64
        newBranchName:
          type: string
        physicalStationSlot:
          type: object
          properties:
            slotId:
              type: integer
              format: int64
            stationId:
              type: integer
              format: int64
            externalId:
              type: string
        smokeDetected:
          $ref: '#/components/schemas/SmokeDetected'
        smokeDataReady:
          $ref: '#/components/schemas/SmokeDataReady'
    SmokeDetected:
      type: object
      required:
        - smokeDetectionId
      properties:
        smokeDetectionId:
          type: string
        startTimestamp:
          type: string
          format: date-time
        deviceType:
          type: string
    SmokeDataReady:
      type: object
      required:
        - smokeDetectionId
        - durationInS
        - numberOfPeaks
        - averagePm25PerCm3
        - maximumPm25PerCm3
        - sumPm25PerCm3
      properties:
        smokeDetectionId:
          type: string
        startTimestamp:
          type: string
          format: date-time
        durationInS:
          type: integer
          format: int32
        numberOfPeaks:
          type: integer
          format: int32
        averagePm25PerCm3:
          type: integer
          format: int32
        maximumPm25PerCm3:
          type: integer
          format: int32
        sumPm25PerCm3:
          type: integer
          format: int64
        deviceType:
          type: string
    Duration:
      type: object
      properties:
        seconds:
          type: integer
          format: int64
      x-stoplight:
        id: edgiwrg1rxzau
    Price:
      type: object
      properties:
        interval:
          type: integer
          format: int64
        gross:
          $ref: '#/components/schemas/BigDecimal'
        grossString:
          type: string
        net:
          $ref: '#/components/schemas/BigDecimal'
        netString:
          type: string
        timeUnit:
          type: string
          enum:
            - NANOSECONDS
            - MICROSECONDS
            - MILLISECONDS
            - SECONDS
            - MINUTES
            - HOURS
            - DAYS
            - NANO_SCALE
            - MICRO_SCALE
            - MILLI_SCALE
            - SECOND_SCALE
            - MINUTE_SCALE
            - HOUR_SCALE
            - DAY_SCALE
            - scale
            - maxNanos
            - maxMicros
            - maxMillis
            - maxSecs
            - microRatio
            - milliRatio
            - secRatio
      x-stoplight:
        id: vi6ez1qvchud1
    RentalDiscount:
      type: object
      properties:
        discountPercentage:
          $ref: '#/components/schemas/BigDecimal'
        discountValue:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: gcop2cfohtlo4
    PricingInformation:
      type: object
      properties:
        unlock:
          $ref: '#/components/schemas/Price'
        driving:
          $ref: '#/components/schemas/Price'
        parking:
          $ref: '#/components/schemas/Price'
        reservation:
          $ref: '#/components/schemas/Price'
        drivingPerKilometer:
          $ref: '#/components/schemas/Price'
        estimation:
          $ref: '#/components/schemas/Price'
        discount:
          $ref: '#/components/schemas/RentalDiscount'
        surcharge:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: buyidwgi5j6vs
    Voucherable:
      type: object
      properties:
        id:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        value:
          $ref: '#/components/schemas/BigDecimal'
        code:
          type: string
        name:
          type: string
        rawName:
          type: string
          description: 'Raw, untranslated name. In most cases this is an translation key.'
        description:
          type: string
        rawDescription:
          type: string
          description: 'Raw, untranslated description. In most cases this is an translation key.'
        iconUrl:
          type: string
        state:
          type: string
          enum:
            - INACTIVE
            - ACTIVE
        maxRedeemLimit:
          type: integer
          format: int64
        redeemCount:
          type: integer
          format: int64
        signup:
          type: boolean
        showInUserApp:
          type: boolean
        applicableBranchIds:
          type: array
          items:
            type: integer
            format: int64
        applicableVehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
        customProperties:
          type: string
      x-stoplight:
        id: vpvxhrwx6bflp
    PricedVoucherable:
      allOf:
        - $ref: '#/components/schemas/ConstraintVoucherable'
          x-stoplight:
            id: utzeyvrhzzb2i
        - type: object
          x-stoplight:
            id: 4fk0773cqfxco
          properties:
            price:
              $ref: '#/components/schemas/BigDecimal'
            invoiceDescription:
              type: string
            rawInvoiceDescription:
              type: string
              description: 'Raw, untranslated invoiceDescription. In most cases this is an translation key.'
            highlight:
              type: boolean
            currency:
              type: string
            rank:
              type: int32
            priceDetails:
              $ref: '#/components/schemas/Price'
      title: PricedVoucherable
      description: ''
    JsonGUser:
      type: object
      properties:
        id:
          type: integer
          format: int64
        firstName:
          type: string
        lastName:
          type: string
      x-stoplight:
        id: gsaiz8qpkny6t
    ConstraintVoucher:
      type: object
      properties:
        rentalRebate:
          $ref: '#/components/schemas/BigDecimal'
        discount:
          $ref: '#/components/schemas/BigDecimal'
        additionEntitlementId:
          type: integer
          format: int64
          description: 'ID of the rental addition benefit. Mutually exclusive with discount and rentalRebate.'
        additionEntitlementCode:
          type: string
          description: 'Code of the rental addition benefit (read-only).'
        numberOfRentals:
          type: integer
          format: int32
        remainingNumberOfRentals:
          type: integer
          format: int32
        validFrom:
          type: string
          format: date-time
        validUntil:
          type: string
          format: date-time
        status:
          type: string
          enum:
            - ACTIVE
            - EXPIRED
            - USED_UP
            - CANCELED
            - NOT_REDEEMED
            - PENDING
        validityTimeUnit:
          type: string
          enum:
            - NANOS
            - MICROS
            - MILLIS
            - SECONDS
            - MINUTES
            - HOURS
            - HALF_DAYS
            - DAYS
            - WEEKS
            - MONTHS
            - YEARS
            - DECADES
            - CENTURIES
            - MILLENNIA
            - ERAS
            - FOREVER
            - name
            - duration
        validityPeriod:
          type: integer
          format: int32
        validityDateUntil:
          type: string
          format: date-time
        id:
          type: integer
          format: int64
        voucherable:
          $ref: '#/components/schemas/Voucherable'
        voucherableCode:
          type: string
        branch:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        name:
          type: string
        voucherType:
          type: string
          enum:
            - SIGNUP
            - PACKAGE
            - REFERRAL
            - PROMOTION
            - BY_ADMIN
            - UNKNOWN
            - SETTLEMENT
            - TOP_UP
            - CORRECTION
            - SUBSCRIPTION
            - REWARD
            - SINGLE_USE
            - SETTLEMENT_EXTERNAL
            - CASHBACK
            - TRIGGERED
            - CUSTOMER_CARE
            - COLLECTION_INVOICE
            - log
        currency:
          type: string
        invoiceId:
          type: integer
          format: int64
        extInvoiceNumber:
          type: string
        valueNet:
          $ref: '#/components/schemas/BigDecimal'
        remainingValueNet:
          $ref: '#/components/schemas/BigDecimal'
        valueGross:
          $ref: '#/components/schemas/BigDecimal'
        remainingValueGross:
          $ref: '#/components/schemas/BigDecimal'
        redemptionCode:
          type: string
        description:
          type: string
        guser:
          $ref: '#/components/schemas/JsonGUser'
        signup:
          type: boolean
        applicableBranchIds:
          type: array
          items:
            type: integer
            format: int64
        applicableVehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
        requiredAnnotationIds:
          type: array
          items:
            type: integer
            format: int64
        redeemWindowStart:
          type: string
          format: date-time
        redeemWindowEnd:
          type: string
          format: date-time
        applicablePriceType:
          type: string
          enum:
            - TIME_PRICE
            - DRIVING_PRICE
            - PARKING_PRICE
            - DISTANCE_PRICE
            - RESERVATION_PRICE
            - UNLOCK_FEE
        canceledAt:
          type: string
          format: date-time
        prerequisitesMet:
          type: boolean
      x-stoplight:
        id: kz88um70dyozl
    JsonModule:
      type: object
      properties:
        id:
          type: integer
          format: int64
        externalId:
          type: string
        secondaryExternalId:
          type: string
        iccid:
          type: string
        macAddress:
          type: string
        type:
          type: string
          enum:
            - NIU
            - NIU_MC
            - DUMMY
            - NIU_PRTCL
            - NINEBOT_ES2
            - CUCA_BIKE
            - TRACKER
            - COMODULE_NINEBOT_ES2
            - GOVECS_GOT
            - NINEBOT_ES2_TLT
            - MANUAL_KICKSCOOTER
            - MANUAL_BICYCLE
            - NIU_TLT
            - SUPER_SOCO_TLT_125
            - CAR_TLT
            - SEGWAY_V1
            - NIU_V2
            - CAR_TLT_RELAIS
            - LANNMARKER_ZIMO
            - INVERS_CAR
            - DEVICE_CLOUD
            - NIU_V2_READ
            - DEPRECATED
      x-stoplight:
        id: 66j4hy88nrtgh
    Vehicle:
      type: object
      properties:
        id:
          type: integer
          format: int64
        code:
          description: 'Code of the vehicle, can be used as a QR code for example. Is unique independent of the casing.'
          type: string
        uuid:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        branchId:
          description: Branch this vehicle is assigned to.
          type: integer
          format: int64
        licensePlate:
          description: License plate of the vehicle. Is unique.
          type: string
        stateOfCharge:
          type: integer
          format: int32
        iotStateOfCharge:
          type: integer
          format: int32
        iotModuleLevel:
          type: number
          format: float
        categoryId:
          description: Category ID of this vehicle.
          type: integer
          format: int64
        category:
          description: Category of this vehicle.
          $ref: '#/components/schemas/VehicleCategory'
        serviceState:
          type: string
          enum:
            - OPERATIONAL
            - LOW_SOC
            - OUT_OF_ORDER
            - RETIRED
            - CRITICAL_SOC
            - IN_SERVICE
        serviceStateV2:
          $ref: '#/components/schemas/ServiceStateV2'
        chargingState:
          type: string
          enum:
            - UNKNOWN
            - UNPLUGGED
            - PLUGGED
            - CHARGING
        batteryLevel:
          type: string
          enum:
            - UNKNOWN
            - HIGH
            - LOW
            - CRITICAL
            - MEDIUM
        powerState:
          type: string
          enum:
            - UNKNOWN
            - 'OFF'
            - 'ON'
        carLockState:
          type: string
          enum:
            - UNKNOWN
            - 'UNLOCKED'
            - 'LOCKED'
        reward:
          description: 'If this vehicle is marked as reward, the next rental which moves the vehicle far enough from the current place will receive a reward voucher.'
          type: boolean
        rewardInvalidationAt:
          description: validity of the reward on this vehicle. A reward (indicated by the 'reward' flag) is only applicable until this timestamp.
          type: string
          format: date-time
        position:
          description: GPS position of the vehicle
          $ref: '#/components/schemas/Point'
        address:
          description: current address of the vehicle derived from the GPS position
          type: string
        kilometers:
          type: number
          format: double
        rentalState:
          $ref: '#/components/schemas/VehicleRentalState'
        legalInspectionDate:
          description: date of the next legal inspection
          type: string
          format: date
        name:
          description: Name of the vehicle
          type: string
        vin:
          description: Vehicle identification number. Is unique independent of the casing.
          type: string
        remainingKilometers:
          description: remaining kilometers with the current state of charge. Might be approximated based on the vehicle category.
          type: integer
          format: int32
        fileIds:
          type: array
          items:
            type: integer
            format: int64
        annotations:
          type: array
          items:
            $ref: '#/components/schemas/Annotation'
        customProperties:
          type: object
          additionalProperties:
            type: string
        ignoredRentalBlockers:
          $ref: '#/components/schemas/IgnoredRentalBlockers'
        parkingReport:
          $ref: '#/components/schemas/ParkingReport'
        serviceStateLastModifiedAt:
          type: string
          format: date-time
        serviceStateV2LastModifiedAt:
          type: string
          format: date-time
        batteryLevelLastModifiedAt:
          type: string
          format: date-time
        lastOperationalAt:
          type: string
          format: date-time
        rentalStateLastModifiedAt:
          type: string
          format: date-time
        powerStateLastModifiedAt:
          type: string
          format: date-time
        lastEndedRentalAt:
          type: string
          format: date-time
        positionLastModifiedAt:
          type: string
          format: date-time
        lastOnlineAt:
          type: string
          format: date-time
        inactiveFor:
          $ref: '#/components/schemas/Duration'
        lastOutOfOrderAt:
          type: string
          format: date-time
        pricing:
          $ref: '#/components/schemas/PricingInformation'
        applicableVouchers:
          type: array
          items:
            $ref: '#/components/schemas/ConstraintVoucher'
        rewardStationIds:
          type: array
          items:
            type: integer
            format: int64
        module:
          $ref: '#/components/schemas/JsonModule'
        currency:
          type: string
        benefits:
          type: string
          enum:
            - DISCOUNTED
            - REWARDED
        type:
          type: string
          enum:
            - DUMMY
            - TRACKER
            - DEVICE_CLOUD
        numberOfPersons:
          type: integer
          format: int32
        typeName:
          type: string
        offline:
          description: Defines if the vehicle is currently online
          type: boolean
        unavailabilityReasons:
          description: Reasons why the vehicle is currently not available for rental; when empty or omitted, the vehicle is available.
          type: array
          items:
            $ref: '#/components/schemas/VehicleRentalUnavailabilityReason'
          readOnly: true
          nullable: true
      x-stoplight:
        id: 8me89dtosh9pz
    VehicleCreate:
      type: object
      required:
        - branchId
        - categoryId
      properties:
        name:
          description: Name of the vehicle
          type: string
        code:
          description: 'Code of the vehicle, can be used as a QR code for example. Must be unique independent of the casing.'
          type: string
        licensePlate:
          description: License plate of the vehicle. Must be unique.
          type: string
        vin:
          description: Vehicle identification number. Must be unique independent of the casing.
          type: string
        branchId:
          description: Branch this vehicle is going to be assigned to. Needs to be a location branch.
          type: integer
          format: int64
        categoryId:
          description: Category of this vehicle.
          type: integer
          format: int64
        serviceState:
          type: string
          default: OUT_OF_ORDER
          enum:
            - OPERATIONAL
            - LOW_SOC
            - OUT_OF_ORDER
            - RETIRED
            - CRITICAL_SOC
            - IN_SERVICE
        serviceStateV2:
          $ref: '#/components/schemas/ServiceStateV2'
        batteryLevel:
          description: if not defined can be calculated based on 'initialStateOfCharge' (if set)
          type: string
          default: UNKNOWN
          enum:
            - UNKNOWN
            - HIGH
            - LOW
            - CRITICAL
            - MEDIUM
        initialStateOfCharge:
          type: integer
          format: int32
          description: |-
            Can be used to set 'stateOfCharge' and 'batteryLevel'.

            'batteryLevel' will be calculated based on vehicle category settings
        position:
          description: GPS position of the vehicle
          $ref: '#/components/schemas/Point'
        address:
          description: current address of the vehicle derived from the GPS position
          type: string
        legalInspectionDate:
          description: date of the next legal inspection
          type: string
          format: date
        rewardInvalidationAt:
          description: validity of the reward on this vehicle. A reward (indicated by the 'reward' flag) is only applicable until this timestamp.
          type: string
          format: date-time
        reward:
          description: 'If this vehicle is marked as reward, the next rental which moves the vehicle far enough from the current place will receive a reward voucher.'
          type: boolean
        customProperties:
          type: object
          additionalProperties:
            type: string
        type:
          type: string
          default: TRACKER
          enum:
            - DUMMY
            - TRACKER
            - DEVICE_CLOUD
        module:
          description: |
            Module to be created for this vehicle and associated with it.
            This needs to be a completely new module and cannot be used to assign an already existing module, please use the API to associate a module with a vehicle otherwise.
          $ref: '#/components/schemas/CreateModule'
    VehicleBulkCreationResult:
      title: VehicleBulkCreationResult
      type: object
      properties:
        status:
          enum:
            - SUCCESSFUL
            - PARTIALLY_SUCCESSFUL
            - FAILED
        failures:
          type: array
          items:
            $ref: '#/components/schemas/VehicleBulkCreationVehicleFailures'
        successful:
          type: array
          items:
            $ref: '#/components/schemas/VehicleBulkCreationVehicleIdentifier'
    VehicleBulkCreationVehicleIdentifier:
      type: object
      properties:
        id:
          description: Identifier of the vehicle assigned by the system
          type: integer
          format: int64
        name:
          description: Name of the vehicle if provided in the request.
          type: string
        code:
          description: Code of the vehicle if provided in the request.
          type: string
        licensePlate:
          description: License plate of the vehicle if provided in the request.
          type: string
        vin:
          description: Vehicle identification number if provided in the request.
          type: string
    VehicleBulkCreationFailedVehicleIdentifier:
      type: object
      properties:
        name:
          description: Name of the vehicle if provided in the request.
          type: string
        code:
          description: Code of the vehicle if provided in the request.
          type: string
        licensePlate:
          description: License plate of the vehicle if provided in the request.
          type: string
        vin:
          description: Vehicle identification number if provided in the request.
          type: string
    VehicleBulkCreationVehicleFailures:
      type: object
      properties:
        vehicle:
          description: vehicle from the request that could not be created due to a validation error.
          $ref: '#/components/schemas/VehicleBulkCreationFailedVehicleIdentifier'
        validations:
          description: Validation errors
          type: array
          items:
            type: object
            properties:
              errorCode:
                description: Unique code of the failed validation
                type: string
              reason:
                description: Readable reason for the failed validation
                type: string
    VehicleCommandRequest:
      type: object
      properties:
        command:
          type: string
          enum:
            - START
            - STOP
            - LOCK
            - UNLOCK
            - LOCATE
            - OPEN_SADDLE
            - OPEN_TAILBOX
            - LOCK_TAILBOX
            - UNLOCK_TAILBOX
            - ALARM_ON
            - ALARM_OFF
            - SET_MAX_SPEED
            - CUSTOM_COMMAND
            - REBOOT
            - TEST_ASYNC_ONLY
            - UNLOCK_BIKE_LOCK
            - UNLOCK_STATION_PORT
        customCommandName:
          type: string
        namedParameters:
          type: string
      examples:
        - start:
            command: START
        - set-max-speed:
            command: SET_MAX_SPEED
            namedParameters:
              MAX_SPEED: "25"
        - custom-command:
            command: CUSTOM_COMMAND
            customCommandName: "vehicle-specific-command"
            namedParameters:
              CUSTOM_FIELD: "something custom"
      x-stoplight:
        id: amibk9jrmdpu4
    Instant:
      type: object
      properties: { }
      x-stoplight:
        id: lbvnx26eajonc
    VehicleCommandResponse:
      type: object
      properties:
        command:
          type: string
          enum:
            - START
            - STOP
            - LOCK
            - UNLOCK
            - LOCATE
            - OPEN_SADDLE
            - OPEN_TAILBOX
            - LOCK_TAILBOX
            - UNLOCK_TAILBOX
            - ALARM_ON
            - ALARM_OFF
            - SET_MAX_SPEED
            - CUSTOM_COMMAND
            - REBOOT
            - TEST_ASYNC_ONLY
            - UNLOCK_BIKE_LOCK
            - UNLOCK_STATION_PORT
        customCommandName:
          type: string
        namedParameters:
          type: string
        status:
          type: string
          enum:
            - OK
            - ERROR
            - UNKNOWN
            - OPERATION_IN_PROGRESS
            - OPERATION_TIMEOUT
            - OPERATION_UNSUCCESSFUL
            - VALID_RESPONSES
        time:
          type: string
          format: date-time
        vehicle:
          $ref: '#/components/schemas/Vehicle'
        statusMessage:
          type: string
        errorCode:
          type: string
        userMessage:
          type: string
        timestamp:
          $ref: '#/components/schemas/Instant'
      x-stoplight:
        id: akwoae2jdn7xj
    VehicleAction:
      type: object
      properties:
        id:
          type: integer
          format: int64
        friendlyName:
          type: string
        description:
          type: string
        customProperties:
          type: string
      x-stoplight:
        id: oiaw0plac2duh
    ServiceVehicle:
      type: object
      properties:
        id:
          type: integer
          format: int64
        startPosition:
          $ref: '#/components/schemas/Point'
        capacity:
          type: integer
          format: int32
        profileType:
          type: string
          enum:
            - DRIVING_CAR
            - DRIVING_HGV
            - FOOT_WALKING
            - FOOT_HIKING
            - CYCLING_REGULAR
            - CYCLING_ROAD
            - CYCLING_MOUNTAION
            - CYCLING_ELECTRIC
            - profile
      x-stoplight:
        id: 7aj3y77a7f4nq
    CalculateRouteRequest:
      type: object
      properties:
        vehicleIds:
          type: array
          items:
            type: integer
            format: int64
        serviceVehicles:
          type: array
          items:
            $ref: '#/components/schemas/ServiceVehicle'
      x-stoplight:
        id: n6nf6462l21ja
    Void:
      type: object
      properties: { }
      x-stoplight:
        id: fci07rgzquh76
    Number:
      type: object
      properties: { }
      x-stoplight:
        id: kqbvwepfrj4im
    Revision:
      type: object
      properties:
        revisionNumber:
          $ref: '#/components/schemas/Number'
        revisionDate:
          type: string
          format: date-time
        revisionType:
          type: string
          enum:
            - ADD
            - MOD
            - DEL
        createdBy:
          $ref: '#/components/schemas/GUser'
        updatedBy:
          $ref: '#/components/schemas/GUser'
        changes:
          type: array
          items:
            type: string
      x-stoplight:
        id: v3fyh5d8rletr
    RevisionDiff:
      type: object
      properties:
        entityId:
          type: integer
          format: int64
        fromRevision:
          $ref: '#/components/schemas/Revision'
        toRevision:
          $ref: '#/components/schemas/Revision'
        changes:
          type: object
          additionalProperties:
            type: object
            properties:
              from:
                nullable: true
                additionalProperties: true
              to:
                nullable: true
                additionalProperties: true
    Reward:
      type: object
      properties:
        rentalRebate:
          $ref: '#/components/schemas/BigDecimal'
        numberOfRentals:
          type: integer
          format: int32
        validityTimeUnit:
          type: string
          enum:
            - NANOS
            - MICROS
            - MILLIS
            - SECONDS
            - MINUTES
            - HOURS
            - HALF_DAYS
            - DAYS
            - WEEKS
            - MONTHS
            - YEARS
            - DECADES
            - CENTURIES
            - MILLENNIA
            - ERAS
            - FOREVER
            - name
            - duration
        validityPeriod:
          type: integer
          format: int32
        id:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        value:
          $ref: '#/components/schemas/BigDecimal'
        code:
          type: string
        name:
          type: string
        description:
          type: string
        iconUrl:
          type: string
        state:
          type: string
          enum:
            - INACTIVE
            - ACTIVE
        maxRedeemLimit:
          type: integer
          format: int64
        redeemCount:
          type: integer
          format: int64
        signup:
          type: boolean
        showInUserApp:
          type: boolean
        applicableBranchIds:
          type: array
          items:
            type: integer
            format: int64
        applicableVehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
      x-stoplight:
        id: rzkawdzzkta1w
    UserGroup:
      type: object
      properties:
        id:
          type: integer
          format: int64
          readOnly: true
        email:
          type: string
        code:
          type: string
          nullable: true
        name:
          type: string
        phone:
          type: string
        street:
          type: string
        postcode:
          type: string
        city:
          type: string
        country:
          type: string
        vatNumber:
          type: string
        companyRegistrationNumber:
          type: string
        billingPeriod:
          type: string
          enum:
            - NONE
            - WEEKLY
            - MONTHLY
        balanceValue:
          $ref: '#/components/schemas/BigDecimal'
        owner:
          $ref: '#/components/schemas/GUser'
        ownerId:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
        createdBy:
          $ref: '#/components/schemas/GUser'
          readOnly: true
        updatedBy:
          $ref: '#/components/schemas/GUser'
          readOnly: true
        blockState:
          type: string
          readOnly: true
          enum:
            - NOT_BLOCKED
            - BLOCKED_UNKNOWN
            - BLOCKED_BY_ADMIN
            - BLOCKED_BY_ADMINDELETE
            - GROUP_DELETED
        paymentState:
          type: string
          readOnly: true
          enum:
            - NONE
            - PUSH_INITIATED
            - PUSH_COMPLETED
            - SOURCE_ADDED
            - INVOICING
        emailIsVerified:
          type: boolean
          readOnly: true
        fileIds:
          type: array
          items:
            type: integer
            format: int64
          readOnly: true
        checkRentalRequirements:
          type: boolean
        useReceiptInsteadOfInvoice:
          type: boolean
        annotations:
          type: array
          items:
            $ref: '#/components/schemas/Annotation'
          readOnly: true
        membersCount:
          type: integer
          format: int64
          description: Number of active members of this group
        defaultCostCenter:
          $ref: '#/components/schemas/CostCenter'
        approvalState:
          type: string
        billingCycle:
          type: string
          enum:
            - PAY_AS_YOU_GO
            - HOURLY
            - DAILY
            - WEEKLY
            - BI_WEEKLY
            - MONTHLY
          description: 'In the case of invoicing, the period in which payment will be scheduled for all accumulated bookings/rentals costs.'
        defaultBusinessUnit:
          type: object
          description: Default business unit of the user group (usually correlates with the one of the owner of the business unit)
          properties:
            id:
              type: integer
              format: int64
            name:
              type: string
        costCenters:
          type: array
          items:
            $ref: '#/components/schemas/CostCenter'
        settings:
          type: object
          properties:
            requireDrivingLog:
              type: boolean
              description: Whether driving log is required for rentals of the user group.
            shouldIgnoreBCategoryRentalRequirement:
              type: boolean
              description: Indicate if B category tenure rental requirement should be ignored for this user group.
      x-stoplight:
        id: uqxsz90wk0cau
    CostCenter:
      type: object
      description: A cost center of a business account
      properties:
        id:
          type: integer
          format: int64
          description: The cost center identifier'
        name:
          type: string
          description: The cost center's name
    BillingSummary:
      title: BillingSummary
      type: object
      x-examples:
        activeBillingCycle: MONTHLY
        activeBillingMode: INVOICING
        perBusinessUnitSummary:
          - currency: EUR
            businessUnitId: 1
            businessUnitName: Austria
            defaultBusinessUnit: true
            amount: 22
          - currency: BAM
            businessUnitId: 2
            businessUnitName: Bosnia and Herzegovina
            defaultBusinessUnit: false
            amount: 53
      properties:
        activeBillingCycle:
          type: string
          enum:
            - PAY_AS_YOU_GO
            - HOURLY
            - DAILY
            - WEEKLY
            - BI_WEEKLY
            - MONTHLY
          description: Currently active billing cycle
        activeBillingMode:
          type: string
          enum:
            - BALANCE_SETTLEMENT
            - INVOICING
          description: Active billing mode
        perBusinessUnitSummary:
          type: array
          description: ...
          items:
            type: object
            properties:
              currency:
                type: string
              businessUnitId:
                type: number
                format: int64
              businessUnitName:
                type: string
              defaultBusinessUnit:
                type: boolean
                description: Whether this business unit is default one for the user group.
              amount:
                type: number
                format: double
                description: 'Total amount on the balance, or in open invoices.'
    CustomerCareVoucherTemplate:
      type: object
      properties:
        branchId:
          type: integer
          format: int64
        customerCareVoucherableId:
          type: integer
          format: int64
        value:
          $ref: '#/components/schemas/BigDecimal'
        description:
          type: string
      x-stoplight:
        id: uzdx2684kck20
    Voucher:
      type: object
      properties:
        id:
          type: integer
          format: int64
        voucherable:
          $ref: '#/components/schemas/Voucherable'
        voucherableCode:
          type: string
        branch:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        name:
          type: string
        voucherType:
          type: string
          enum:
            - SIGNUP
            - PACKAGE
            - REFERRAL
            - PROMOTION
            - BY_ADMIN
            - UNKNOWN
            - SETTLEMENT
            - TOP_UP
            - CORRECTION
            - SUBSCRIPTION
            - REWARD
            - SINGLE_USE
            - SETTLEMENT_EXTERNAL
            - CASHBACK
            - TRIGGERED
            - CUSTOMER_CARE
            - COLLECTION_INVOICE
            - log
        currency:
          type: string
        invoiceId:
          type: integer
          format: int64
        extInvoiceNumber:
          type: string
        valueNet:
          $ref: '#/components/schemas/BigDecimal'
        remainingValueNet:
          $ref: '#/components/schemas/BigDecimal'
        valueGross:
          $ref: '#/components/schemas/BigDecimal'
        remainingValueGross:
          $ref: '#/components/schemas/BigDecimal'
        redemptionCode:
          type: string
        description:
          type: string
        guser:
          $ref: '#/components/schemas/JsonGUser'
        signup:
          type: boolean
        applicableBranchIds:
          type: array
          items:
            type: integer
            format: int64
        applicableVehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
        requiredAnnotationIds:
          type: array
          items:
            type: integer
            format: int64
        redeemWindowStart:
          type: string
          format: date-time
        redeemWindowEnd:
          type: string
          format: date-time
        prerequisitesMet:
          type: boolean
      x-stoplight:
        id: uid1hj1hxtwm3
    PaymentSource:
      type: object
      properties:
        id:
          type: string
        last4:
          type: string
        country:
          type: string
        fingerprint:
          type: string
        owner:
          type: string
        state:
          type: string
      x-stoplight:
        id: jc0q5q9x0t417
    UserGroupMembers:
      type: object
      properties:
        ids:
          type: array
          items:
            type: integer
            format: int64
      x-stoplight:
        id: 5wl65j5ude80o
    UserGroupMemberError:
      type: object
      properties:
        id:
          type: integer
          format: int64
        error:
          type: string
        referralCode:
          type: string
        email:
          type: string
        phone:
          type: string
      x-stoplight:
        id: 9pwmlbau6l77j
    UserGroupMembersOperationResponse:
      type: object
      properties:
        successful:
          type: array
          items:
            type: integer
            format: int64
        unsuccessful:
          type: array
          items:
            $ref: '#/components/schemas/UserGroupMemberError'
      x-stoplight:
        id: 3qkvd6rtavsnt
    UserGroupMemberUpdateFull:
      type: object
      required:
        - state
        - role
      properties:
        defaultCostCenterId:
          type: integer
          format: int64
        state:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
        superiorEmail:
          type: string
        role:
          type: string
          enum:
            - OWNER
            - ADMIN
            - MEMBER
          description: 'The user group member role. The OWNER role is a read only role, and can''t be updated or assigned.'
    AddUserGroupMember:
      type: object
      required:
        - id
      properties:
        id:
          type: integer
          format: int64
          description: The user ID of the member to add
          minimum: 1
    AddMembers:
      type: object
      properties:
        emails:
          type: array
          items:
            type: string
        phones:
          type: array
          items:
            type: string
        codes:
          type: array
          items:
            type: string
        reason:
          type: string
      x-stoplight:
        id: xwp2qprjaj58i
    GUserGroupRequest:
      type: object
      properties:
        id:
          type: integer
          format: int64
        group:
          $ref: '#/components/schemas/UserGroup'
        guser:
          $ref: '#/components/schemas/GUser'
        state:
          type: string
          enum:
            - REQUESTED
            - APPROVED
            - REJECTED
            - RETRACTED
        direction:
          type: string
          enum:
            - GROUP_TO_USER
            - USER_TO_GROUP
        requestReason:
          type: string
        rejectReason:
          type: string
        error:
          $ref: '#/components/schemas/UserGroupMemberError'
      x-stoplight:
        id: c0fs6gqgg0pil
    JsonAnnotation:
      type: object
      properties:
        dtype:
          type: integer
          format: int32
        type:
          type: string
        id:
          type: integer
          format: int64
        name:
          type: string
        properties:
          type: string
      x-stoplight:
        id: cf6x6h5njm3ro
    CustomerListDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        firstName:
          type: string
        lastName:
          type: string
        phone:
          type: string
        email:
          type: string
        language:
          type: string
          description: Language of the user
        createdAt:
          type: string
          format: date-time
        emailIsVerified:
          type: boolean
        phoneIsVerified:
          type: boolean
        paymentState:
          type: string
          enum:
            - NONE
            - PUSH_INITIATED
            - PUSH_COMPLETED
            - SOURCE_ADDED
            - INVOICING
        city:
          type: string
        country:
          type: string
        licenseVerificationState:
          $ref: '#/components/schemas/DocumentVerificationState'
        idVerificationState:
          type: string
          enum:
            - UNVERIFIED
            - CREATED
            - PROCESSING
            - VERIFIED
            - REJECTED
            - RETRY
            - VERIFIED_BUT_NEEDS_CHECK
            - EXPIRED_LICENSE
            - REVIEW
            - PENDING_REVERIFICATION
        manualVerificationState:
          type: string
          enum:
            - UNVERIFIED
            - PROCESSING
            - VERIFIED
            - REJECTED
            - RETRY
        blockState:
          type: string
          enum:
            - NOT_BLOCKED
            - BLOCKED_UNKNOWN
            - BLOCKED_BY_ADMIN
            - BLOCKED_BY_ADMINDELETE
            - GROUP_DELETED
        homeBillableBranchId:
          type: integer
          format: int64
        birthdate:
          type: string
          format: date
        postcode:
          type: string
        street:
          type: string
        referralCode:
          type: string
        receiveNewsletter:
          type: boolean
        newsletterOptions:
          type: object
          properties:
            receiveNews:
              type: boolean
            receiveMarketingOffers:
              type: boolean
        customProperties:
          type: string
        signInMethods:
          type: array
          items:
            type: string
            enum:
              - EMAIL
              - SMS
              - EMAIL_CODE
              - SOCIAL_GOOGLE
              - SOCIAL_APPLE
              - SOCIAL_FACEBOOK
              - API
              - PIM_OPENID
              - val
              - ALL
              - SOCIAL
        authId:
          type: string
        drivingLicenseCategories:
          type: array
          items:
            type: string
        drivingLicenseCategoryObject:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/DrivingLicenseCategoryObject'
        creditStatus:
          type: string
          description: Credit status of the user
          enum:
            - PENDING
            - GREEN
            - YELLOW
            - RED
            - FAILED
        signupSettled:
          type: boolean
        defaultBalance:
          $ref: '#/components/schemas/BigDecimal'
        rentalRevenue:
          $ref: '#/components/schemas/BigDecimal'
        rentalsCount:
          type: integer
          format: int64
        openIssuesCount:
          type: integer
          format: int64
        annotations:
          type: array
          items:
            $ref: '#/components/schemas/JsonAnnotation'
      x-stoplight:
        id: ktklba5o40qbs
    GUserSimple:
      type: object
      properties:
        id:
          type: integer
          format: int64
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
        authId:
          type: string
      x-stoplight:
        id: 8ayt0l41p0aob
    AddUserByAdmin:
      type: object
      properties:
        email:
          type: string
        emailVerified:
          type: boolean
        password:
          type: string
        phone:
          type: string
        userAuthenticationType:
          type: string
          enum:
            - PHONE
            - EMAIL
            - EMAIL_CODE
        branchId:
          type: integer
          format: int64
        firstName:
          type: string
          minLength: 1
          maxLength: 90
        lastName:
          type: string
          minLength: 1
          maxLength: 90
        birthdate:
          type: string
          format: date
        street:
          type: string
        postcode:
          type: string
        city:
          type: string
        country:
          type: string
        note:
          type: string
        language:
          type: string
        receiveNewsletter:
          type: boolean
        newsletterOptions:
          type: object
          properties:
            receiveNews:
              type: boolean
            receiveMarketingOffers:
              type: boolean
        licenseVerificationState:
          $ref: '#/components/schemas/DocumentVerificationState'
        licenseExpirationDate:
          type: string
          format: date
        drivingLicenseCategories:
          type: array
          items:
            type: string
        createSilently:
          type: boolean
        resetPasswordFlow:
          type: string
          enum:
            - DEFAULT
            - DASHBOARD
            - USER_MOBILE_APP
            - USER_WEB_APP
      x-stoplight:
        id: fety8c4e840h0
    CreateApiClient:
      type: object
      properties:
        scopes:
          type: array
          items:
            type: string
        lastName:
          type: string
      x-stoplight:
        id: e21gwlo1iefqg
    ApiClient:
      type: object
      properties:
        userId:
          type: integer
          format: int64
        clientId:
          type: string
        clientKey:
          type: string
      x-stoplight:
        id: 1fp1x8iilzohh
    UserDetails:
      type: object
      properties:
        guser:
          $ref: '#/components/schemas/GUser'
        userDevice:
          $ref: '#/components/schemas/UserDevice'
        signupSettled:
          type: boolean
        assignedCustomerIdentityCards:
          type: array
          description: Customer Identity Cards assigned to the user. Most likely there is only at most a single one.
          items:
            type: object
            properties:
              id:
                type: integer
                format: int64
                description: Identifier of the customer identity card
              cardNumber:
                type: string
                description: Card number of the customer identity card. Is globally unique.
              rfidUid:
                type: string
                description: Unique identifier of the RFID tag. Needs to be globally unique together with 'rfidType'.
              rfidType:
                type: string
                description: Type of the RFID tag. Needs to be globally unique together with 'rfidUid'.
        termsAndConditionsAcceptanceState:
          type: string
          enum:
            - ACCEPTED
            - NOT_ACCEPTED
        blockedByUnpaidInvoices:
          type: boolean
          description: Indicates if the user is blocked from renting due to unpaid invoices.
        statistics:
          type: object
          description: User statistics for the business unit.
          properties:
            currency:
              type: string
              description: Currency code of the business unit.
              example: EUR
            lifetimeValue:
              type: number
              description: Customer lifetime value calculated as sum of PAID invoices minus sum of REFUNDED invoices for the business unit.
            remainingVoucherValueGross:
              type: number
              description: Total remaining gross value of monetary vouchers applicable to the user on the business unit.
            remainingMinutesValue:
              type: number
              description: Total remaining value of time-based (free-minute) vouchers applicable to the user on the business unit.
      x-stoplight:
        id: oe92k3ky3vp4n
    CustomerExportDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
        phoneNumber:
          type: string
        dateCreated:
          type: string
          format: date
        city:
          type: string
        country:
          type: string
        paymentState:
          type: string
          enum:
            - NONE
            - PUSH_INITIATED
            - PUSH_COMPLETED
            - SOURCE_ADDED
            - INVOICING
        emailVerified:
          type: boolean
        phoneVerified:
          type: boolean
        licenseVerificationState:
          $ref: '#/components/schemas/DocumentVerificationState'
        manualVerificationState:
          type: string
          enum:
            - UNVERIFIED
            - PROCESSING
            - VERIFIED
            - REJECTED
            - RETRY
        status:
          type: string
          enum:
            - NOT_BLOCKED
            - BLOCKED_UNKNOWN
            - BLOCKED_BY_ADMIN
            - BLOCKED_BY_ADMINDELETE
            - GROUP_DELETED
        annotations:
          type: string
      x-stoplight:
        id: ko6qp8f6zrcw5
    YearMonth:
      type: object
      properties:
        year:
          type: integer
          format: int32
        month:
          type: integer
          format: int32
      x-stoplight:
        id: hk37crpt1dil7
    AddMaaSUser:
      type: object
      properties:
        branchId:
          type: integer
          format: int64
        firstName:
          type: string
        lastName:
          type: string
        birthdate:
          type: string
          format: date
        licenseVerificationState:
          $ref: '#/components/schemas/DocumentVerificationState'
        street:
          type: string
        postcode:
          type: string
        city:
          type: string
        country:
          type: string
        note:
          type: string
        language:
          type: string
        customProperties:
          type: string
        paymentState:
          type: string
          enum:
            - NONE
            - PUSH_INITIATED
            - PUSH_COMPLETED
            - SOURCE_ADDED
            - INVOICING
        manualVerificationState:
          type: string
          enum:
            - UNVERIFIED
            - PROCESSING
            - VERIFIED
            - REJECTED
            - RETRY
        email:
          type: string
        phoneNumber:
          type: string
        extRef:
          type: string
      x-stoplight:
        id: 4plxx5djlff15
    BalanceUpdateRental:
      type: object
      properties:
        state:
          type: string
          enum:
            - RESERVATION
            - ACTIVE
            - EXPIRED
            - ENDED
            - CANCELLED
            - ENDED_NO_MOVEMENT
            - STILL_ACTIVE
            - FEEDBACK_ALLOWED
            - ENDED_STATES
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
      x-stoplight:
        id: qmok55gzsfmjy
    BalanceUpdateVoucher:
      type: object
      properties:
        type:
          type: string
          enum:
            - SIGNUP
            - PACKAGE
            - REFERRAL
            - PROMOTION
            - BY_ADMIN
            - UNKNOWN
            - SETTLEMENT
            - TOP_UP
            - CORRECTION
            - SUBSCRIPTION
            - REWARD
            - SINGLE_USE
            - SETTLEMENT_EXTERNAL
            - CASHBACK
            - TRIGGERED
            - CUSTOMER_CARE
            - COLLECTION_INVOICE
            - log
        redemptionCode:
          type: string
      x-stoplight:
        id: xs8prkf57xpx0
    BalanceUpdateVoucherable:
      type: object
      properties:
        code:
          type: string
      x-stoplight:
        id: gbuesxydka2a7
    BalanceUpdateBooking:
      type: object
      properties:
        state:
          type: string
          enum:
            - BOOKED
            - APPROVED
            - DELIVERED
            - SUCCESSFUL
            - CANCELED
            - ABORTED
            - EXPIRED
            - DECLINED
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
      x-stoplight:
        id: zaelo3farjxp5
    BalanceUpdate:
      type: object
      properties:
        id:
          type: integer
          format: int64
        value:
          $ref: '#/components/schemas/BigDecimal'
        rentalId:
          type: integer
          format: int64
        voucherId:
          type: integer
          format: int64
        invoiceId:
          type: integer
          format: int64
        type:
          type: string
          enum:
            - SIGNUP
            - PACKAGE
            - REFERRAL
            - PROMOTION
            - CREDIT
            - RENTAL
            - SETTLEMENT
            - TOP_UP
            - CORRECTION
            - BOOKING_CANCELLATION
            - BOOKING_EXPIRED
            - INVALID
            - SINGLE_USE_VOUCHER
            - SUBSCRIPTION
            - REWARD
            - COLLECTION_INVOICE
            - REFUND
            - DEDUCTIONS
            - ADDITIONS
        createdAt:
          type: string
          format: date-time
        description:
          type: string
        createdBy:
          $ref: '#/components/schemas/GUser'
        rental:
          $ref: '#/components/schemas/BalanceUpdateRental'
        voucher:
          $ref: '#/components/schemas/BalanceUpdateVoucher'
        voucherable:
          $ref: '#/components/schemas/BalanceUpdateVoucherable'
        booking:
          $ref: '#/components/schemas/BalanceUpdateBooking'
        vehicleCategoryId:
          type: integer
          format: int64
      x-stoplight:
        id: vah13fjz4pttt
    RemoveSignInMethod:
      type: object
      properties:
        method:
          type: string
          enum:
            - EMAIL
            - SMS
            - EMAIL_CODE
            - SOCIAL_GOOGLE
            - SOCIAL_APPLE
            - SOCIAL_FACEBOOK
            - API
            - PIM_OPENID
            - val
            - ALL
            - SOCIAL
      x-stoplight:
        id: qjycmfl0tqun7
    DeleteUser:
      type: object
      properties:
        force:
          type: boolean
        reason:
          type: string
      x-stoplight:
        id: uo46n2kt54u3x
    AddEmailSignInMethod:
      type: object
      properties:
        email:
          type: string
        password:
          type: string
      x-stoplight:
        id: xueu0d2e94q41
    AddEmailCodeSignInMethod:
      type: object
      properties:
        email:
          type: string
    AddPhoneNumberSignInMethod:
      type: object
      properties:
        phoneNumber:
          type: string
      x-stoplight:
        id: 4006cjjcc0hyz
    UserGroupsOwnerMember:
      type: object
      properties:
        owner:
          type: array
          items:
            $ref: '#/components/schemas/UserGroup'
        member:
          type: array
          items:
            $ref: '#/components/schemas/UserGroup'
      x-stoplight:
        id: 9di2rtadcxczu
    InvalidateRefreshTokenRequest:
      type: object
      properties:
        tokenId:
          type: integer
          format: int64
      x-stoplight:
        id: mnf4t528h0y8k
    RefreshToken:
      type: object
      properties:
        id:
          type: integer
          format: int64
        userId:
          type: string
        expiryTime:
          type: string
          format: date-time
        status:
          type: string
          enum:
            - VALID
            - INVALID
            - EXPIRED
        ipAddress:
          type: string
        userAgent:
          type: string
      x-stoplight:
        id: sgm8zx5x7c4ch
    Tag:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        properties:
          type: string
      x-stoplight:
        id: rjosqqnwvhwl0
    VehicleTagUpdate:
      type: object
      properties:
        name:
          type: string
          example: damage:display
        properties:
          type: string
    VehicleTaskBulkCreate:
      type: object
      description: Bulk task creation request for multiple vehicles
      required:
        - vehicleIds
        - task
      properties:
        vehicleIds:
          type: array
          description: List of vehicle IDs to create tasks for (1-1000 unique IDs)
          minItems: 1
          maxItems: 1000
          uniqueItems: true
          items:
            type: integer
            format: int64
        task:
          $ref: '#/components/schemas/TaskCreate'
    TaskCreate:
      type: object
      description: |
        Task details for bulk creation.
        At least one of `category` or `categoryId` must be provided. If both are provided, `categoryId` takes precedence.
      required:
        - title
        - priority
        - branchId
      properties:
        title:
          type: string
          description: Task title
        category:
          $ref: '#/components/schemas/TaskCategory'
          deprecated: true
          description: 'Legacy category enum. Use categoryId instead for custom categories. At least one of category or categoryId must be provided.'
        categoryId:
          type: integer
          format: int64
          description: 'ID of the task category. References a custom task category created via /task-categories. Takes precedence over category if both are provided.'
        priority:
          $ref: '#/components/schemas/TaskPriority'
        branchId:
          type: integer
          format: int64
          description: Branch ID where the task should be created
        taskState:
          $ref: '#/components/schemas/TaskState'
        assignedToId:
          type: integer
          format: int64
          description: User ID to assign the task to (optional)
        description:
          type: string
          description: Task description (optional)
    VehicleTaskBulkCreateResult:
      type: object
      description: Result of bulk task creation operation
      required:
        - status
        - summary
      properties:
        status:
          $ref: '#/components/schemas/BulkOperationStatus'
        summary:
          $ref: '#/components/schemas/BulkOperationSummary'
        successful:
          type: array
          description: Vehicles for which tasks were successfully created
          items:
            $ref: '#/components/schemas/VehicleTaskCreateSuccess'
        failed:
          type: array
          description: Vehicles for which task creation failed
          items:
            $ref: '#/components/schemas/VehicleTaskCreateFailure'
    VehicleTaskCreateSuccess:
      type: object
      description: Successful task creation for a vehicle
      required:
        - vehicleId
        - taskId
      properties:
        vehicleId:
          type: integer
          format: int64
          description: Vehicle ID
        taskId:
          type: integer
          format: int64
          description: Created task ID
    VehicleTaskCreateFailure:
      type: object
      description: Failed task creation for a vehicle
      required:
        - vehicleId
        - errorCode
        - userMessage
      properties:
        vehicleId:
          type: integer
          format: int64
          description: Vehicle ID
        errorCode:
          type: string
          description: Error code
        userMessage:
          type: string
          description: Localized error message
    VehicleNoteBulkCreate:
      type: object
      description: Bulk note creation request for multiple vehicles
      required:
        - vehicleIds
        - note
      properties:
        vehicleIds:
          type: array
          description: List of vehicle IDs to create notes for (1-1000 unique IDs)
          minItems: 1
          maxItems: 1000
          uniqueItems: true
          items:
            type: integer
            format: int64
        note:
          $ref: '#/components/schemas/AddNote'
    VehicleNoteBulkCreateResult:
      type: object
      description: Result of bulk note creation operation
      required:
        - status
        - summary
      properties:
        status:
          $ref: '#/components/schemas/BulkOperationStatus'
        summary:
          $ref: '#/components/schemas/BulkOperationSummary'
        successful:
          type: array
          description: Successfully created notes
          items:
            $ref: '#/components/schemas/VehicleNoteCreateSuccess'
        failed:
          type: array
          description: Failed note creations
          items:
            $ref: '#/components/schemas/VehicleNoteCreateFailure'
    VehicleNoteCreateSuccess:
      type: object
      description: Successful note creation for a vehicle
      required:
        - vehicleId
        - noteId
      properties:
        vehicleId:
          type: integer
          format: int64
          description: Vehicle ID
        noteId:
          type: integer
          format: int64
          description: Created note ID
    VehicleNoteCreateFailure:
      type: object
      description: Failed note creation for a vehicle
      required:
        - vehicleId
        - errorCode
        - userMessage
      properties:
        vehicleId:
          type: integer
          format: int64
          description: Vehicle ID
        errorCode:
          type: string
          description: Error code
        userMessage:
          type: string
          description: Localized error message
    VehicleTagsBulkUpdate:
      type: object
      description: Bulk tags update request for multiple vehicles. At least one of tagsToAdd or tagsToRemove must be provided with at least one tag ID.
      required:
        - vehicleIds
      anyOf:
        - required:
            - tagsToAdd
        - required:
            - tagsToRemove
      properties:
        vehicleIds:
          type: array
          description: List of vehicle IDs to update tags for (1-1000 unique IDs)
          minItems: 1
          maxItems: 1000
          uniqueItems: true
          items:
            type: integer
            format: int64
        tagsToAdd:
          type: array
          description: List of tag IDs to add to the vehicles (at least one required if tagsToRemove is not provided)
          minItems: 1
          uniqueItems: true
          items:
            type: integer
            format: int64
        tagsToRemove:
          type: array
          description: List of tag IDs to remove from the vehicles (at least one required if tagsToAdd is not provided)
          minItems: 1
          uniqueItems: true
          items:
            type: integer
            format: int64
    VehicleTagsBulkUpdateResult:
      type: object
      description: Result of bulk tags update operation
      required:
        - status
        - summary
      properties:
        status:
          $ref: '#/components/schemas/BulkOperationStatus'
        summary:
          $ref: '#/components/schemas/BulkOperationSummary'
        successful:
          type: array
          description: Successfully updated tags
          items:
            $ref: '#/components/schemas/VehicleTagsUpdateSuccess'
        failed:
          type: array
          description: Failed tag updates
          items:
            $ref: '#/components/schemas/VehicleTagsUpdateFailure'
        skipped:
          type: array
          description: Skipped tag updates (when no changes occurred)
          items:
            $ref: '#/components/schemas/VehicleTagsUpdateSkipped'
    VehicleTagsUpdateSuccess:
      type: object
      description: Successful tags update for a vehicle
      required:
        - vehicleId
        - addedTagIds
        - removedTagIds
      properties:
        vehicleId:
          type: integer
          format: int64
          description: Vehicle ID
        addedTagIds:
          type: array
          description: IDs of tags that were added
          items:
            type: integer
            format: int64
        removedTagIds:
          type: array
          description: IDs of tags that were removed
          items:
            type: integer
            format: int64
    VehicleTagsUpdateFailure:
      type: object
      description: Failed tags update for a vehicle
      required:
        - vehicleId
        - errorCode
        - userMessage
      properties:
        vehicleId:
          type: integer
          format: int64
          description: Vehicle ID
        errorCode:
          type: string
          description: Error code
        userMessage:
          type: string
          description: Localized error message
    VehicleTagsUpdateSkipped:
      type: object
      description: Skipped tags update for a vehicle (no changes occurred)
      required:
        - vehicleId
      properties:
        vehicleId:
          type: integer
          format: int64
          description: Vehicle ID
    Locale:
      type: object
      properties: { }
      x-stoplight:
        id: jar28v866gt18
    MessageResource:
      type: object
      properties:
        id:
          type: integer
          format: int64
        code:
          type: string
        locale:
          $ref: '#/components/schemas/Locale'
        value:
          type: string
        area:
          type: string
          enum:
            - APP
            - DASHBOARD
            - CORE
      x-stoplight:
        id: opj0v0me1h3zi
    MessageResourceCsvImportResult:
      type: object
      properties:
        totalRecords:
          type: integer
          description: Total number of records processed from the CSV
        inserted:
          type: integer
          description: Number of successfully imported records
        errors:
          description: Map that contains the `code` as key and the error as value of the `code`
          additionalProperties: true
    JsonGUserEmail:
      type: object
      properties:
        email:
          type: string
        id:
          type: integer
          format: int64
        firstName:
          type: string
        lastName:
          type: string
      x-stoplight:
        id: 54chc9jqbz2co
    JsonPrice:
      type: object
      properties:
        priceGross:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: cngzj627ys7td
    InvoiceListDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        invoiceId:
          type: string
        guser:
          $ref: '#/components/schemas/JsonGUserEmail'
        branchId:
          type: integer
          format: int64
        state:
          type: string
          enum:
            - OPEN
            - CLOSED
            - BILLED
            - PAID
            - EXCEPTION_OPENING
            - EXCEPTION_BILLING
            - EXCEPTION_SEPA
            - EXCEPTION_PAYING
            - IGNORE
            - DISPUTED
            - IN_PAYMENT
            - PUSH_WAITING_FOR_USER
            - PUSH_CANCELLED_BY_USER
            - PUSH_BANK_REFUSED
            - PUSH_ERROR_INITIALISING
            - REFUND_IN_PROGRESS
            - REFUNDED
            - EXCEPTION_REFUND
            - THREE_DS_WAITING_FOR_USER
            - THREE_DS_FAILED
            - COLLECTION
            - PAID_EXTERNALLY
            - ALLOWS_REFUND
            - IS_REFUND
        invoiceDate:
          type: string
          format: date-time
        price:
          $ref: '#/components/schemas/JsonPrice'
        paymentId:
          type: integer
          format: int64
        chargeId:
          type: string
        balanceName:
          type: string
        createdBy:
          $ref: '#/components/schemas/JsonGUserEmail'
        refundedInvoice:
          $ref: '#/components/schemas/RefundedInvoice'
      x-stoplight:
        id: de5k8yp9f34ea
    RefundedInvoice:
      type: object
      description: Reference to the original invoice that this row refunds. Populated only on refunding invoices.
      properties:
        id:
          type: integer
          format: int64
        invoiceId:
          type: string
    InvoiceOverview:
      type: object
      properties: { }
      x-stoplight:
        id: 1cwhcnw7vw6xx
    InvoiceStatementReportDTO:
      type: object
      properties:
        invoiceId:
          type: string
        dateOfInvoice:
          $ref: '#/components/schemas/Instant'
        status:
          type: string
        vatAmount:
          $ref: '#/components/schemas/BigDecimal'
        grossAmount:
          $ref: '#/components/schemas/BigDecimal'
        netAmount:
          $ref: '#/components/schemas/BigDecimal'
        nonTaxableNetAmount:
          $ref: '#/components/schemas/BigDecimal'
        taxableNetAmount:
          $ref: '#/components/schemas/BigDecimal'
        chargeId:
          type: string
      x-stoplight:
        id: qyzuh5wb0kwk4
    EditLineItemInvoice:
      type: object
      properties:
        title:
          type: string
        description:
          type: string
      x-stoplight:
        id: wapuoorlblwxc
    LineItem:
      type: object
      properties:
        id:
          type: integer
          format: int64
        description:
          type: string
        netPrice:
          $ref: '#/components/schemas/BigDecimal'
        taxPercentage:
          $ref: '#/components/schemas/BigDecimal'
        tax:
          $ref: '#/components/schemas/BigDecimal'
        grossPrice:
          $ref: '#/components/schemas/BigDecimal'
        refundedLineItemId:
          type: integer
          format: int64
        refundLineItems:
          type: array
          $ref: '#/components/schemas/RefundLineItem'
      x-stoplight:
        id: mooawvaduyog6
    RefundLineItem:
      type: object
      properties:
        id:
          type: integer
          format: int64
        description:
          type: string
        netPrice:
          $ref: '#/components/schemas/BigDecimal'
        taxPercentage:
          $ref: '#/components/schemas/BigDecimal'
        tax:
          $ref: '#/components/schemas/BigDecimal'
        grossPrice:
          $ref: '#/components/schemas/BigDecimal'
        refundedLineItemId:
          type: integer
          format: int64
        invoice:
          type: object
          properties:
            id:
              type: integer
              format: int64
            state:
              type: string
              description: Invoice state enum
      x-stoplight:
        id: horrwvedaaod9
    LineItemInvoice:
      type: object
      properties:
        id:
          type: integer
          format: int64
        invoiceId:
          type: string
        title:
          type: string
        description:
          type: string
        netPrice:
          $ref: '#/components/schemas/BigDecimal'
        containedTax:
          $ref: '#/components/schemas/BigDecimal'
        grossPrice:
          $ref: '#/components/schemas/BigDecimal'
        lineItems:
          type: array
          items:
            $ref: '#/components/schemas/LineItem'
        state:
          type: string
          enum:
            - OPEN
            - CLOSED
            - BILLED
            - PAID
            - EXCEPTION_OPENING
            - EXCEPTION_BILLING
            - EXCEPTION_SEPA
            - EXCEPTION_PAYING
            - IGNORE
            - DISPUTED
            - IN_PAYMENT
            - PUSH_WAITING_FOR_USER
            - PUSH_CANCELLED_BY_USER
            - PUSH_BANK_REFUSED
            - PUSH_ERROR_INITIALISING
            - REFUND_IN_PROGRESS
            - REFUNDED
            - EXCEPTION_REFUND
            - THREE_DS_WAITING_FOR_USER
            - THREE_DS_FAILED
            - COLLECTION
            - PAID_EXTERNALLY
            - ALLOWS_REFUND
            - IS_REFUND
        paymentId:
          type: integer
          format: int64
        currency:
          type: string
        refundedInvoiceId:
          type: integer
          format: int64
        refundingInvoiceIds:
          type: array
          items:
            type: integer
            format: int64
      x-stoplight:
        id: ivc9ubs3vc7j8
    DebugBillInvoiceRequest:
      type: object
      properties:
        alreadyPaid:
          type: boolean
        refund:
          type: boolean
        mailMessage:
          type: string
      x-stoplight:
        id: f5ka19dq8wk5c
    CreateUpdateLineItem:
      description: 'Create or update a line item, beware that only one of `netPrice` or `grossPrice` can be defined.\nWhen providing a `linItemTemplateId` the inputs are further limited by what is configured overrideable by the template.\nWhen updating the taxPercentage of a lineitem without template, you need to provide either `netPrice` or `grossPrice` as a tax calculation base.'
      type: object
      properties:
        lineItemTemplateId:
          description: Use a line item template to define properties for this line item. Overrideable fields are defined by the template.
          type: integer
          format: int64
        grossPrice:
          $ref: '#/components/schemas/BigDecimal'
        netPrice:
          $ref: '#/components/schemas/BigDecimal'
        taxPercentage:
          $ref: '#/components/schemas/BigDecimal'
        description:
          description: The description to be shown on the invoice for this line item.
          type: string
      x-stoplight:
        id: quyxa7cp5c3c4
    CreateInvoiceRefund:
      type: object
      properties:
        reason:
          type: string
        lineItemRefundNetAmounts:
          type: integer
          format: int64
        lineItemRefundGrossAmounts:
          type: integer
          format: int64
        refundItems:
          type: object
          additionalProperties:
            type: object
            properties:
              amount:
                type: number
                format: double
              description:
                type: string
                description: Why this item is being refunded.
          example:
            '100':
              grossAmount: 5
              description: Refund
            '101':
              grossAmount: 5
              description: Refund
      x-stoplight:
        id: 5dinsaunmfkhp
    InvoicePriceDBO:
      type: object
      properties:
        priceOfRentalsNet:
          $ref: '#/components/schemas/BigDecimal'
        rebateNet:
          $ref: '#/components/schemas/BigDecimal'
        subTotalNet:
          $ref: '#/components/schemas/BigDecimal'
        paymentRebateNet:
          $ref: '#/components/schemas/BigDecimal'
        priceOfRentalsGross:
          $ref: '#/components/schemas/BigDecimal'
        rebateGross:
          $ref: '#/components/schemas/BigDecimal'
        subTotalGross:
          $ref: '#/components/schemas/BigDecimal'
        paymentRebateGross:
          $ref: '#/components/schemas/BigDecimal'
        netPrice:
          $ref: '#/components/schemas/BigDecimal'
        containedTax:
          $ref: '#/components/schemas/BigDecimal'
        grossPrice:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: v5b7yx2yagu90
    Kpi:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/KpiType'
        total:
          type: integer
          format: int32
          description: Total count of entities considered in the KPI calculation
        value:
          type: integer
          format: int32
          description: Count of entities matching the KPI criteria
        entity:
          $ref: '#/components/schemas/KpiEntityType'
        entityIds:
          type: array
          items:
            type: integer
            format: int64
          description: List of entity IDs that match the KPI criteria
      required:
        - type
        - total
        - value
        - entity
        - entityIds
    KpiType:
      type: string
      enum:
        - AVAILABLE_VEHICLES
        - AVERAGE_STATE_OF_CHARGE
        - IDLE_VEHICLES
        - LOW_BATTERY_VEHICLES
        - ON_DEMAND_STATIONS_AT_FULL_CAPACITY
        - OFFLINE_VEHICLES
        - SUCCESSFULLY_ENDED_RENTALS_TODAY
        - VEHICLES_CHARGING_OVER_TARGET_LEVEL
        - VEHICLES_IN_ACTIVE_BOOKINGS
        - VEHICLES_IN_ACTIVE_ON_DEMAND_RENTALS
        - VEHICLES_IN_OVERDUE_BOOKINGS
        - VEHICLES_IN_SERVICE
        - VEHICLES_OUTSIDE_BUSINESS_AREAS
        - VEHICLES_OUTSIDE_ON_DEMAND_STATION
        - VEHICLES_TO_RELOCATE
        - VEHICLES_WITH_CRITICAL_NEW_DAMAGE
        - VEHICLES_WITH_OPEN_DAMAGE
        - VEHICLES_WITH_OPEN_TASK
      description: Type of KPI metric
    KpiEntityType:
      type: string
      enum:
        - ON_DEMAND_STATION
        - RENTAL
        - VEHICLE
      description: Type of entity associated with the KPI
    Invoice:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        invoiceId:
          type: string
        guser:
          $ref: '#/components/schemas/GUser'
        branchId:
          type: integer
          format: int64
        state:
          type: string
          enum:
            - OPEN
            - CLOSED
            - BILLED
            - PAID
            - EXCEPTION_OPENING
            - EXCEPTION_BILLING
            - EXCEPTION_SEPA
            - EXCEPTION_PAYING
            - IGNORE
            - DISPUTED
            - IN_PAYMENT
            - PUSH_WAITING_FOR_USER
            - PUSH_CANCELLED_BY_USER
            - PUSH_BANK_REFUSED
            - PUSH_ERROR_INITIALISING
            - REFUND_IN_PROGRESS
            - REFUNDED
            - EXCEPTION_REFUND
            - THREE_DS_WAITING_FOR_USER
            - THREE_DS_FAILED
            - COLLECTION
            - PAID_EXTERNALLY
            - ALLOWS_REFUND
            - IS_REFUND
        invoiceDate:
          type: string
          format: date-time
        price:
          $ref: '#/components/schemas/InvoicePriceDBO'
        paymentId:
          type: integer
          format: int64
        chargeId:
          type: string
        refundedInvoiceId:
          type: integer
          format: int64
        refundingInvoiceIds:
          type: array
          items:
            type: integer
            format: int64
      x-stoplight:
        id: c3c8e6vwdtorr
    InvoiceLineItemTemplate:
      description: Allows the pre-definition of properties for line items of an invoice.
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          description: Name to easily identify this template (not used in line items created from this template).
          type: string
        description:
          description: Description used for the line items created from this template.
          type: string
        netPrice:
          $ref: '#/components/schemas/BigDecimal'
        grossPrice:
          $ref: '#/components/schemas/BigDecimal'
        taxPercentage:
          $ref: '#/components/schemas/BigDecimal'
        descriptionOverrideable:
          description: Defines if line items using this template are allowed to override the description.
          type: boolean
        priceOverrideable:
          description: Defines if line items using this template are allowed to override the price.
          type: boolean
        taxPercentageOverrideable:
          description: Defines if line items using this template are allowed to override the tax percentage.
          type: boolean
    TaskData:
      type: object
      properties:
        id:
          type: integer
          format: int64
        title:
          type: string
        description:
          type: string
        priority:
          $ref: '#/components/schemas/TaskPriority'
        taskState:
          $ref: '#/components/schemas/TaskState'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        branchId:
          type: integer
          format: int64
        roleId:
          type: integer
          format: int64
        assignedTo:
          $ref: '#/components/schemas/JsonGUserEmail'
        assignedToId:
          type: integer
          format: int64
        createdBy:
          $ref: '#/components/schemas/JsonGUserEmail'
        createdById:
          type: integer
          format: int64
        updatedBy:
          $ref: '#/components/schemas/JsonGUserEmail'
        updatedById:
          type: integer
          format: int64
        annotations:
          type: array
          items:
            $ref: '#/components/schemas/Annotation'
        category:
          $ref: '#/components/schemas/TaskCategory'
          readOnly: true
          deprecated: true
          description: 'Legacy category enum. Use categoryId instead for custom categories. At least one of category or categoryId must be provided when creating a task.'
        categoryId:
          type: integer
          format: int64
          description: 'ID of the task category. References a custom task category created via /task-categories. Takes precedence over category if both are provided.'
        categoryInfo:
          readOnly: true
          description: 'Category details. Read-only, populated from categoryId.'
          allOf:
            - $ref: '#/components/schemas/JsonTaskCategory'
        taskTemplateUuid:
          type: string
        completedByUuid:
          type: string
        files:
          type: array
          description: |
            Files linked to this task. When creating/updating a task, provide file IDs in this array.
            Each file must be pre-uploaded and the user must have permission to access it.
            In responses, includes complete file objects with download links.
          items:
            $ref: '#/components/schemas/File'
      x-stoplight:
        id: dlifwo52l5q1e
    IssueVehicle:
      type: object
      properties:
        id:
          type: integer
          format: int64
        licensePlate:
          type: string
        categoryId:
          type: integer
          format: int64
      x-stoplight:
        id: wy76uqhuecdp7
    IssueUser:
      type: object
      properties:
        id:
          type: integer
          format: int64
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
        birthdate:
          type: string
          format: date
        phone:
          type: string
      x-stoplight:
        id: q056bj6yi1k0l
    File:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        fileName:
          type: string
        fileSize:
          type: integer
          format: int64
        createdById:
          type: integer
          format: int64
        createdBy:
          $ref: '#/components/schemas/GUser'
        updatedById:
          type: integer
          format: int64
        updatedBy:
          $ref: '#/components/schemas/GUser'
        mediaType:
          type: string
        rental:
          type: integer
          format: int64
        issueComment:
          type: integer
          format: int64
        state:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
        damageId:
          type: integer
          format: int64
        downloadLink:
          type: string
      x-stoplight:
        id: ibl5f3w4ypi37
    IssueComment:
      type: object
      properties:
        id:
          type: integer
          format: int64
        state:
          type: string
          enum:
            - CREATED
            - CLOSED
            - WAITING
            - IN_REPAIR
        text:
          type: string
        createdAt:
          type: string
          format: date-time
        createdBy:
          $ref: '#/components/schemas/IssueUser'
        files:
          type: array
          items:
            $ref: '#/components/schemas/File'
      x-stoplight:
        id: pthv4jon588db
    Deposit:
      type: object
      properties:
        state:
          type: string
          enum:
            - ACTIVE
            - RELEASED
            - CHARGED
            - FAILED_TO_RELEASE
        expiresAt:
          type: string
          format: date-time
        amount:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: 4kfinpgveeynq
    Issue:
      type: object
      properties:
        id:
          type: integer
          format: int64
        rentalId:
          type: integer
          format: int64
        vehicle:
          $ref: '#/components/schemas/IssueVehicle'
        state:
          type: string
          enum:
            - CREATED
            - CLOSED
            - WAITING
            - IN_REPAIR
        category:
          type: string
          enum:
            - FINE
            - ACCIDENT
            - VEHICLE_PARTS_MISSING
            - VEHICLE_NEEDS_SERVICE
            - VEHICLE_NEEDS_INSPECTION
            - VEHICLE_NOT_READY
            - VEHICLE_DAMAGED
            - VEHICLE_COMMUNICATION
            - PARKING_PROBLEM
            - PURCHASE
            - TOLL
            - INSURANCE
            - DELIVERY
            - CORRECTION
        title:
          type: string
        description:
          type: string
        comments:
          type: array
          items:
            $ref: '#/components/schemas/IssueComment'
        group:
          $ref: '#/components/schemas/IssueUser'
        costCenter:
          $ref: '#/components/schemas/CostCenter'
        affected:
          $ref: '#/components/schemas/IssueUser'
        owner:
          $ref: '#/components/schemas/IssueUser'
        createdBy:
          $ref: '#/components/schemas/IssueUser'
        createdAt:
          type: string
          format: date-time
        updatedBy:
          $ref: '#/components/schemas/IssueUser'
        deposit:
          $ref: '#/components/schemas/Deposit'
        updatedAt:
          type: string
          format: date-time
        invoice:
          $ref: '#/components/schemas/LineItemInvoice'
        damages:
          type: array
          description: List of damages linked to this issue
          items:
            $ref: '#/components/schemas/Damage'
      x-stoplight:
        id: fbyfat9jlthmo
    IssueUpdate:
      type: object
      properties:
        state:
          type: string
          enum:
            - CREATED
            - CLOSED
            - WAITING
            - IN_REPAIR
        category:
          type: string
          enum:
            - FINE
            - ACCIDENT
            - VEHICLE_PARTS_MISSING
            - VEHICLE_NEEDS_SERVICE
            - VEHICLE_NEEDS_INSPECTION
            - VEHICLE_NOT_READY
            - VEHICLE_DAMAGED
            - VEHICLE_COMMUNICATION
            - PARKING_PROBLEM
            - PURCHASE
            - TOLL
            - INSURANCE
            - DELIVERY
            - CORRECTION
        title:
          type: string
        description:
          type: string
    TaskObject:
      type: object
      properties:
        guser:
          $ref: '#/components/schemas/GUser'
        guserId:
          type: integer
          format: int64
        vehicle:
          $ref: '#/components/schemas/Vehicle'
        vehicleId:
          type: integer
          format: int64
        issue:
          $ref: '#/components/schemas/Issue'
        issueId:
          type: integer
          format: int64
        vehicleCategory:
          $ref: '#/components/schemas/VehicleCategory'
        vehicleCategoryId:
          type: integer
          format: int64
        damageId:
          type: integer
          format: int64
      x-stoplight:
        id: cpuicegy1y994
    Task:
      type: object
      properties:
        recurringTaskId:
          type: integer
          format: int64
        taskData:
          $ref: '#/components/schemas/TaskData'
        taskObject:
          $ref: '#/components/schemas/TaskObject'
      x-stoplight:
        id: akl0mhd3yn0yl
    TaskCountForBranch:
      type: object
      properties:
        branchId:
          type: integer
          format: int64
        count:
          type: integer
          format: int64
      x-stoplight:
        id: mohekxa7xsdsr
    TaskCountForTimePeriodAndBranches:
      type: object
      properties:
        closedTasksCountForBranches:
          type: array
          items:
            $ref: '#/components/schemas/TaskCountForBranch'
        time:
          type: string
      x-stoplight:
        id: ap5aa982he8ob
    TaskMetricsDto:
      type: object
      properties:
        closedTasksCountForTimePeriodAndBranches:
          type: array
          items:
            $ref: '#/components/schemas/TaskCountForTimePeriodAndBranches'
        totalClosedTasksCount:
          type: integer
          format: int64
      x-stoplight:
        id: xkvaj4olrdx4v
    RecurrenceData:
      type: object
      properties:
        previousScheduledAt:
          type: string
          format: date-time
        nextScheduledAt:
          type: string
          format: date-time
        previousScheduledPoint:
          type: number
          format: double
        nextScheduledPoint:
          type: number
          format: double
        recurrenceCriteria:
          type: string
          enum:
            - TIME
            - KILOMETERS
            - RENTALS
        recurrenceTimeUnit:
          type: string
          enum:
            - NANOS
            - MICROS
            - MILLIS
            - SECONDS
            - MINUTES
            - HOURS
            - HALF_DAYS
            - DAYS
            - WEEKS
            - MONTHS
            - YEARS
            - DECADES
            - CENTURIES
            - MILLENNIA
            - ERAS
            - FOREVER
            - name
            - duration
        recurrenceEndCriteria:
          type: string
          enum:
            - TIME
            - KILOMETERS
            - RENTALS
        recurrenceEndAt:
          type: string
          format: date-time
        recurrenceEndTimeUnit:
          type: string
          enum:
            - NANOS
            - MICROS
            - MILLIS
            - SECONDS
            - MINUTES
            - HOURS
            - HALF_DAYS
            - DAYS
            - WEEKS
            - MONTHS
            - YEARS
            - DECADES
            - CENTURIES
            - MILLENNIA
            - ERAS
            - FOREVER
            - name
            - duration
        recurrenceStep:
          type: number
          format: double
        recurrenceEndPoint:
          type: number
          format: double
      x-stoplight:
        id: roalwdvkvnv8h
    TaskTemplate:
      type: object
      properties:
        taskType:
          type: string
          enum:
            - ONE_TIME
            - RECURRING
        taskData:
          $ref: '#/components/schemas/TaskData'
        taskObject:
          $ref: '#/components/schemas/TaskObject'
        recurrenceData:
          $ref: '#/components/schemas/RecurrenceData'
      x-stoplight:
        id: pxenaks35a7y4
    MessageTransmission:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        recipientId:
          type: integer
          format: int64
        content:
          type: string
        subject:
          type: string
        deliveredTime:
          type: string
          format: date-time
        readTime:
          type: string
          format: date-time
        status:
          type: string
          enum:
            - SENT_SUCCESS
            - SENT_ERROR
            - DELIVERED
            - READ
        notificationChannel:
          type: string
          enum:
            - SMS
            - EMAIL
            - PUSH
            - SLACK
      x-stoplight:
        id: ep3j6qn52pl8j
    MultiPolygon:
      type: object
      properties:
        envelope:
          $ref: '#/components/schemas/Envelope'
        factory:
          $ref: '#/components/schemas/GeometryFactory'
        SRID:
          type: integer
          format: int32
        userData:
          $ref: '#/components/schemas/Object'
      x-stoplight:
        id: 2kqh7fa7een9z
    BusinessUnit:
      type: object
      properties:
        id:
          type: integer
          format: int64
          readOnly: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
        createdById:
          type: integer
          format: int64
          readOnly: true
        updatedById:
          type: integer
          format: int64
          readOnly: true
        code:
          type: string
        name:
          type: string
        timeZoneId:
          $ref: '#/components/schemas/ZoneId'
        contactInfo:
          $ref: '#/components/schemas/BranchContactInfo'
        uiSettings:
          $ref: '#/components/schemas/BranchUserInterfaceSettings'
        referrerVoucherableId:
          type: integer
          format: int64
        refereeVoucherableId:
          type: integer
          format: int64
        signupVoucherableId:
          type: integer
          format: int64
        scale:
          type: integer
          format: int32
        taxPercentage:
          $ref: '#/components/schemas/BigDecimal'
        currency:
          type: string
        termsAndConditionsId:
          type: integer
          format: int64
        merchantAccountOverride:
          type: string
        sepaHandlingFeeNet:
          $ref: '#/components/schemas/BigDecimal'
        reserveAmountOnCc:
          $ref: '#/components/schemas/BigDecimal'
        appProperties:
          type: string
        dashboardProperties:
          type: string
        paymentProperties:
          type: string
        description:
          type: string
    ZoneId:
      type: object
      properties: { }
      x-stoplight:
        id: m0nl2hn12aw2c
    BillingInformation:
      type: object
      properties:
        legalName:
          type: string
        vatNumber:
          type: string
        registrationNumber:
          type: string
        iban:
          type: string
        logoBase64:
          type: string
        currencySymbol:
          type: string
      x-stoplight:
        id: ihz3bdc960ztw
    AddressInfo:
      type: object
      properties:
        street:
          type: string
        postcode:
          type: string
        city:
          type: string
        country:
          type: string
      x-stoplight:
        id: l5gvum9bgjta4
    BranchContactInfo:
      type: object
      properties:
        publicName:
          type: string
        websiteUrl:
          type: string
        billingInformation:
          $ref: '#/components/schemas/BillingInformation'
        address:
          $ref: '#/components/schemas/AddressInfo'
        email:
          type: string
        phone:
          type: string
        locationGuidelines:
          type: string
        customFields:
          type: string
      x-stoplight:
        id: xeysmxixvm8zb
    OpeningTimeEntry:
      type: object
      properties:
        day:
          type: string
          enum:
            - MONDAY
            - TUESDAY
            - WEDNESDAY
            - THURSDAY
            - FRIDAY
            - SATURDAY
            - SUNDAY
            - ENUMS
        slotNumber:
          type: integer
          format: int32
        state:
          type: string
          enum:
            - OPEN
            - CLOSED
        time:
          type: string
          format: partial-time
        prettyString:
          type: string
      x-stoplight:
        id: dzrrupj201key
    OpeningInformation:
      type: object
      properties:
        openingTimeEntries:
          type: array
          items:
            $ref: '#/components/schemas/OpeningTimeEntry'
      x-stoplight:
        id: gjb3jq8dbe9cg
    BranchUserInterfaceSettings:
      type: object
      properties:
        name:
          type: string
        faviconUrl:
          type: string
        dashboardLogoUrl:
          type: string
        dashboardLogoSmallUrl:
          type: string
        dashboardTitle:
          type: string
      x-stoplight:
        id: rog0utoi3lbm5
    Branch:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        createdById:
          type: integer
          format: int64
        updatedById:
          type: integer
          format: int64
        code:
          type: string
        name:
          type: string
        state:
          type: string
          enum:
            - IN_PREPARATION
            - OPERATIONAL
            - MAINTENANCE
            - HIBERNATION
            - OUT_OF_BUSINESS
        parent:
          type: integer
          format: int64
        children:
          type: array
          items:
            $ref: '#/components/schemas/Branch'
        businessArea:
          $ref: '#/components/schemas/MultiPolygon'
        position:
          $ref: '#/components/schemas/Point'
        timeZoneId:
          $ref: '#/components/schemas/ZoneId'
        contactInfo:
          $ref: '#/components/schemas/BranchContactInfo'
        openingInformation:
          $ref: '#/components/schemas/OpeningInformation'
        uiSettings:
          $ref: '#/components/schemas/BranchUserInterfaceSettings'
        types:
          type: string
          enum:
            - FREE_FLOATING
            - STATION_BASED
            - RENTAL
            - BOOKING_TIMESLOT
            - BOOKING_FLOATING_TIME
            - CATEGORY
            - val
            - ALL
        visibility:
          type: string
          enum:
            - PUBLIC
            - PRIVATE
        mapOverlayWarning:
          $ref: '#/components/schemas/MultiPolygon'
        mapOverlayWarningColor:
          type: string
        mapOverlayProhibited:
          $ref: '#/components/schemas/MultiPolygon'
        mapOverlayProhibitedColor:
          type: string
        description:
          type: string
        accessCode:
          type: string
        isBillable:
          type: boolean
        billableBranchId:
          type: integer
          format: int64
        revenueCenterId:
          type: integer
          format: int64
        referrerVoucherableId:
          type: integer
          format: int64
        refereeVoucherableId:
          type: integer
          format: int64
        signupVoucherableId:
          type: integer
          format: int64
        taxPercentage:
          $ref: '#/components/schemas/BigDecimal'
        scale:
          type: integer
          format: int32
        sepaHandlingFeeNet:
          $ref: '#/components/schemas/BigDecimal'
        reserveAmountOnCc:
          $ref: '#/components/schemas/BigDecimal'
        appProperties:
          type: string
        dashboardProperties:
          type: string
        paymentProperties:
          type: string
        currency:
          type: string
        merchantAccountOverride:
          type: string
        termsAndConditionsId:
          type: integer
          format: int64
        type:
          type: string
          enum:
            - LOCATION
            - CATEGORY
        operationMode:
          type: string
          enum:
            - ON_DEMAND
            - BOOKING
            - BOOKING_TIMESLOT
            - BOOKING_MODES
      x-stoplight:
        id: t5uqsqx3mzwev
    CompatibleBranch:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        isIncoming:
          type: boolean
        isOutgoing:
          type: boolean
    CompatibleBranchPutRequest:
      type: object
      properties:
        id:
          type: integer
          format: int64
        isIncoming:
          type: boolean
        isOutgoing:
          type: boolean
    RentalFeedback:
      type: object
      properties:
        rating:
          type: integer
          format: int32
        ratingDescription:
          type: string
      x-stoplight:
        id: s38md7ez5to2c
    RentalPhase:
      type: object
      properties:
        state:
          type: string
          enum:
            - DRIVING
            - PARKING
            - RESERVATION_FREE
            - RESERVATION_PAID
            - RESERVATION
        startTime:
          type: string
          format: date-time
        startKilometers:
          type: number
          format: double
        startPosition:
          $ref: '#/components/schemas/Point'
        startAddress:
          type: string
      x-stoplight:
        id: 3jaaghzcg9v7q
    RentalPrice:
      type: object
      properties:
        priceForReservationNet:
          $ref: '#/components/schemas/BigDecimal'
        priceForDrivingNet:
          $ref: '#/components/schemas/BigDecimal'
        priceForParkingNet:
          $ref: '#/components/schemas/BigDecimal'
        nonRebatablePriceNet:
          $ref: '#/components/schemas/BigDecimal'
        priceForReservationGross:
          $ref: '#/components/schemas/BigDecimal'
        priceForDrivingGross:
          $ref: '#/components/schemas/BigDecimal'
        priceForParkingGross:
          $ref: '#/components/schemas/BigDecimal'
        nonRebatablePriceGross:
          $ref: '#/components/schemas/BigDecimal'
        rebateNet:
          $ref: '#/components/schemas/BigDecimal'
        rebateGross:
          $ref: '#/components/schemas/BigDecimal'
        surchargeNet:
          $ref: '#/components/schemas/BigDecimal'
        surchargeGross:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: pwawvzn6vk9my
    AppliedRentalRebate:
      type: object
      properties:
        type:
          type: string
          enum:
            - GEOFENCE_PROMOTION
            - PACKAGE
            - SUBSCRIPTION
            - REWARD
            - FREE_REWARD
            - SINGLE_USE_VOUCHER
            - SIGNUP_REFERRAL
            - CASHBACK
            - RIDE_REWARD
            - CUSTOMER_CARE
            - VEHICLE_PROMOTION
            - PROMOTION
            - GEOFENCE_SURCHARGE
        voucherable:
          $ref: '#/components/schemas/Voucherable'
        name:
          type: string
        amountNet:
          $ref: '#/components/schemas/BigDecimal'
        amountGross:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: vv7u8ncp8bjf7
    Rental:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        rentalId:
          type: integer
          format: int64
        guserId:
          type: integer
          format: int64
        guser:
          $ref: '#/components/schemas/GUser'
        branchId:
          type: integer
          format: int64
        endBranchId:
          type: integer
          format: int64
        branchName:
          type: string
        endBranchName:
          type: string
        vehicle:
          $ref: '#/components/schemas/Vehicle'
        state:
          $ref: '#/components/schemas/RentalState'
        startTime:
          type: string
          format: date-time
        driveStartTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        startKilometers:
          type: number
          format: double
        endKilometers:
          type: number
          format: double
          nullable: true
          description: Vehicle odometer reading at end of rental. Only present for ended rentals.
        startPosition:
          $ref: '#/components/schemas/Point'
        endPosition:
          nullable: true
          description: GPS position where the rental ended. Only present for ended rentals.
          allOf:
            - $ref: '#/components/schemas/Point'
        startAddress:
          type: string
        endAddress:
          type: string
          nullable: true
          description: Reverse-geocoded address where the rental ended. Only present for ended rentals.
        distance:
          type: number
          format: double
          nullable: true
          description: Driven distance in km (endKilometers - startKilometers). Only present for ended rentals.
        encodedPolylineOfRoute:
          type: string
          nullable: true
          description: Google-encoded polyline of the driven route. Only present for active and ended rentals.
        imageOfRouteUrl:
          type: string
          nullable: true
          description: URL to a static map image of the driven route. Only present for active and ended rentals.
        rentalTimes:
          nullable: true
          description: Breakdown of time spent in each rental phase. Only present for ended rentals.
          allOf:
            - $ref: '#/components/schemas/RentalTimes'
        co2SavedInG:
          type: number
          format: double
          nullable: true
          description: Estimated CO2 saved in grams. Only present for ENDED rentals (not ENDED_NO_MOVEMENT).
        fileIds:
          type: array
          items:
            type: integer
            format: int64
        additions:
          type: array
          items:
            type: string
        totalDuration:
          $ref: '#/components/schemas/Duration'
        feedback:
          $ref: '#/components/schemas/RentalFeedback'
        bookingId:
          type: integer
          format: int64
        type:
          $ref: '#/components/schemas/RentalType'
        reason:
          type: string
        balanceName:
          type: string
        userGroupCode:
          type: string
        userGroup:
          $ref: '#/components/schemas/UserGroup'
        invoice:
          $ref: '#/components/schemas/Invoice'
        externalReference:
          type: string
        phases:
          type: array
          items:
            $ref: '#/components/schemas/RentalPhase'
        price:
          $ref: '#/components/schemas/RentalPrice'
        estimatedPrice:
          $ref: '#/components/schemas/RentalPrice'
        currency:
          type: string
        appliedRebates:
          type: array
          items:
            $ref: '#/components/schemas/AppliedRentalRebate'
        annotations:
          type: array
          items:
            $ref: '#/components/schemas/Annotation'
        deposit:
          $ref: '#/components/schemas/Deposit'
        linkedRentalId:
          type: integer
          format: int64
        startSoc:
          type: integer
          format: int32
        endSoc:
          type: integer
          format: int32
        priceV3:
          $ref: '#/components/schemas/PriceV3Dto'
        priceV4:
          $ref: '#/components/schemas/PriceV4Dto'
        pricingBundleVersion:
          $ref: '#/components/schemas/PricingBundleVersionEmbedded'
        rideMode:
          $ref: '#/components/schemas/RentalRideMode'
        station:
          $ref: '#/components/schemas/RentalStation'
      x-stoplight:
        id: q5vl6z2dz0tqt
    RentalStation:
      type: object
      properties:
        startStationId:
          type: string
          nullable: true
        returnStationId:
          type: string
          nullable: true
        reservedReturnStationId:
          type: integer
          format: int64
          nullable: true
    Note:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        title:
          type: string
        content:
          type: string
        state:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
        createdBy:
          $ref: '#/components/schemas/GUser'
        updatedBy:
          $ref: '#/components/schemas/GUser'
        createdById:
          type: integer
          format: int64
        updatedById:
          type: integer
          format: int64
        branch:
          $ref: '#/components/schemas/Branch'
        branchId:
          type: integer
          format: int64
        guser:
          $ref: '#/components/schemas/GUser'
        guserId:
          type: integer
          format: int64
        vehicle:
          $ref: '#/components/schemas/Vehicle'
        vehicleId:
          type: integer
          format: int64
        rental:
          $ref: '#/components/schemas/Rental'
        rentalId:
          type: integer
          format: int64
        booking:
          $ref: '#/components/schemas/Booking'
        bookingId:
          type: integer
          format: int64
        damage:
          $ref: '#/components/schemas/Damage'
        damageId:
          type: integer
          format: int64
      x-stoplight:
        id: yi64jy40nqi98
    AddNote:
      type: object
      properties:
        title:
          type: string
        content:
          type: string
      x-stoplight:
        id: ngbhj4t9epmib
    Fine:
      type: object
      properties:
        rental:
          type: integer
          format: int64
        title:
          type: string
        description:
          type: string
        location:
          type: string
        category:
          type: string
          enum:
            - PARKING
            - SPEEDING
            - TOWED
        netPriceOfFine:
          $ref: '#/components/schemas/BigDecimal'
        taxPercentageOfFine:
          type: integer
          format: int32
        handlingFeeNet:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: 9gvu7rx46ftdc
    PGSConfiguration:
      type: object
      properties:
        id:
          type: string
          format: uuid
        state:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
        name:
          type: string
        url:
          type: string
        apiKey:
          type: string
        webhookApiKey:
          type: string
        customProperties:
          type: string
        appProperties:
          type: string
        type:
          type: string
          enum:
            - ADYEN
            - CHECKOUT
            - APCOPAY
            - STRIPE
            - GOURBAN
        configurationProperties:
          type: string
      x-stoplight:
        id: fux5xev9067d9
    VehicleActivity:
      type: object
      properties:
        vehicleActivityType:
          type: string
          enum:
            - SET_OUT_OF_ORDER
            - SET_OPERATIONAL
            - REFRESH
            - DELAY
            - UPDATE_BRANCH_WITH_BUSINESS_AREA_STRICT
            - ADD_ANNOTATION
            - REMOVE_ANNOTATION
            - CHECK_AVAILABILITY
            - databaseId
            - parameterNameToType
            - NAME_TO_ACTION
        parameters:
          type: string
        id:
          type: integer
          format: int64
        friendlyName:
          type: string
        description:
          type: string
        customProperties:
          type: string
      x-stoplight:
        id: tjqgdogmph6r4
    CreateIssue:
      type: object
      properties:
        bookingId:
          description: |-
            The identifier of the booking this issues is related to, possibly identifying the related rental, vehicle, user depending on the bookings state.

            Cannot be used in combination with `rentalId`.

            If set the following properties are ignored: `vehicleId`, `branchId`, `accountId`, and `costCenterId`.
          type: integer
          format: int64
        rentalId:
          description: |-
            The identifier of the rental this issues is related to, identifying the related vehicle and user.

            Cannot be used in combination with `bookingId`.

            If set the following properties are ignored: `vehicleId`, `branchId`, `accountId`, and `costCenterId`.
          type: integer
          format: int64
        vehicleId:
          description: |-
            The identifier of the vehicle this issues is related to.

            Can be combined with `accountId` to also set the affected user or group.
          type: integer
          format: int64
        branchId:
          description: The identifier of the branch this issues is related to.
          type: integer
          format: int64
        accountId:
          description: |-
            The identifier of the account (user or user group) this issues is related to.

            Can be combined with `vehicleId`. When used without `vehicleId`, the `branchId` is required.

            Does not work in combination with `rentalId` or `bookingId`.
          type: integer
          format: int64
        costCenterId:
          description: |-
            The identifier of the cost center this issues is related to.

            Only works in combination with `accountId`.
          type: integer
          format: int64
        state:
          description: The state this issue should be created in>
          type: string
          enum:
            - CREATED
            - CLOSED
            - WAITING
            - IN_REPAIR
        category:
          description: What category this issue relates to (used for categorization and analysis).
          type: string
          enum:
            - FINE
            - ACCIDENT
            - VEHICLE_PARTS_MISSING
            - VEHICLE_NEEDS_SERVICE
            - VEHICLE_NEEDS_INSPECTION
            - VEHICLE_NOT_READY
            - VEHICLE_DAMAGED
            - VEHICLE_COMMUNICATION
            - PARKING_PROBLEM
            - PURCHASE
            - TOLL
            - INSURANCE
            - DELIVERY
            - CORRECTION
        title:
          description: A short title describing what this issue is about.
          type: string
        description:
          description: A long description of what this issues is about.
          type: string
        files:
          description: Ids of files related to this issue.
          type: array
          items:
            type: integer
            format: int64
      x-stoplight:
        id: ognbdpx579sn1
    CreateIssueComment:
      type: object
      properties:
        state:
          type: string
          enum:
            - CREATED
            - CLOSED
            - WAITING
            - IN_REPAIR
        text:
          type: string
      x-stoplight:
        id: yp62hy9s6ib2k
    CreateIssueInvoice:
      type: object
      properties:
        title:
          type: string
        description:
          type: string
      x-stoplight:
        id: jjsejpjzfd5ay
    MailMessage:
      type: object
      properties:
        message:
          type: string
      x-stoplight:
        id: dts2me3v5sx2v
    VerificationMedia:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        mimetype:
          type: string
        name:
          type: string
        size:
          type: string
      x-stoplight:
        id: szb394m6x84yn
    VerificationAttempt:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        sessionUuid:
          type: string
          format: uuid
        attemptUuid:
          type: string
          format: uuid
        linkToHub:
          type: string
        status:
          type: string
          enum:
            - created
            - approved
            - resubmission_requested
            - declined
            - expired
            - abandoned
            - started
            - review
            - submitted
            - inflow_completed
        mediaList:
          type: array
          items:
            $ref: '#/components/schemas/VerificationMedia'
        firstName:
          type: string
        lastName:
          type: string
        reason:
          type: string
        idNumber:
          type: string
        documentNumber:
          type: string
        documentCountry:
          type: string
        documentValidFrom:
          type: string
          format: date
        documentValidUntil:
          type: string
          format: date
        documentType:
          type: string
          enum:
            - PASSPORT
            - ID_CARD
            - DRIVERS_LICENSE
            - RESIDENCE_PERMIT
            - OTHER
        documentVerificationType:
          type: string
          enum:
            - DRIVING_LICENSE
            - ANY
        acceptanceTime:
          type: string
          format: date-time
        decisionTime:
          type: string
          format: date-time
        verificationId:
          type: integer
          format: int64
        drivingLicenseCategories:
          type: array
          items:
            $ref: '#/components/schemas/DrivingLicenseCategoryObject'
    DrivingLicenseCategoryObject:
      type: object
      properties:
        category:
          type: string
        codes:
          type: array
          items:
            type: string
        expiryDate:
          type: string
          format: date-time
        obtainmentDate:
          type: string
          format: date-time
      x-stoplight:
        id: 64kkf4yvdtjxv
    VehicleActionMini:
      type: object
      properties:
        id:
          type: integer
          format: int64
        type:
          type: string
          enum:
            - COMMAND
            - COMPOSITE_ACTIVITY
            - ACTIVITY
        friendlyName:
          type: string
        description:
          type: string
      x-stoplight:
        id: ie2tg85tb37if
    VehicleCompositeActivity:
      type: object
      properties:
        actionIds:
          type: array
          items:
            type: integer
            format: int64
        failOnAction:
          type: integer
          format: int64
        actions:
          type: array
          items:
            $ref: '#/components/schemas/VehicleActionMini'
        id:
          type: integer
          format: int64
        friendlyName:
          type: string
        description:
          type: string
        customProperties:
          type: string
      x-stoplight:
        id: nz0tgk5uzmj4x
    VehicleListDTO:
      type: object
      x-stoplight:
        id: fph1223dlrg8g
      properties:
        id:
          type: integer
          format: int64
        code:
          type: string
        licensePlate:
          type: string
        name:
          type: string
        vin:
          type: string
        stateOfCharge:
          type: integer
          format: int32
        iotStateOfCharge:
          type: integer
          format: int32
        kilometers:
          type: number
          format: double
        rentalState:
          $ref: '#/components/schemas/VehicleRentalState'
        serviceStateV2:
          $ref: '#/components/schemas/ServiceStateV2'
        batteryLevel:
          type: string
          enum:
            - UNKNOWN
            - HIGH
            - LOW
            - CRITICAL
            - MEDIUM
            - OPERATIONAL
            - OUT_OF_ORDER
            - OPERATIONAL_DB_VALUES
            - order
        updatedAt:
          type: string
          format: date-time
        branchId:
          type: integer
          format: int64
        categoryId:
          type: integer
          format: int64
        serviceStateV2LastModifiedAt:
          type: string
          format: date-time
        batteryLevelLastModifiedAt:
          type: string
          format: date-time
        rentalStateLastModifiedAt:
          type: string
          format: date-time
        powerStateLastModifiedAt:
          type: string
          format: date-time
        positionLastModifiedAt:
          type: string
          format: date-time
        lastEndedRentalAt:
          type: string
          format: date-time
        lastOperationalAt:
          type: string
          format: date-time
        lastOutOfOrderAt:
          type: string
          format: date-time
        lastOnlineAt:
          type: string
          format: date-time
        inactiveFor:
          $ref: '#/components/schemas/Duration'
        customProperties:
          type: string
        ignoredRentalBlockers:
          $ref: '#/components/schemas/IgnoredRentalBlockers'
        parkingReport:
          $ref: '#/components/schemas/ParkingReport'
        module:
          $ref: '#/components/schemas/JsonModule'
        iotModuleLevel:
          type: number
          format: float
        uuid:
          type: string
        createdAt:
          type: string
          format: date-time
        chargingState:
          type: string
          enum:
            - UNKNOWN
            - UNPLUGGED
            - PLUGGED
            - CHARGING
            - ACTIVE
        powerState:
          type: string
          enum:
            - UNKNOWN
            - 'OFF'
            - 'ON'
        carLockState:
          type: string
          enum:
            - UNKNOWN
            - 'UNLOCKED'
            - 'LOCKED'
        position:
          $ref: '#/components/schemas/Point'
        address:
          type: string
        legalInspectionDate:
          type: string
          format: date
        openTasksCount:
          type: integer
          format: int64
          deprecated: true
          description: 'Deprecated: use openTasks instead'
        openTasks:
          type: array
          items:
            $ref: '#/components/schemas/JsonTask'
          deprecated: true
        openDamages:
          type: array
          items:
            $ref: '#/components/schemas/JsonDamage'
          deprecated: true
        annotations:
          type: array
          items:
            $ref: '#/components/schemas/JsonAnnotation'
        hasOpenTasksForCurrentUser:
          type: boolean
        remainingKilometers:
          type: integer
          format: int32
        benefit:
          type: string
          enum:
            - DISCOUNTED
            - REWARDED
        benefits:
          type: string
          enum:
            - DISCOUNTED
            - REWARDED
        category:
          $ref: '#/components/schemas/JsonVehicleCategory'
          x-stoplight:
            id: 0m9kdzlwp5lk1
    JsonTask:
      type: object
      required:
        - id
        - title
        - state
        - priority
        - createdAt
      properties:
        id:
          type: integer
          format: int64
        title:
          type: string
        description:
          type: string
        state:
          type: string
          enum:
            - NEW
            - IN_PROGRESS
            - RECURRING
            - COMPLETED
        priority:
          type: string
          enum:
            - LOW
            - NORMAL
            - HIGH
            - SEVERE
        category:
          type: string
          deprecated: true
          description: "Deprecated. Use categoryInfo instead."
          enum:
            - MAINTENANCE
            - CLEANING
            - RELOCATION
            - INSPECTION
            - LOW_SOC
            - VEHICLE_SWAP
            - DAMAGE
            - ACCESS_AND_TELEMATICS
            - VEHICLE_FAULT
            - REGULATORY_AND_COMPLIANCE
            - BILLING_AND_CUSTOMER_CHARGE
            - ADMINISTRATIVE
        categoryInfo:
          $ref: '#/components/schemas/JsonTaskCategory'
        assignedTo:
          $ref: '#/components/schemas/JsonGUserEmail'
        createdAt:
          type: string
          format: date-time
    JsonTaskCategory:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    JsonDamage:
      type: object
      properties:
        id:
          type: integer
          format: int64
        part:
          type: string
        description:
          type: string
        state:
          type: string
          enum:
            - NEW
            - APPROVED
            - UNDER_REPAIR
            - REPAIRED
            - IGNORED
        severity:
          type: string
          enum:
            - MINOR
            - MEDIUM
            - HIGH
            - CRITICAL
        reportedBy:
          $ref: '#/components/schemas/JsonGUserEmail'
        createdAt:
          type: string
          format: date-time
    IgnoredRentalBlockers:
      type: object
      properties:
        ignoreStationChargingToggle:
          type: boolean
    ParkingReport:
      type: object
      nullable: true
      description: Parking report describing where the vehicle is parked. Null if no report exists.
      properties:
        note:
          type: string
          description: Free-text description of the parking spot
    QueryBulkUpdateDTO:
      type: object
      properties:
        branchIds:
          type: array
          items:
            type: integer
            format: int64
        serviceStatesV2:
          $ref: '#/components/schemas/ServiceStateV2'
        labels:
          type: array
          items:
            type: string
        tags:
          type: array
          items:
            type: string
        rentalStates:
          type: array
          items:
            $ref: '#/components/schemas/VehicleRentalState'
        powerStates:
          type: array
          items:
            type: string
            enum:
              - UNKNOWN
              - 'OFF'
              - 'ON'
        vehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
        includeChildBranches:
          type: boolean
      x-stoplight:
        id: ursgwtz7uefgb
    VehicleRentalState:
      type: string
      description: |-
        - `AVAILABLE`: The vehicle is available for rental.
        - `RESERVATION`: The vehicle currently has a rental in state RESERVATION associated.
        - `DRIVING`: The vehicle currently has a rental in state ACTIVE associated and the vehicle is in DRIVING mode.
        - `PARKING`: The vehicle currently has a rental in state ACTIVE associated and the vehicle is in PARKING mode.
        - `DELIVERED`: The vehicle is associated to a booking in state DELIVERED and ready for the user to turn the booking into a rental.
      enum:
        - AVAILABLE
        - RESERVATION
        - DRIVING
        - PARKING
        - DELIVERED
    VehicleRentalUnavailabilityReason:
      type: string
      description: |
        Reasons why a vehicle may be unavailable for rental:
          - `OUT_OF_ORDER`: Vehicle service state is non-operational.
          - `BATTERY_TOO_LOW`: Battery level is too low for rentals.
          - `OFFLINE`: Vehicle is marked as offline.
          - `MUST_REMAIN_ON_CHARGER`: Vehicle must remain on charger until the charging limit is reached.
      enum:
        - OUT_OF_ORDER
        - BATTERY_TOO_LOW
        - OFFLINE
        - MUST_REMAIN_ON_CHARGER
    VehicleBulkUpdateDTO:
      type: object
      properties:
        branchId:
          type: integer
          format: int64
        serviceStateV2:
          $ref: '#/components/schemas/ServiceStateV2'
        vehicleCategoryId:
          type: integer
          format: int64
        ignoredRentalBlockers:
          $ref: '#/components/schemas/IgnoredRentalBlockers'
      x-stoplight:
        id: p3gcg2k1y3cx3
    ServiceStateV2:
      type: string
      description: |
        Detailed service state of a vehicle:
          - `FUNCTIONAL`: Vehicle is fully operational and available for use
          - `INSPECT`: Vehicle requires inspection before further use
          - `RELOCATE`: Vehicle needs to be moved to a different location
          - `COLLECT`: Vehicle needs to be picked up from its current location
          - `SERVICE_ON_SITE`: Vehicle requires servicing that can be performed at its current location
          - `SERVICE_WORKSHOP`: Vehicle is being serviced in a workshop facility
          - `SERVICE_EXTERNAL`: Vehicle is being serviced by an external service provider
          - `REPLACE`: Vehicle needs to be replaced with another vehicle
          - `IMPOUNDED`: Vehicle has been seized by authorities and is not available
          - `LOST`: Vehicle location is unknown or cannot be determined
          - `RETIRED`: Vehicle has been permanently removed from service
          - `OTHER`: Vehicle is in a state not covered by other defined states
          - `READY_FOR_DEPLOYMENT`: Vehicle has been prepared and is ready to be deployed for service
          - `MAINTENANCE`: Vehicle is undergoing maintenance procedures
          - `WAITING_FOR_PARTS`: Vehicle repair is on hold pending parts availability
          - `UNREPAIRABLE`: Vehicle damage is too extensive to be repaired economically
          - `DEFLEETED`: Vehicle has been removed from the active fleet inventory
          - `OPERATIONAL_HOLD`: Vehicle is operational but temporarily held from service
          - `AWAITING_ACTION`: Vehicle is waiting for a specific action to be performed
          - `SERVICE_MECHANICS`: Vehicle requires mechanical service
          - `REGULATORY_INSPECTION_READY`: Vehicle is ready for regulatory inspection
          - `REGULATORY_INSPECTION`: Vehicle is undergoing regulatory inspection
          - `SERVICE_WORKSHOP_INSURANCE`: Vehicle is in workshop for insurance-related service
          - `SERVICE_WORKSHOP_QUEUE`: Vehicle is queued for workshop service
          - `READY_FOR_DEPLOYMENT_NEW`: New vehicle prepared for first deployment
          - `COLLECT_EXTERNAL`: Vehicle needs to be collected by external service
      enum:
        - FUNCTIONAL
        - INSPECT
        - RELOCATE
        - COLLECT
        - SERVICE_ON_SITE
        - SERVICE_WORKSHOP
        - SERVICE_EXTERNAL
        - REPLACE
        - IMPOUNDED
        - LOST
        - RETIRED
        - OTHER
        - READY_FOR_DEPLOYMENT
        - MAINTENANCE
        - WAITING_FOR_PARTS
        - UNREPAIRABLE
        - DEFLEETED
        - OPERATIONAL_HOLD
        - AWAITING_ACTION
        - SERVICE_MECHANICS
        - REGULATORY_INSPECTION_READY
        - REGULATORY_INSPECTION
        - SERVICE_WORKSHOP_INSURANCE
        - SERVICE_WORKSHOP_QUEUE
        - READY_FOR_DEPLOYMENT_NEW
        - COLLECT_EXTERNAL
    BulkUpdateDTO:
      type: object
      properties:
        query:
          $ref: '#/components/schemas/QueryBulkUpdateDTO'
        vehicleUpdate:
          $ref: '#/components/schemas/VehicleBulkUpdateDTO'
      x-stoplight:
        id: mazdm05myl8y0
    VehicleBulkUpdateError:
      type: object
      properties:
        vehicleId:
          type: integer
          format: int64
        errorCode:
          type: string
      x-stoplight:
        id: cewrg7hvzucw6
    BulkUpdateResponseDTO:
      type: object
      properties:
        numberOfSuccessfulUpdates:
          type: integer
          format: int32
        vehicleBulkUpdateErrors:
          type: array
          items:
            $ref: '#/components/schemas/VehicleBulkUpdateError'
      x-stoplight:
        id: mazdm05myl8y0
    VehicleBulkUpdateByIds:
      type: object
      required:
        - vehicleIds
        - updates
      properties:
        vehicleIds:
          type: array
          description: Set of vehicle IDs to update (1-1000 vehicles)
          minItems: 1
          maxItems: 1000
          uniqueItems: true
          items:
            type: integer
            format: int64
        updates:
          $ref: '#/components/schemas/VehicleBulkUpdateDTO'
    VehicleBulkUpdateByIdsResult:
      type: object
      properties:
        status:
          type: string
          description: Overall status of the bulk operation
          enum:
            - SUCCESSFUL
            - PARTIALLY_SUCCESSFUL
            - FAILED
        summary:
          $ref: '#/components/schemas/BulkOperationSummary'
        successful:
          type: array
          description: List of successfully updated vehicles
          items:
            $ref: '#/components/schemas/VehicleUpdateSuccess'
        failed:
          type: array
          description: List of vehicles that failed to update with error details
          items:
            $ref: '#/components/schemas/VehicleUpdateFailure'
        skipped:
          type: array
          description: List of vehicles that were skipped during the update
          items:
            $ref: '#/components/schemas/VehicleUpdateSkipped'
    BulkOperationStatus:
      type: string
      description: Overall status of a bulk operation
      enum:
        - SUCCESSFUL
        - PARTIALLY_SUCCESSFUL
        - FAILED
    OpenTasksOverviewResponse:
      type: object
      description: Vehicle-ID buckets of open tasks grouped by priority and category.
      required:
        - byPriority
        - byCategory
      properties:
        byPriority:
          type: array
          description: One bucket per task priority. All four priority buckets are always present; vehicleIds is empty when no vehicles have an open task of that priority.
          items:
            $ref: '#/components/schemas/TaskPriorityBucket'
        byCategory:
          type: array
          description: One bucket per task category. Every task category is always present; vehicleIds is empty when no vehicles have an open task in that category. Bucket order is not guaranteed.
          items:
            $ref: '#/components/schemas/TaskCategoryBucket'
    TaskPriorityBucket:
      type: object
      description: Vehicles with at least one open task at a given priority.
      required:
        - priority
        - vehicleIds
      properties:
        priority:
          $ref: '#/components/schemas/TaskPriority'
        vehicleIds:
          type: array
          description: Deduplicated, ascending list of vehicle IDs.
          items:
            type: integer
            format: int64
    TaskCategoryBucket:
      type: object
      description: Vehicles with at least one open task in a given category. The bucket is emitted for every task category; vehicleIds is empty when none match.
      required:
        - categoryId
        - categoryUuid
        - vehicleIds
      properties:
        categoryId:
          type: integer
          format: int64
          description: Database identifier of the task category.
        categoryUuid:
          type: string
          format: uuid
          description: Stable identifier of the task category.
        vehicleIds:
          type: array
          description: Deduplicated, ascending list of vehicle IDs.
          items:
            type: integer
            format: int64
    OpenDamagesOverviewResponse:
      type: object
      description: Vehicle-ID buckets of open damages grouped by severity.
      required:
        - bySeverity
      properties:
        bySeverity:
          type: array
          description: One bucket per damage severity, in ascending order (MINOR, MEDIUM, HIGH, CRITICAL). All four buckets are always present; vehicleIds is empty when no vehicles have an open damage of that severity. Damages with null severity are excluded.
          items:
            $ref: '#/components/schemas/DamageSeverityBucket'
    DamageSeverityBucket:
      type: object
      description: Vehicles with at least one open damage at a given severity.
      required:
        - severity
        - vehicleIds
      properties:
        severity:
          type: string
          enum:
            - MINOR
            - MEDIUM
            - HIGH
            - CRITICAL
        vehicleIds:
          type: array
          description: Deduplicated, ascending list of vehicle IDs.
          items:
            type: integer
            format: int64
    TaskCategoryResponse:
      type: object
      description: Task category
      properties:
        id:
          type: integer
          format: int64
          description: Database identifier
        uuid:
          type: string
          format: uuid
          description: Unique identifier
        name:
          type: string
          description: Category name
    TaskCategoryCreateRequest:
      type: object
      description: Request to create a new task category
      required:
        - name
      properties:
        name:
          type: string
          description: 'Category name. Must contain only Unicode letters, numbers, and spaces, with at least one letter or number.'
          pattern: '^(?=.*[\p{L}\p{N}])[\p{L}\p{N} ]+$'
    TaskCategoryPatchRequest:
      type: object
      description: Request to update a task category
      properties:
        name:
          type: string
          description: 'New category name. Must contain only Unicode letters, numbers, and spaces, with at least one letter or number.'
          pattern: '^(?=.*[\p{L}\p{N}])[\p{L}\p{N} ]+$'
    PageTaskCategoryResponse:
      type: object
      description: Paginated list of task categories
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/TaskCategoryResponse'
        totalElements:
          type: integer
          format: int64
        totalPages:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        number:
          type: integer
          format: int32
    TaskCategory:
      type: string
      deprecated: true
      description: 'Legacy task category enum. Use custom task categories via /task-categories instead.'
      enum:
        - MAINTENANCE
        - CLEANING
        - RELOCATION
        - INSPECTION
        - LOW_SOC
        - VEHICLE_SWAP
        - DAMAGE
        - ACCESS_AND_TELEMATICS
        - VEHICLE_FAULT
        - REGULATORY_AND_COMPLIANCE
        - BILLING_AND_CUSTOMER_CHARGE
        - ADMINISTRATIVE
    TaskPriority:
      type: string
      description: Task priority level
      enum:
        - LOW
        - NORMAL
        - HIGH
        - SEVERE
    TaskState:
      type: string
      description: Task state
      enum:
        - NEW
        - IN_PROGRESS
        - RECURRING
        - COMPLETED
    BulkOperationSummary:
      type: object
      properties:
        total:
          type: integer
          format: int32
          description: Total number of vehicles processed
        successful:
          type: integer
          format: int32
          description: Number of successfully updated vehicles
        failed:
          type: integer
          format: int32
          description: Number of vehicles that failed to update
        skipped:
          type: integer
          format: int32
          description: Number of vehicles that were skipped
    VehicleUpdateSuccess:
      type: object
      properties:
        vehicleId:
          type: integer
          format: int64
          description: ID of the successfully updated vehicle
    VehicleUpdateFailure:
      type: object
      properties:
        vehicleId:
          type: integer
          format: int64
          description: ID of the vehicle that failed to update
        errorCode:
          type: string
          description: Error code indicating the failure reason
        userMessage:
          type: string
          description: Human-readable error message
    VehicleUpdateSkipped:
      type: object
      properties:
        vehicleId:
          type: integer
          format: int64
          description: ID of the vehicle that was skipped
    VehicleIdsRequest:
      type: object
      properties:
        vehicleIds:
          type: array
          items:
            type: integer
            format: int64
      x-stoplight:
        id: ijok4ky1h0ery
    VehicleTasksAndAnnotations:
      type: object
      properties:
        id:
          type: integer
          format: int64
        annotations:
          type: array
          items:
            $ref: '#/components/schemas/JsonAnnotation'
        openTasksCount:
          type: integer
          format: int64
          deprecated: true
          description: 'Deprecated: use openTasks instead'
      x-stoplight:
        id: 3n6fhb7djwc06
    VehicleActivityLog:
      type: object
      properties:
        id:
          type: integer
          format: int64
        firstName:
          type: string
          deprecated: true
          description: Deprecated 2025/07 - Replaced by guser.firstName / adminGuser.firstName
        lastName:
          type: string
          deprecated: true
          description: Deprecated 2025/07 - Replaced by guser.lastName / adminGuser.lastName
        position:
          $ref: '#/components/schemas/Point'
        type:
          type: string
          enum:
            - SERVICE_STATE
            - BATTERY_LEVEL
            - IOT_STATE
            - LOST_VEHICLE_SCANNED
            - RFID_READER
            - COMMAND
            - OUT_OF_RENTAL_ACTIVITY
            - BRANCH_CHANGED
            - RENTAL_VEHICLE_COMMAND
            - RENTAL_BLOCKERS_IGNORED
            - DOCKING
            - BLUETOOTH
            - CHARGING
            - MAINTENANCE
            - SMOKE_DETECTION
        value:
          type: string
        createdAt:
          type: string
          format: date-time
        guser:
          $ref: '#/components/schemas/JsonGUser'
        adminGuser:
          $ref: '#/components/schemas/JsonGUser'
        details:
          $ref: '#/components/schemas/VehicleActivityLogDetails'
      x-stoplight:
        id: 8g4hhk7zwyle9
    VehicleTelemetry:
      type: object
      properties:
        position:
          $ref: '#/components/schemas/Point'
        kilometers:
          type: number
          format: double
        remainingKilometers:
          type: number
          format: double
        stateOfCharge:
          type: integer
          format: int32
        iotModuleLevel:
          type: number
          format: float
        iotStateOfCharge:
          type: integer
          format: int32
        speed:
          type: number
          format: float
        batteryVoltage:
          type: number
          format: float
        chargingState:
          $ref: '#/components/schemas/VehicleChargingState'
        batteryLevel:
          $ref: '#/components/schemas/VehicleBatteryLevel'
        powerState:
          $ref: '#/components/schemas/VehiclePowerState'
        helmetCount:
          type: integer
          format: int32
        helmetsState:
          $ref: '#/components/schemas/HelmetsState'
        rfidCardHolderCount:
          type: integer
          format: int32
        rfidCardReaderTagsRead:
          type: array
          items:
            $ref: '#/components/schemas/VehicleTelemetryDetectedRfidCard'
        versionInfo:
          $ref: '#/components/schemas/VehicleTelemetryVersionInfo'
        bikeLockState:
          $ref: '#/components/schemas/BikeLockState'
        tailboxLidState:
          $ref: '#/components/schemas/TailboxLidState'
        isOnline:
          type: boolean
        doorsState:
          $ref: '#/components/schemas/DoorsState'
        keyHolderState:
          $ref: '#/components/schemas/KeyHolderState'
        parkBrakeState:
          $ref: '#/components/schemas/ParkBrakeState'
    VehicleTelemetryDetectedRfidCard:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
        detectionTimestamp:
          type: string
          format: date-time
    VehicleTelemetryVersionInfo:
      type: object
      properties:
        iotFirmware:
          type: string
        iotHardware:
          type: string
        ecuFirmware:
          type: string
        ecuHardware:
          type: string
        modemFirmware:
          type: string
        modemHardware:
          type: string
        bluetoothFirmware:
          type: string
        versionUpdatedAt:
          type: string
          format: date-time
        updateStatus:
          type: integer
          format: int32
        updateStatusUpdatedAt:
          type: string
          format: date-time
        iccid:
          type: string
        iccidUpdatedAt:
          type: string
          format: date-time
    VehicleChargingState:
      type: string
      enum:
        - UNKNOWN
        - UNPLUGGED
        - PLUGGED
        - CHARGING
    VehicleBatteryLevel:
      type: string
      enum:
        - UNKNOWN
        - HIGH
        - MEDIUM
        - LOW
        - CRITICAL
    VehiclePowerState:
      type: string
      enum:
        - UNKNOWN
        - 'OFF'
        - 'ON'
    CarLockState:
      type: string
      enum:
        - UNKNOWN
        - 'UNLOCKED'
        - 'LOCKED'
    HelmetsState:
      type: string
      enum:
        - PRESENT
        - PARTIALLY
        - MISSING
    BikeLockState:
      type: string
      enum:
        - LOCKED
        - UNLOCKED
        - UNKNOWN
    TailboxLidState:
      type: string
      enum:
        - UNSET
        - OPEN
        - CLOSED
    DoorsState:
      type: string
      enum:
        - ALL_DOORS_CLOSED
        - FRONT_LEFT_OPEN
        - FRONT_RIGHT_OPEN
        - REAR_LEFT_OPEN
        - REAR_RIGHT_OPEN
        - HOOD_OPEN
        - TRUNK_OPEN
        - ALL_DOORS_OPEN
        - UNKNOWN
    KeyHolderState:
      type: string
      enum:
        - UNSET
        - MISSING
        - PRESENT
    ParkBrakeState:
      type: string
      enum:
        - UNSET
        - 'OFF'
        - 'ON'
    VehicleLogEntry:
      type: object
      properties:
        id:
          type: integer
          format: int64
        time:
          type: string
          format: date-time
        stateOfCharge:
          type: integer
          format: int32
        iotStateOfCharge:
          type: integer
          format: int32
        iotModuleLevel:
          type: number
          format: float
        position:
          $ref: '#/components/schemas/Point'
        kilometers:
          type: number
          format: double
        speed:
          type: number
          format: float
        batteryVoltage:
          type: number
          format: float
        serviceState:
          type: string
          enum:
            - OPERATIONAL
            - LOW_SOC
            - OUT_OF_ORDER
            - RETIRED
            - CRITICAL_SOC
            - IN_SERVICE
        serviceStateV2:
          $ref: '#/components/schemas/ServiceStateV2'
        batteryLevel:
          type: string
          enum:
            - UNKNOWN
            - HIGH
            - LOW
            - CRITICAL
            - MEDIUM
            - OPERATIONAL
            - OUT_OF_ORDER
            - OPERATIONAL_DB_VALUES
            - order
        rentalState:
          $ref: '#/components/schemas/VehicleRentalState'
        chargingState:
          type: string
          enum:
            - UNKNOWN
            - UNPLUGGED
            - PLUGGED
            - CHARGING
            - ACTIVE
        powerState:
          type: string
          enum:
            - UNKNOWN
            - 'OFF'
            - 'ON'
        carLockState:
          type: string
          enum:
            - UNKNOWN
            - 'UNLOCKED'
            - 'LOCKED'
        branchId:
          type: integer
          format: int64
        vehicleId:
          type: integer
          format: int64
      x-stoplight:
        id: 62p0mwp9w74sq
    VehicleDetails:
      type: object
      properties:
        vehicle:
          $ref: '#/components/schemas/Vehicle'
        vehicleLogEntries:
          type: array
          items:
            $ref: '#/components/schemas/VehicleLogEntry'
      x-stoplight:
        id: 6dy2t3y8xbeio
    AssociateModule:
      type: object
      properties:
        moduleId:
          type: integer
          format: int64
        externalId:
          type: string
        force:
          type: boolean
          description: |-
            Forces the association of the vehicle with the new module.
            
            Allows replacement during a rental and if the module is already assigned to a different vehicle (will dissociate it).
        safeReplace:
          type: boolean
          description: |-
            Allow replacing an existing module on the vehicle in a safe manner.
            
            Replacements are only possible if the vehicle is not in a rental and the new module is not used by another vehicle yet.
      x-stoplight:
        id: 4bgso8vsivk5r
    VehicleLogEntrySimple:
      type: object
      properties:
        id:
          type: integer
          format: int64
        time:
          type: string
          format: date-time
        stateOfCharge:
          type: integer
          format: int32
        iotStateOfCharge:
          type: integer
          format: int32
        iotModuleLevel:
          type: number
          format: float
        position:
          $ref: '#/components/schemas/Point'
        kilometers:
          type: number
          format: double
        serviceState:
          type: string
          enum:
            - OPERATIONAL
            - LOW_SOC
            - OUT_OF_ORDER
            - RETIRED
            - CRITICAL_SOC
            - IN_SERVICE
        serviceStateV2:
          $ref: '#/components/schemas/ServiceStateV2'
        batteryLevel:
          type: string
          enum:
            - UNKNOWN
            - HIGH
            - LOW
            - CRITICAL
            - MEDIUM
            - OPERATIONAL
            - OUT_OF_ORDER
            - OPERATIONAL_DB_VALUES
            - order
        rentalState:
          $ref: '#/components/schemas/VehicleRentalState'
        powerState:
          type: string
          enum:
            - UNKNOWN
            - 'OFF'
            - 'ON'
        carLockState:
          type: string
          enum:
            - UNKNOWN
            - 'UNLOCKED'
            - 'LOCKED'
        vehicleBatteries:
          type: array
          items:
            $ref: '#/components/schemas/VehicleBattery'
      x-stoplight:
        id: 9uwyikofr7d4p
    VehicleBattery:
      type: object
      properties:
        serialNumber:
          type: string
        slot:
          type: integer
          format: int32
        voltage:
          type: number
          format: float
        stateOfCharge:
          type: integer
          format: int32
        stateOfHealth:
          type: integer
          format: int32
        temperatures:
          type: array
          items:
            type: integer
            format: int32
        chargeCycles:
          type: integer
          format: int32
    PublicAsset:
      type: object
      properties:
        link:
          type: string
        checksum:
          type: string
      x-stoplight:
        id: oi4g670ho3qe3
    FileUpdate:
      type: object
      properties:
        state:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
      x-stoplight:
        id: l76fvk2spu6tf
    JsonBranch:
      type: object
      properties:
        id:
          type: integer
          format: int64
        code:
          type: string
        name:
          type: string
        timeZoneId:
          $ref: '#/components/schemas/ZoneId'
        contactInfo:
          $ref: '#/components/schemas/BranchContactInfo'
      x-stoplight:
        id: z7ni2zf9b0yd2
    JsonVehicle:
      type: object
      properties:
        id:
          type: integer
          format: int64
        licensePlate:
          type: string
        code:
          type: string
        name:
          type: string
        chargingState:
          type: string
          enum:
            - UNKNOWN
            - UNPLUGGED
            - PLUGGED
            - CHARGING
            - ACTIVE
        stateOfCharge:
          type: integer
          format: int32
        iotStateOfCharge:
          type: integer
          format: int32
        remainingKilometers:
          type: integer
          format: int32
        categoryId:
          type: integer
          format: int64
        benefits:
          type: string
          enum:
            - DISCOUNTED
            - REWARDED
        rewardStationIds:
          type: array
          items:
            type: integer
            format: int64
        position:
          $ref: '#/components/schemas/Point'
        rentalState:
          $ref: '#/components/schemas/RentalState'
        module:
          $ref: '#/components/schemas/JsonModule'
      x-stoplight:
        id: lh9n7qpr20kf7
    Damage:
      type: object
      x-stoplight:
        id: 8qubeh17eer3n
      properties:
        id:
          type: integer
          format: int64
        description:
          type: string
        part:
          type: string
        state:
          type: string
          enum:
            - NEW
            - APPROVED
            - UNDER_REPAIR
            - REPAIRED
            - IGNORED
        severity:
          type: string
          enum:
            - MINOR
            - MEDIUM
            - HIGH
            - CRITICAL
        vehiclePosition:
          $ref: '#/components/schemas/Point'
        userPosition:
          $ref: '#/components/schemas/Point'
        branch:
          $ref: '#/components/schemas/JsonBranch'
        branchId:
          type: integer
          format: int64
        vehicleId:
          type: integer
          format: int64
        files:
          type: array
          items:
            $ref: '#/components/schemas/File'
        previousRentalId:
          type: integer
          format: int64
        currentRentalId:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        reportedById:
          type: integer
          x-stoplight:
            id: b06ham2sbh1up
          description: userId for the reportedBy field
          writeOnly: true
        reportedBy:
          $ref: '#/components/schemas/JsonGUser'
        causedById:
          type: integer
          x-stoplight:
            id: w9amwicddi4vh
          description: userId for the causedBy field
          writeOnly: true
        causedBy:
          $ref: '#/components/schemas/JsonGUser'
        createdBy:
          $ref: '#/components/schemas/JsonGUser'
        updatedBy:
          $ref: '#/components/schemas/JsonGUser'
        vehicle:
          $ref: '#/components/schemas/JsonVehicle'
        repairCode:
          type: string
        issue:
          type: object
          description: The issue this damage is linked to
          properties:
            id:
              type: integer
              format: int64
              description: Issue ID
    SettingSimple:
      type: object
      properties:
        key:
          type: string
        area:
          type: string
          enum:
            - APP
            - DASHBOARD
            - CORE
            - SHARED
        branchIds:
          type: array
          items:
            type: integer
            format: int64
        value:
          type: string
      x-stoplight:
        id: mei0w94f760jg
    UserGroupMember:
      type: object
      properties:
        guserId:
          type: integer
          format: int64
        firstName:
          type: string
        lastName:
          type: string
        code:
          type: string
        email:
          type: string
        phone:
          type: string
        state:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
        superiorEmail:
          type: string
          description: The email of the superior of the user group member
        defaultCostCenter:
          type: object
          description: The default cost center for the user group member
          properties:
            id:
              type: integer
              format: int64
              description: The cost center identifier'
            name:
              type: string
              description: The cost center's name
        role:
          type: string
          enum:
            - OWNER
            - ADMIN
            - MEMBER
          description: 'The user group member role. The OWNER role is a read only role, and can''t be updated or assigned.'
      x-stoplight:
        id: dhcw1pkrrzhr2
    CustomVehicleCommand:
      type: object
      properties:
        command:
          type: string
          enum:
            - START
            - STOP
            - LOCK
            - UNLOCK
            - LOCATE
            - OPEN_SADDLE
            - OPEN_TAILBOX
            - LOCK_TAILBOX
            - UNLOCK_TAILBOX
            - ALARM_ON
            - ALARM_OFF
            - SET_MAX_SPEED
            - CUSTOM_COMMAND
            - REBOOT
            - TEST_ASYNC_ONLY
            - UNLOCK_BIKE_LOCK
            - UNLOCK_STATION_PORT
            - databaseId
            - supportedProcessExecutionTypeToSupportedReturnTypes
        executionType:
          type: string
          description: |-
            defines if the command should be executed synchronously or asynchronously
            - `SYNC`: the command will wait until the vehicle responds and returns if the command was successful/failed
            - `ASYNC`: ensures that the command is sent to the vehicle but does not await a respond
          enum:
            - ASYNC
            - SYNC
        returnType:
          type: string
          enum:
            - DATA
            - STATUS
            - NONE
        namedParameters:
          type: string
        customCommandTemplate:
          type: string
        customCommandName:
          type: string
        id:
          type: integer
          format: int64
        friendlyName:
          type: string
        description:
          type: string
        customProperties:
          type: string
      x-stoplight:
        id: ko93l2lgl39v8
    TutorialSlide:
      type: object
      properties:
        id:
          type: integer
          format: int64
        title:
          type: string
        description:
          type: string
        image:
          type: string
        backgroundColour:
          type: string
        backgroundImage:
          type: string
        customCss:
          type: string
        tutorialId:
          type: integer
          format: int64
        rank:
          type: integer
          format: int32
        translationKeys:
          type: string
      x-stoplight:
        id: ur3eg6oz8wvzz
    Tutorial:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        trigger:
          type: string
          enum:
            - APP_START
            - MODE_SWITCH
            - VEHICLE_SELECTION
            - SIGNUP
            - FIRST_RENTAL
            - START_RENTAL
            - END_RENTAL
            - MENU
            - START_RESERVATION
            - MENU_LINK
            - value
        singleView:
          type: boolean
        active:
          type: boolean
        slides:
          type: array
          items:
            $ref: '#/components/schemas/TutorialSlide'
        vehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
        customerSupport:
          type: boolean
        doNotShowAgain:
          type: boolean
      x-stoplight:
        id: 2szmu2v1bpu3w
    Setting:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        createdById:
          type: integer
          format: int64
        updatedById:
          type: integer
          format: int64
        area:
          type: string
          enum:
            - APP
            - DASHBOARD
            - CORE
            - SHARED
        key:
          type: string
        name:
          type: string
        value:
          type: string
        branchIds:
          type: array
          items:
            type: integer
            format: int64
        settingValueType:
          type: string
          enum:
            - UNKNOWN_SETTING_TYPE
            - FEATURE_TOGGLE
            - RENTAL_REQUIREMENTS
            - PRICE_CALCULATION_GENERAL_SETTINGS
            - NOTIFICATION_CHANNEL_SETTINGS
            - DELETED_TYPE_1
            - SIMPLE_STRING_SETTING
            - REFERRAL_REQUIREMENTS
            - SIMPLE_INTEGER_SETTING
            - PLUGIN_TOGGLE_SETTING
            - RENTAL_RESERVATION_SETTINGS
            - FLOATING_BOOKING_SETTINGS
            - RENTAL_ENDED_NO_MOVEMENT_SETTINGS
            - END_USER_DATA_UPDATE_PERMISSION_SETTINGS
            - GENERAL_BOOKING_SETTINGS
            - SHARED_BOOKING_SETTINGS
            - STATION_REWARD_SETTINGS
            - VEHICLE_RADAR_SETTING
            - BILLING_SETTING
            - VEHICLE_MAINTENANCE_ACTIONS_SETTING
            - BRANCH_RESOLVER_SETTING
            - IPSTACK_SETTING
            - SCHEDULER_SETTING
            - TASK_SETTING
            - BALANCE_SETTING
            - PAYMENT_SETTING
            - SIMPLE_DOUBLE_SETTING
            - PAYMENT_SETTING_APAYA
            - PRE_END_RENTAL_ACTIONS_SETTING
            - MONEY_DEPOSIT_SETTING
            - SMS_CLIENT_SETTING
            - OPEN_TAILBOX_ON_RENTAL_START_SETTING
            - DEVICE_CLOUD_V2_SETTING
            - ISFU_SETTING
            - GBFS_SETTING
            - MDS_SETTING
            - VEHICLE_LABELS_SETTING
            - APPLY_VOUCHERABLE_TO_BALANCE
            - RATE_LIMITER_SETTING
            - ACCESS_LOGGING_SETTING
            - VERIFF_SETTING
            - STATION_SERVICE_SETTINGS
            - USER_LABELS_SETTING
            - MAAS_SETTING
            - RENTAL_DRIVING_MONITORING_SETTING
            - VEHICLE_OFFLINE_NOTIFICATION_SETTING
            - PHONE_REGISTRATION_FILTER_SETTING
            - SIMPLE_JSON_SETTING
            - value
            - settingClass
        isPublic:
          type: boolean
      x-stoplight:
        id: 01vppbhk4ikj9
    SettingBulkUpdate:
      type: object
      properties:
        id:
          type: integer
          format: int64
        area:
          type: string
          enum:
            - APP
            - DASHBOARD
            - CORE
            - SHARED
        key:
          type: string
        name:
          type: string
        value:
          type: string
        branchIds:
          type: array
          items:
            type: integer
            format: int64
        settingValueType:
          type: string
          enum:
            - UNKNOWN_SETTING_TYPE
            - FEATURE_TOGGLE
            - RENTAL_REQUIREMENTS
            - PRICE_CALCULATION_GENERAL_SETTINGS
            - NOTIFICATION_CHANNEL_SETTINGS
            - DELETED_TYPE_1
            - SIMPLE_STRING_SETTING
            - REFERRAL_REQUIREMENTS
            - SIMPLE_INTEGER_SETTING
            - PLUGIN_TOGGLE_SETTING
            - RENTAL_RESERVATION_SETTINGS
            - FLOATING_BOOKING_SETTINGS
            - RENTAL_ENDED_NO_MOVEMENT_SETTINGS
            - END_USER_DATA_UPDATE_PERMISSION_SETTINGS
            - GENERAL_BOOKING_SETTINGS
            - SHARED_BOOKING_SETTINGS
            - STATION_REWARD_SETTINGS
            - VEHICLE_RADAR_SETTING
            - BILLING_SETTING
            - VEHICLE_MAINTENANCE_ACTIONS_SETTING
            - BRANCH_RESOLVER_SETTING
            - IPSTACK_SETTING
            - SCHEDULER_SETTING
            - TASK_SETTING
            - BALANCE_SETTING
            - PAYMENT_SETTING
            - SIMPLE_DOUBLE_SETTING
            - PAYMENT_SETTING_APAYA
            - PRE_END_RENTAL_ACTIONS_SETTING
            - MONEY_DEPOSIT_SETTING
            - SMS_CLIENT_SETTING
            - OPEN_TAILBOX_ON_RENTAL_START_SETTING
            - DEVICE_CLOUD_V2_SETTING
            - ISFU_SETTING
            - GBFS_SETTING
            - MDS_SETTING
            - VEHICLE_LABELS_SETTING
            - APPLY_VOUCHERABLE_TO_BALANCE
            - RATE_LIMITER_SETTING
            - ACCESS_LOGGING_SETTING
            - VERIFF_SETTING
            - STATION_SERVICE_SETTINGS
            - USER_LABELS_SETTING
            - MAAS_SETTING
            - RENTAL_DRIVING_MONITORING_SETTING
            - VEHICLE_OFFLINE_NOTIFICATION_SETTING
            - PHONE_REGISTRATION_FILTER_SETTING
            - SIMPLE_JSON_SETTING
            - value
            - settingClass
        isPublic:
          type: boolean
      x-stoplight:
        id: rfu5k5eltse99
    InvalidSetting:
      type: object
      properties:
        id:
          type: integer
          format: int64
        key:
          type: string
        area:
          type: string
          enum:
            - APP
            - DASHBOARD
            - CORE
            - SHARED
        branchIds:
          type: array
          items:
            type: integer
            format: int64
      x-stoplight:
        id: 2zoc9jke2qfkq
    SettingValidationResult:
      type: object
      properties:
        valid:
          type: boolean
        invalidSettings:
          type: array
          items:
            $ref: '#/components/schemas/InvalidSetting'
        timestamp:
          type: integer
          format: int64
      x-stoplight:
        id: mmam95p7vq0q4
    ChangeSetting:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
        settingValueType:
          type: string
          enum:
            - FEATURE_TOGGLE
            - RENTAL_REQUIREMENTS
            - PRICE_CALCULATION_GENERAL_SETTINGS
            - NOTIFICATION_CHANNEL_SETTINGS
            - SIMPLE_STRING_SETTING
            - REFERRAL_REQUIREMENTS
            - SIMPLE_INTEGER_SETTING
            - PLUGIN_TOGGLE_SETTING
            - RENTAL_RESERVATION_SETTINGS
            - FLOATING_BOOKING_SETTINGS
            - RENTAL_ENDED_NO_MOVEMENT_SETTINGS
            - END_USER_DATA_UPDATE_PERMISSION_SETTINGS
            - GENERAL_BOOKING_SETTINGS
            - STATION_REWARD_SETTINGS
            - VEHICLE_RADAR_SETTING
            - BILLING_SETTING
            - VEHICLE_MAINTENANCE_ACTIONS_SETTING
            - BRANCH_RESOLVER_SETTING
            - IPSTACK_SETTING
            - SCHEDULER_SETTING
            - TASK_SETTING
            - BALANCE_SETTING
            - PAYMENT_SETTING
            - SIMPLE_DOUBLE_SETTING
            - PAYMENT_SETTING_APAYA
            - PRE_END_RENTAL_ACTIONS_SETTING
            - MONEY_DEPOSIT_SETTING
            - SMS_CLIENT_SETTING
            - OPEN_TAILBOX_ON_RENTAL_START_SETTING
            - DEVICE_CLOUD_V2_SETTING
            - ISFU_SETTING
            - GBFS_SETTING
            - MDS_SETTING
            - VEHICLE_LABELS_SETTING
            - APPLY_VOUCHERABLE_TO_BALANCE
            - RATE_LIMITER_SETTING
            - ACCESS_LOGGING_SETTING
            - VERIFF_SETTING
            - STATION_SERVICE_SETTINGS
            - USER_LABELS_SETTING
            - MAAS_SETTING
            - RENTAL_DRIVING_MONITORING_SETTING
            - VEHICLE_OFFLINE_NOTIFICATION_SETTING
            - PHONE_REGISTRATION_FILTER_SETTING
            - SIMPLE_JSON_SETTING
        isPublic:
          type: boolean
        branchIds:
          type: array
          items:
            type: integer
            format: int64
        area:
          type: string
          enum:
            - APP
            - DASHBOARD
            - CORE
            - SHARED
      x-stoplight:
        id: 7uvxng3ecnuvx
    Radar:
      type: object
      properties:
        id:
          type: integer
          format: int64
        guser:
          $ref: '#/components/schemas/GUser'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        address:
          type: string
        position:
          $ref: '#/components/schemas/Point'
        radius:
          type: integer
          format: int32
        state:
          type: string
          enum:
            - CREATED
            - DELIVERED
            - CANCELED
            - EXPIRED
      x-stoplight:
        id: 4wsfyq107lxlc
    PaymentAttempt:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        state:
          type: string
          enum:
            - CREATED
            - WAITING
            - IN_PAYMENT
            - PAID
            - DISPUTED
            - UNSUCCESSFUL
            - EXCEPTION_PAYMENT
            - EXCEPTION_NOTIFICATION
            - PUSH_WAITING_FOR_USER
            - PUSH_CANCELLED_BY_USER
            - PUSH_BANK_REFUSED
            - REFUNDED
            - ALLOW_CHARGE
            - ALLOW_RETRY
        paymentId:
          type: integer
          format: int64
        sourceId:
          type: string
        chargeId:
          type: string
        refundId:
          type: string
        type:
          type: string
          enum:
            - SEPA
            - CC
            - UNKNOWN
            - IDEAL
            - SOFORT
            - BANCONTACT
            - APAYA
            - PAYPAL
            - APPLEPAY
            - GOOGLEPAY
            - isPrenotificationNeeded
            - allowsReservation
            - allowsAutomaticRetries
            - pushBased
            - allowsRefund
        error:
          type: string
        amount:
          $ref: '#/components/schemas/BigDecimal'
        waitUntil:
          type: string
          format: date-time
        disputedAt:
          type: string
          format: date-time
      x-stoplight:
        id: kkh1zuuyti4nw
    Payment:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        attempts:
          type: array
          items:
            $ref: '#/components/schemas/PaymentAttempt'
        guserId:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        amount:
          $ref: '#/components/schemas/BigDecimal'
        state:
          type: string
          enum:
            - OPEN
            - CLOSED
            - IN_PAYMENT
            - AWAITING_RETRY
            - PAID
            - FAILED
            - DISPUTED
            - COLLECTIONS
            - PUSH_WAITING_FOR_USER
            - PUSH_CANCELLED_BY_USER
            - PUSH_BANK_REFUSED
            - WEBHOOK_ALLOWED_STATES
            - PUSH_FINAL_STATE
        openUntil:
          type: string
          format: date-time
        retryWaitUntil:
          type: string
          format: date-time
      x-stoplight:
        id: w6sjza7xqes6y
    ChangeSource:
      type: object
      properties:
        sourceId:
          type: string
      x-stoplight:
        id: kz5bp3byb41cd
    Package:
      type: object
      properties:
        discount:
          $ref: '#/components/schemas/BigDecimal'
        discountedPrice:
          $ref: '#/components/schemas/BigDecimal'
        redeemLimitByUser:
          type: integer
          format: int32
        initialPackage:
          type: boolean
        validityTimeUnit:
          type: string
          enum:
            - NANOS
            - MICROS
            - MILLIS
            - SECONDS
            - MINUTES
            - HOURS
            - HALF_DAYS
            - DAYS
            - WEEKS
            - MONTHS
            - YEARS
            - DECADES
            - CENTURIES
            - MILLENNIA
            - ERAS
            - FOREVER
            - name
            - duration
        validityPeriod:
          type: integer
          format: int32
        id:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        value:
          $ref: '#/components/schemas/BigDecimal'
        code:
          type: string
        name:
          type: string
        description:
          type: string
        iconUrl:
          type: string
        state:
          type: string
          enum:
            - INACTIVE
            - ACTIVE
        maxRedeemLimit:
          type: integer
          format: int64
        redeemCount:
          type: integer
          format: int64
        signup:
          type: boolean
        showInUserApp:
          type: boolean
        applicableBranchIds:
          type: array
          items:
            type: integer
            format: int64
        applicableVehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
        price:
          $ref: '#/components/schemas/BigDecimal'
        invoiceDescription:
          type: string
        highlight:
          type: boolean
        currency:
          type: string
      x-stoplight:
        id: uwzuevj3ikrl6
    Subscription:
      type: object
      properties:
        interval:
          type: string
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
            - FIRST_OF_MONTH
            - YEARLY
            - FIRST_OF_YEAR
        rentalRebate:
          $ref: '#/components/schemas/BigDecimal'
        discount:
          $ref: '#/components/schemas/BigDecimal'
        numberOfRentals:
          type: integer
          format: int32
        initialPrice:
          $ref: '#/components/schemas/BigDecimal'
        initialIterations:
          type: integer
          format: int32
        id:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        value:
          $ref: '#/components/schemas/BigDecimal'
        code:
          type: string
        name:
          type: string
        description:
          type: string
        iconUrl:
          type: string
        state:
          type: string
          enum:
            - INACTIVE
            - ACTIVE
        maxRedeemLimit:
          type: integer
          format: int64
        redeemCount:
          type: integer
          format: int64
        signup:
          type: boolean
        showInUserApp:
          type: boolean
        applicableBranchIds:
          type: array
          items:
            type: integer
            format: int64
        applicableVehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
        price:
          $ref: '#/components/schemas/BigDecimal'
        invoiceDescription:
          type: string
        highlight:
          type: boolean
        currency:
          type: string
      x-stoplight:
        id: 59u9ogcf9uovu
    EventDetails:
      type: object
      description: Structured details stored with an event.
      properties:
        sourceId:
          type: string
        chargeId:
          type: string
        declinedCode:
          type: string
        chargeAmount:
          $ref: '#/components/schemas/BigDecimal'
        method:
          type: string
          enum:
            - CC
            - SEPA
            - PAYPAL
            - APPLEPAY
            - GOOGLEPAY
            - APPLE_OR_GOOGLE
        oldBranchId:
          type: integer
          format: int64
        newBranchId:
          type: integer
          format: int64
        failedEndRentalRequirements:
          type: array
          description: >-
            Translated rental-end requirement codes. Present only on
            RENTAL_END_CHECK events when at least one end-rental requirement
            was not met.
          items:
            $ref: '#/components/schemas/FailedRentalRequirement'
        smokeDetected:
          $ref: '#/components/schemas/SmokeDetected'
        smokeDataReady:
          $ref: '#/components/schemas/SmokeDataReady'
      x-stoplight:
        id: 47olhf5bubowm
    FailedRentalRequirement:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: The requirement code.
          example: R131
        message:
          type: string
          description: Human-readable translation of the requirement code.
          example: Vehicle must be parked inside the business area
    Event:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        time:
          type: string
          format: date-time
        position:
          $ref: '#/components/schemas/Point'
        type:
          type: string
          enum:
            - UNKNOWN
            - LOGIN
            - SIGNUP
            - LOGOUT
            - START
            - APP_LOGIN
            - APP_SIGNUP
            - APP_LOGOUT
            - APP_CLOSE
            - APP_MAP_NAVIGATION
            - APP_VEHICLE_SELECTION
            - APP_START
            - APP_INACTIVATE
            - APP_ACTIVATE
            - APP_BT_ACTION
            - APP_BT_ACTION_FAIL
            - APP_BT_LOCK
            - APP_BT_UNLOCK
            - RENTAL_RESERVATION
            - RENTAL_START
            - RENTAL_START_RFID
            - RENTAL_START_BLUETOOTH
            - RENTAL_END
            - RENTAL_END_RFID
            - RENTAL_END_RFID_IGNORED
            - RENTAL_END_BLUETOOTH
            - RENTAL_END_DOCKED
            - RENTAL_END_INACTIVE
            - RENTAL_END_USER_BALANCE_DEPLETED
            - RENTAL_END_CHECK
            - RENTAL_FEEDBACK
            - RENTAL_DRIVE
            - RENTAL_DRIVE_BLUETOOTH
            - RENTAL_PARK
            - RENTAL_PARK_BLUETOOTH
            - RENTAL_RENEW_RESERVATION
            - RENTAL_CANCEL_RESERVATION
            - RENTAL_OPEN_TAILBOX
            - RENTAL_LIST
            - RENTAL_DETAILS
            - RENTAL_BUY_RESERVATION
            - RENTAL_PRE_END_ACTIONS
            - RENTAL_OPERATION_FAILED
            - RENTAL_UPDATE
            - RENTAL_DEPOSIT_RELEASE
            - RENTAL_REQUIREMENTS_START_CHECK
            - RENTAL_REQUIREMENTS_END_CHECK
            - NOTIFICATION
            - VEHICLE_LOCATE
            - BOOKING_CREATED
            - BOOKING_UPDATED
            - BOOKING_CANCELED
            - BOOKING_CANCELED_PAYMENT_FAILURE
            - BOOKING_SUCCESSFUL
            - BOOKING_DETAILS
            - BOOKING_LIST
            - BOOKING_PICKUP
            - BOOKING_PICKUP_RFID
            - BOOKING_PICKUP_BLUETOOTH
            - BOOKING_TIMESLOT
            - BOOKING_DELIVERED
            - BOOKING_CHECKED_IN
            - BOOKING_APPROVAL
            - BOOKING_CATEGORY_CHANGED
            - GROUP_BOOKING_LIST
            - GROUP_BOOKING_CREATED
            - VEHICLE_MAINTENANCE_APPROACH
            - VEHICLE_MAINTENANCE_DEPLOY
            - VEHICLE_MAINTENANCE_CLOSE
            - BOOKING_AVAILABLE_CATEGORIES
            - BOOKING_AVAILABILITY
            - BOOKING_STATION_AVAILABILITY
            - BOOKING_ESTIMATE_EXTENSION
            - BOOKING_BOOKABLE_CATEGORIES
            - VEHICLE_COMMAND_START
            - VEHICLE_COMMAND_STOP
            - VEHICLE_COMMAND_LOCK
            - VEHICLE_COMMAND_UNLOCK
            - VEHICLE_COMMAND_LOCATE
            - VEHICLE_COMMAND_OPEN_SADDLE
            - VEHICLE_COMMAND_OPEN_TAILBOX
            - VEHICLE_COMMAND_LOCK_TAILBOX
            - VEHICLE_COMMAND_UNLOCK_TAILBOX
            - VEHICLE_COMMAND_ALARM_ON
            - VEHICLE_COMMAND_ALARM_OFF
            - VEHICLE_COMMAND_SET_MAX_SPEED
            - VEHICLE_COMMAND_CUSTOM_COMMAND
            - VEHICLE_COMMAND_UNLOCK_BIKE_LOCK
            - VEHICLE_COMMAND_UNLOCK_STATION_PORT
            - VEHICLE_COMMAND_UNKNOWN
            - VEHICLE_CHARGING_STARTED
            - VEHICLE_CHARGING_ENDED
            - VEHICLE_CHARGING_RESTRICTION_IGNORED
            - VEHICLE_UPDATE
            - VEHICLE_SERVICE_STATE_OPERATIONAL
            - VEHICLE_SERVICE_STATE_OUT_OF_ORDER
            - VEHICLE_TAGS_UPDATE
            - VEHICLE_SERVICE_STATE_RETIRED
            - VEHICLE_COMMAND_REBOOT
            - VEHICLE_SERVICE_STATE_LOW_SOC
            - VEHICLE_SERVICE_STATE_UNKNOWN
            - VEHICLE_FAULT_STATE_FAULT
            - VEHICLE_FAULT_STATE_ILLEGAL_MOVEMENT
            - VEHICLE_FAULT_STATE_FALLEN_OVER
            - VEHICLE_FAULT_STATE_MODULE_REMOVED
            - VEHICLE_FAULT_STATE_LIFTED_UP
            - VEHICLE_FAULT_STATE_UNKNOWN
            - VEHICLE_MAINTENANCE
            - VEHICLE_OFFLINE
            - VEHICLE_ONLINE
            - VEHICLE_OUT_OF_RENTAL_ACTIVITY
            - VEHICLE_LOST_SCANNED_BY_USER
            - VEHICLE_IOT_NOT_POWERED
            - VEHICLE_IOT_POWERED
            - VEHICLE_RFID_READER_NO_ACTION
            - VEHICLE_BLUETOOTH_UNRECOGNIZED_INTERACTION
            - VEHICLE_BLUETOOTH_INVALID_TOKEN_USAGE
            - VEHICLE_BLUETOOTH_UNAUTHORIZED_TOKEN_USAGE
            - VEHICLE_BLUETOOTH_ACTION_UNLOCK
            - VEHICLE_BLUETOOTH_ACTION_LOCK
            - VEHICLE_BLUETOOTH_ACTION_UNKNOWN
            - VEHICLE_BLUETOOTH_NO_ACTION_POSSIBLE
            - VEHICLE_SERVICE_STATE_V2_FUNCTIONAL
            - VEHICLE_SERVICE_STATE_V2_INSPECT
            - VEHICLE_SERVICE_STATE_V2_RELOCATE
            - VEHICLE_SERVICE_STATE_V2_COLLECT
            - VEHICLE_SERVICE_STATE_V2_SERVICE_ON_SITE
            - VEHICLE_SERVICE_STATE_V2_SERVICE_WORKSHOP
            - VEHICLE_SERVICE_STATE_V2_SERVICE_EXTERNAL
            - VEHICLE_SERVICE_STATE_V2_REPLACE
            - VEHICLE_SERVICE_STATE_V2_IMPOUNDED
            - VEHICLE_SERVICE_STATE_V2_LOST
            - VEHICLE_SERVICE_STATE_V2_RETIRED
            - VEHICLE_SERVICE_STATE_V2_READY_FOR_DEPLOYMENT
            - VEHICLE_SERVICE_STATE_V2_MAINTENANCE
            - VEHICLE_SERVICE_STATE_V2_OTHER
            - VEHICLE_SERVICE_STATE_V2_WAITING_FOR_PARTS
            - VEHICLE_SERVICE_STATE_V2_UNREPAIRABLE
            - VEHICLE_SERVICE_STATE_V2_DEFLEETED
            - VEHICLE_SERVICE_STATE_V2_OPERATIONAL_HOLD
            - VEHICLE_SERVICE_STATE_V2_AWAITING_ACTION
            - VEHICLE_SERVICE_STATE_V2_SERVICE_MECHANICS
            - VEHICLE_SERVICE_STATE_V2_REGULATORY_INSPECTION_READY
            - VEHICLE_SERVICE_STATE_V2_REGULATORY_INSPECTION
            - VEHICLE_SERVICE_STATE_V2_SERVICE_WORKSHOP_INSURANCE
            - VEHICLE_SERVICE_STATE_V2_SERVICE_WORKSHOP_QUEUE
            - VEHICLE_SERVICE_STATE_V2_READY_FOR_DEPLOYMENT_NEW
            - VEHICLE_SERVICE_STATE_V2_COLLECT_EXTERNAL
            - VEHICLE_BATTERY_LEVEL_UNKNOWN
            - VEHICLE_BATTERY_LEVEL_CRITICAL
            - VEHICLE_BATTERY_LEVEL_LOW
            - VEHICLE_BATTERY_LEVEL_MEDIUM
            - VEHICLE_BATTERY_LEVEL_HIGH
            - VEHICLE_BRANCH_CHANGED
            - USER_PASSWORD_RESET_EMAIL
            - USER_PASSWORD_CHANGED
            - USER_EMAIL_VERIFIED
            - USER_EMAIL_CHANGED
            - USER_LICENCE_VERIFICATION
            - USER_ID_DOCUMENT_VERIFICATION
            - USER_MANUAL_VERIFICATION
            - USER_CUSTOM_EXTERNAL_VERIFICATION
            - USER_PROFILE_DATA_CHANGED
            - USER_PAYMENT_METHOD_ADD
            - USER_PAYMENT_METHOD_CHANGED
            - USER_PAYMENT_METHOD_REMOVED
            - GENERATE_BLUETOOTH_TOKEN
            - BALANCE_SETTLEMENT_FAILED
            - BALANCE_SETTLEMENT_SUCCESSFUL
            - USER_PHONE_REGISTRATION_DENIED
            - USER_PHONE_REGISTRATION_DENIED_SILENT
            - USER_PHONE_REGISTRATION_NO_SMS_SENT
            - PARKING_RESERVATION_CREATED
            - PARKING_RESERVATION_REMOVED
            - PARKING_RESERVATION_CHANGED
        error:
          type: string
        errorMessage:
          type: string
        internalMessage:
          type: string
        balanceId:
          type: integer
          format: int64
        bookingId:
          type: integer
          format: int64
        rentalId:
          type: integer
          format: int64
        guser:
          $ref: '#/components/schemas/JsonGUser'
        adminGuser:
          $ref: '#/components/schemas/JsonGUser'
        vehicle:
          $ref: '#/components/schemas/JsonVehicle'
        details:
          $ref: '#/components/schemas/EventDetails'
        description:
          type: string
          description: A human-readable description of event
        requestInfo:
          type: object
          additionalProperties: true
          description: Additional request payload data stored with the event
      x-stoplight:
        id: 9tcfpx5ut31oq
    Geometry:
      type: object
      properties:
        envelope:
          $ref: '#/components/schemas/Envelope'
        factory:
          $ref: '#/components/schemas/GeometryFactory'
        SRID:
          type: integer
          format: int32
        userData:
          $ref: '#/components/schemas/Object'
      x-stoplight:
        id: u7ipj53n8ds3v
    TimePosition:
      type: object
      properties:
        time:
          type: string
          format: date-time
        pos:
          $ref: '#/components/schemas/Geometry'
        weight:
          type: number
          format: float
      x-stoplight:
        id: kn9wp338vcbnr
    TermsAndConditions:
      type: object
      properties:
        id:
          type: integer
          format: int64
        privacyGuidelinesUrl:
          type: string
        privacyGuidelinesText:
          type: string
        termsAndConditionsUrl:
          type: string
        termsAndConditionsText:
          type: string
        additionalTermsAndConditionsUrl:
          type: string
        additionalTermsAndConditionsText:
          type: string
        disclaimer:
          type: object
          properties:
            text:
              type: string
            url:
              type: string
            urlLabel:
              type: string
      x-stoplight:
        id: cchz45gb49h1y
    TermsAndConditionsCreate:
      type: object
      x-stoplight:
        id: 7gl9iuxbz6c8p
      properties:
        previousVersionId:
          type: integer
          format: int64
          description: (optional) ID of the previous version of these Terms and Conditions if this represents an update.
        privacyGuidelinesUrl:
          type: string
        privacyGuidelinesText:
          type: string
        termsAndConditionsUrl:
          type: string
        termsAndConditionsText:
          type: string
        additionalTermsAndConditionsUrl:
          type: string
        additionalTermsAndConditionsText:
          type: string
        disclaimer:
          type: object
          properties:
            text:
              type: string
            url:
              type: string
            urlLabel:
              type: string
    RentalAddition:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        createdBy:
          $ref: '#/components/schemas/GUser'
        updatedBy:
          $ref: '#/components/schemas/GUser'
        name:
          type: string
        code:
          type: string
        description:
          type: string
        pricingInformation:
          $ref: '#/components/schemas/PricingInformation'
        requiredAnnotationIds:
          type: array
          items:
            type: integer
            format: int64
        prohibitedAnnotationIds:
          type: array
          items:
            type: integer
            format: int64
        entitled:
          type: boolean
          description: Indicates whether the rental addition is entitled to the user
      x-stoplight:
        id: a1d9qdwudzqyv
    RentalAdditionCreation:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          description: Name of the rental addition.
        code:
          type: string
          description: Unique code of the rental addition. Is generated based on the name if missing.
        description:
          type: string
        pricingInformation:
          $ref: '#/components/schemas/PricingInformation'
    ConstraintVoucherable:
      type: object
      required:
        - type
      x-stoplight:
        id: bz6r9gjv59haf
      properties:
        validityTimeUnit:
          type: string
          enum:
            - NANOS
            - MICROS
            - MILLIS
            - SECONDS
            - MINUTES
            - HOURS
            - HALF_DAYS
            - DAYS
            - WEEKS
            - MONTHS
            - YEARS
            - DECADES
            - CENTURIES
            - MILLENNIA
            - ERAS
            - FOREVER
            - name
            - duration
        validityPeriod:
          type: integer
          format: int32
        validityDateUntil:
          type: string
          format: date-time
        rentalRebate:
          $ref: '#/components/schemas/BigDecimal'
        discount:
          $ref: '#/components/schemas/BigDecimal'
        additionEntitlementId:
          type: integer
          format: int64
          description: 'ID of the rental addition benefit. Mutually exclusive with discount, value, and rentalRebate.'
        additionEntitlementCode:
          type: string
          description: 'Code of the rental addition benefit (read-only).'
        numberOfRentals:
          type: integer
          format: int32
        guserRequiredAnnotationIds:
          type: array
          items:
            type: integer
            format: int64
        guserProhibitedAnnotationIds:
          type: array
          items:
            type: integer
            format: int64
        type:
          type: string
          enum:
            - Promotion
            - GeoFencePromotion
            - Package
            - Subscription
            - Reward
            - SignupReferral
            - Triggered
            - CustomerCare
            - VehiclePromotion
            - GeoFenceSurcharge
            - RidePass
            - PricedPromotion
        id:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        value:
          $ref: '#/components/schemas/BigDecimal'
        code:
          type: string
        name:
          type: string
        rawName:
          type: string
          description: 'Raw, untranslated name. In most cases this is an translation key.'
        description:
          type: string
        rawDescription:
          type: string
          description: 'Raw, untranslated description. In most cases this is an translation key.'
        iconUrl:
          type: string
        state:
          type: string
          enum:
            - INACTIVE
            - ACTIVE
        maxRedeemLimit:
          type: integer
          format: int64
        redeemCount:
          type: integer
          format: int64
        signup:
          type: boolean
        showInUserApp:
          type: boolean
        applicableBranchIds:
          type: array
          items:
            type: integer
            format: int64
        applicableVehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
        customProperties:
          type: string
        applicableRentalType:
          type: string
          enum:
            - START_RENTAL
            - END_RENTAL
            - START_PLUS_END_RENTAL
            - START_OR_END_RENTAL
            - START_AND_END_RENTAL
          description: |-
            `START_RENTAL` - apply surcharge on rentals starting in the geofence.\
            `END_RENTAL` - apply surcharge on rentals ending in the geofence.\
            `START_PLUS_END_RENTAL` - apply surcharge on starting a rental and ending a rental in the geofence (surcharge gets applied twice).\
            `START_OR_END_RENTAL` - apply surcharge on rentals that are started or ended in the geofence.\
            `START_AND_END_RENTAL` - apply surcharge on rentals that are started and ended in the geofence.
        monetary:
          type: boolean
          description: Defines if value field is meant to be applied as money or as unit such as minutes.
        costSources:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: A mapping between `CostSourceType` and a list of strings representing applicable cost sources.
        benefits:
          type: array
          items:
            $ref: '#/components/schemas/Benefit'
          description: >-
            List of benefits for this voucherable. When present, legacy fields
            (value, discount, rentalRebate, additionEntitlementId) are ignored
            for voucher creation. Benefit fields left empty (applicablePriceType,
            costSources, validity, numberOfRentals, applicableBranchIds,
            applicableVehicleCategoryIds) are automatically inherited from the
            parent voucherable.
      title: Generic Constraint Voucherable
    SurchargeVoucherable:
      type: object
      description: model description
      title: Surcharge Voucherable
      examples:
        - type: GeoFenceSurcharge
          branchId: 1
          value: 1.32
          code: Surcharge Test 1
          description: Additional costs arise if you end your rental in the designated area.
          geoFence:
            type: MultiPolygon
            coordinates:
              - - - - 16.4014
                    - 48.18788
                  - - 16.40457
                    - 48.18584
                  - - 16.40746
                    - 48.18813
                  - - 16.40423
                    - 48.18988
                  - - 16.4014
                    - 48.18788
          applicableRentalType: END_RENTAL
          showInUserApp: true
          recurrenceStartTime: '14:00:00'
          durationInMinutes: 120
          weekdays:
            - MONDAY
            - TUESDAY
            - FRIDAY
      x-internal: true
      properties:
        id:
          type: integer
          x-stoplight:
            id: gu9815pl7xz23
          readOnly: true
        type:
          type: string
          description: 'The type of voucherable, needs to be set to `GeofenceSurcharge`'
          example: GeofenceSurcharge
        branchId:
          type: integer
          description: On which business unit this surcharge is created.
          example: 2
        state:
          type: string
          x-stoplight:
            id: wrtkzomdiwtme
          enum:
            - ACTIVE
            - INACTIVE
          example: ACTIVE
          default: INACTIVE
          description: If the voucherable should be applied to rentals or not.
        value:
          type: number
          description: How much more expensive does the rental get if the surcharge gets applied.
          example: 12.5
        code:
          type: string
          description: Unique identifier for this voucherable.
          example: SURCHA_1
        description:
          type: string
          description: Descrption of the surcharge.
          example: Additional costs arise if you end your rental here.
        startTime:
          type: string
          description: Timestamp from which the surcharge will be applied.
        endTime:
          type: string
          description: Timestamp after which the surcharge will not be applied anymore.
        geoFence:
          type: object
          description: A MultiPolygon geofence outlining the area on which this surcharge should be applied.
          properties:
            type:
              type: string
              example: MultiPolygon
            coordinates:
              type: array
              items:
                type: array
                items:
                  x-stoplight:
                    id: vql7ubtxzvltc
                  type: array
                  items:
                    x-stoplight:
                      id: 2den8xca2l00m
                    type: array
                    items:
                      x-stoplight:
                        id: xvudwqln9sgt1
                      type: number
                      example: 16.4014
        showInUserApp:
          type: boolean
          description: Should information about this voucherable be delivered to endusers.
        recurrenceStartTime:
          type: string
          description: At what local time of day is this surcharge active. (Only applied if `weekdays` is configured)
        durationInMinutes:
          type: integer
          description: How long after the `recurrenceStartTime` is the surcharge active.
        weekdays:
          type: array
          description: On which weekedays should this recurrence be applied to rentals.
          items:
            type: string
            enum:
              - MONDAY
              - TUESDAY
              - WEDNESDAY
              - THURSDAY
              - FRIDAY
              - SATURDAY
              - SUNDAY
        applicableRentalType:
          type: string
          x-stoplight:
            id: lu3zwxpp76cog
          enum:
            - END_RENTAL
          description: Only END_RENTAL is allowed for surcharges.
          example: END_RENTAL
        applicableBranchIds:
          type: array
          x-stoplight:
            id: 8zid6z7mnd30h
          description: Surcharge will only be applied to rentals on the provided location branches.
          items:
            x-stoplight:
              id: guoskhjnehrjn
            type: integer
        applicableVehicleCategoryIds:
          type: array
          x-stoplight:
            id: u03vsr3cwf5ho
          description: Surcharge will only be applied to rentals using a vehicle of one of the provided categories.
          items:
            x-stoplight:
              id: rhhu8c1ae05xc
            type: integer
      required:
        - type
        - branchId
        - value
        - geoFence
        - applicableRentalType
    NotificationRequest:
      type: object
      properties:
        recipientId:
          type: integer
          format: int64
        notificationChannelType:
          type: string
          enum:
            - SMS
            - EMAIL
            - PUSH
            - SLACK
        content:
          type: string
        title:
          type: string
        platform:
          type: string
          enum:
            - APP
            - DASHBOARD
      x-stoplight:
        id: zp87ptc0032sb
    NotificationResponse:
      type: object
      properties:
        messageId:
          type: integer
          format: int64
        senderId:
          type: integer
          format: int64
        sentAt:
          type: string
          format: date-time
      x-stoplight:
        id: p8fpgab1jg8lz
    BulkRentalAuthorityUpdate:
      type: object
      properties:
        branchId:
          type: integer
          format: int64
        addUsers:
          type: array
          items:
            type: integer
            format: int64
        removeUsers:
          type: array
          items:
            type: integer
            format: int64
      x-stoplight:
        id: bm1337m0t68r1
    Module:
      type: object
      properties:
        id:
          type: integer
          format: int64
        externalId:
          type: string
        secondaryExternalId:
          type: string
        name:
          type: string
        iccid:
          type: string
        macAddress:
          type: string
        state:
          type: string
          enum:
            - UNASSIGNED
            - ASSIGNED
            - RETIRED
            - NOT_READY
            - NEW
        type:
          type: string
          enum:
            - DUMMY
            - TRACKER
            - DEVICE_CLOUD
            - JAVA_DEVICE_CLOUD
        lastOnlineAt:
          type: string
          format: date-time
        branchId:
          type: integer
          format: int64
    CreateModule:
      type: object
      properties:
        externalId:
          description: 'external identifier of the module, for example an IMEI number.'
          type: string
        name:
          type: string
        iccid:
          type: string
        macAddress:
          type: string
        type:
          type: string
          enum:
            - DUMMY
            - TRACKER
            - DEVICE_CLOUD
            - JAVA_DEVICE_CLOUD
        branchId:
          type: integer
          format: int64
        deviceCloudVersion:
          description: defines which device cloud version will be used to connect the vehicle. If not set will be inferred by the type property.
          type: string
          enum:
            - V2
            - V3
        integrationType:
          description: DeviceCloud specific integration type. Please check the documentation of supported integration types.
          type: string
        properties:
          description: |
            Properties of this module that are required for it's proper configuration. These are specific to the integration type and the device cloud version.
            Please check the documentation for required and optional properties for every integration type and device cloud version.
          type: object
          additionalProperties:
            type: string
    ModuleRetirement:
      type: object
      properties:
        id:
          type: integer
          format: int64
        module:
          $ref: '#/components/schemas/JsonModule'
        reason:
          type: string
          enum:
            - DAMAGE
            - LOST
            - OTHER
        note:
          type: string
        image:
          type: string
        createdById:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
      x-stoplight:
        id: 59ekak5oaamjp
    UpdateModule:
      type: object
      properties:
        name:
          type: string
        iccid:
          type: string
        macAddress:
          type: string
        type:
          type: string
          enum:
            - NIU
            - NIU_MC
            - DUMMY
            - NIU_PRTCL
            - NINEBOT_ES2
            - CUCA_BIKE
            - TRACKER
            - COMODULE_NINEBOT_ES2
            - GOVECS_GOT
            - NINEBOT_ES2_TLT
            - MANUAL_KICKSCOOTER
            - MANUAL_BICYCLE
            - NIU_TLT
            - SUPER_SOCO_TLT_125
            - CAR_TLT
            - SEGWAY_V1
            - NIU_V2
            - CAR_TLT_RELAIS
            - LANNMARKER_ZIMO
            - INVERS_CAR
            - DEVICE_CLOUD
            - NIU_V2_READ
            - DEPRECATED
        branchId:
          type: integer
          format: int64
        state:
          type: string
          enum:
            - UNASSIGNED
            - ASSIGNED
            - RETIRED
            - NOT_READY
            - NEW
      x-stoplight:
        id: v9va389j24m7j
    RetireModule:
      type: object
      properties:
        reason:
          type: string
          enum:
            - DAMAGE
            - LOST
            - OTHER
        note:
          type: string
        image:
          type: string
      x-stoplight:
        id: sygyn9ifmpqpq
    BookingData:
      type: object
      properties:
        kilometers:
          type: number
          format: double
        bookedTime:
          $ref: '#/components/schemas/Duration'
        overtime:
          $ref: '#/components/schemas/Duration'
        cancellationFeeTime:
          $ref: '#/components/schemas/Duration'
      x-stoplight:
        id: oetzmfnj7upmi
    RentalPriceResponse:
      type: object
      properties:
        priceForDrivingNet:
          $ref: '#/components/schemas/BigDecimal'
        priceForParkingNet:
          $ref: '#/components/schemas/BigDecimal'
        priceForReservationNet:
          $ref: '#/components/schemas/BigDecimal'
        nonRebatablePriceNet:
          $ref: '#/components/schemas/BigDecimal'
        priceForDrivingGross:
          $ref: '#/components/schemas/BigDecimal'
        priceForParkingGross:
          $ref: '#/components/schemas/BigDecimal'
        priceForReservationGross:
          $ref: '#/components/schemas/BigDecimal'
        nonRebatablePriceGross:
          $ref: '#/components/schemas/BigDecimal'
        rebateNet:
          $ref: '#/components/schemas/BigDecimal'
        rebateGross:
          $ref: '#/components/schemas/BigDecimal'
        surchargeNet:
          $ref: '#/components/schemas/BigDecimal'
        surchargeGross:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: 07vov2wwefuw2
    PricingBundlePrice:
      bookingPriceGross:
        type: number
        format: double
      totalPriceGross:
        type: number
        format: double
      additionsPriceGross:
        type: object
        additionalProperties:
          type: number
          format: double
    PriceV3Dto:
      type: object
      x-stoplight:
        id: 01qov2voefuw6
      properties:
        rebates:
          type: object
          properties:
            '{rebateIdentifier}':
              type: object
              x-stoplight:
                id: u2oofcufm0wwq
              properties:
                '{PriceType}':
                  additionalProperties:
                    $ref: '#/components/schemas/PriceCategoryType'
                  type: number
                  format: double
                  x-stoplight:
                    id: 0lgeowfcehctd
        rebatesTotal:
          type: object
          properties:
            '{rebateIdentifier}':
              type: number
              format: double
              x-stoplight:
                id: m1srqitvd40k5
        additions:
          type: object
          properties:
            '{additionIdentifier}':
              type: object
              x-stoplight:
                id: tOqYxe9NxqRzO
              properties:
                '{PriceType}':
                  additionalProperties:
                    $ref: '#/components/schemas/PriceCategoryType'
                  type: number
                  format: double
                  x-stoplight:
                    id: 5aNIEYnK2Pfic
        additionsTotal:
          type: object
          properties:
            '{additionIdentifier}':
              type: number
              format: double
              x-stoplight:
                id: 9kIEM1o8YVgFv
        surcharges:
          type: object
          properties:
            '{surchargeIdentifier}':
              type: object
              x-stoplight:
                id: h6s6gh8dzmCJR
              properties:
                '{PriceType}':
                  additionalProperties:
                    $ref: '#/components/schemas/PriceCategoryType'
                  type: number
                  format: double
                  x-stoplight:
                    id: po90QaUMKlksp
        surchargesTotal:
          type: object
          properties:
            '{surchargeIdentifier}':
              type: number
              format: double
              x-stoplight:
                id: 08Q80GIyYq5qn
        penalties:
          type: object
          properties:
            '{penaltyIdentifier}':
              type: object
              x-stoplight:
                id: wAd81TYfcQ7BU
              properties:
                '{PriceType}':
                  additionalProperties:
                    $ref: '#/components/schemas/PriceCategoryType'
                  type: number
                  format: double
                  x-stoplight:
                    id: R66y9Uq3Rg9Zg
        penaltiesTotal:
          type: object
          properties:
            '{penaltyIdentifier}':
              type: number
              format: double
              x-stoplight:
                id: i8fEFRe33Tf01
        price:
          type: object
          properties:
            '{PriceType}':
              additionalProperties:
                $ref: '#/components/schemas/PriceCategoryType'
              type: number
              format: double
        taxPercentage:
          type: number
          format: double
        scale:
          type: integer
          format: int32
        currency:
          type: string
        totalGross:
          type: number
          format: double
        totalNet:
          type: number
          format: double
        tax:
          type: number
          format: double
    PaidReservation:
      type: object
      properties:
        intervalDuration:
          $ref: '#/components/schemas/Duration'
        intervalsPurchased:
          type: integer
          format: int32
      x-stoplight:
        id: z7n5w472ejy1v
    DrivingOrParking:
      type: object
      properties:
        duration:
          $ref: '#/components/schemas/Duration'
        state:
          type: string
          enum:
            - DRIVING
            - PARKING
            - RESERVATION_FREE
            - RESERVATION_PAID
            - RESERVATION
        kilometers:
          type: number
          format: double
      x-stoplight:
        id: 5z5gctud1r0eo
    FreeFloatingData:
      type: object
      properties:
        reservation:
          type: array
          items:
            $ref: '#/components/schemas/PaidReservation'
        drivingOrParking:
          type: array
          items:
            $ref: '#/components/schemas/DrivingOrParking'
      x-stoplight:
        id: im1tj5n758lgj
    RevenueCenter:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        createdById:
          type: integer
          format: int64
        updatedById:
          type: integer
          format: int64
        code:
          type: string
        name:
          type: string
        timeZoneId:
          $ref: '#/components/schemas/ZoneId'
        contactInfo:
          $ref: '#/components/schemas/BranchContactInfo'
        uiSettings:
          $ref: '#/components/schemas/BranchUserInterfaceSettings'
        referrerVoucherableId:
          type: integer
          format: int64
        refereeVoucherableId:
          type: integer
          format: int64
        signupVoucherableId:
          type: integer
          format: int64
        scale:
          type: integer
          format: int32
        taxPercentage:
          $ref: '#/components/schemas/BigDecimal'
        currency:
          type: string
        termsAndConditionsId:
          type: integer
          format: int64
        merchantAccountOverride:
          type: string
        sepaHandlingFeeNet:
          $ref: '#/components/schemas/BigDecimal'
        reserveAmountOnCc:
          $ref: '#/components/schemas/BigDecimal'
        appProperties:
          type: string
        dashboardProperties:
          type: string
        paymentProperties:
          type: string
        description:
          type: string
      x-stoplight:
        id: 8kpc5be7mv952
    RecurringTask:
      type: object
      properties:
        parentId:
          type: integer
          format: int64
        taskData:
          $ref: '#/components/schemas/TaskData'
        taskObject:
          $ref: '#/components/schemas/TaskObject'
        recurrenceData:
          $ref: '#/components/schemas/RecurrenceData'
        tasks:
          type: array
          items:
            $ref: '#/components/schemas/Task'
        taskIds:
          type: array
          items:
            type: integer
            format: int64
      x-stoplight:
        id: pu591epn7zq87
    OneSignalSubscription:
      type: object
      properties:
        id:
          type: integer
          format: int64
        deviceId:
          type: string
        guserId:
          type: integer
          format: int64
        subscriptionType:
          type: string
          enum:
            - PUSH
            - EMAIL
        lastConnectedAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      x-stoplight:
        id: laqjj60vopt1b
    ServiceWorker:
      type: object
      properties:
        id:
          type: integer
          format: int64
        firstName:
          type: string
        lastName:
          type: string
        phone:
          type: string
        email:
          type: string
        latestActivityAt:
          type: string
          format: date-time
        blockState:
          type: string
          enum:
            - NOT_BLOCKED
            - BLOCKED_UNKNOWN
            - BLOCKED_BY_ADMIN
            - BLOCKED_BY_ADMINDELETE
            - GROUP_DELETED
        authId:
          type: string
      x-stoplight:
        id: c3at02pqe36dt
    JsonGroup:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        email:
          type: string
        phone:
          type: string
      x-stoplight:
        id: divuevl1byuyz
    JsonRentalRating:
      type: object
      properties:
        value:
          type: integer
          format: int32
          description: Rating given by the customer (usually from 1 to 5 stars)
        description:
          type: string
          description: Additional feedback given by the customer
    JsonRental:
      type: object
      properties:
        id:
          type: integer
          format: int64
        state:
          type: string
          enum:
            - RESERVATION
            - ACTIVE
            - EXPIRED
            - ENDED
            - CANCELLED
            - ENDED_NO_MOVEMENT
            - STILL_ACTIVE
            - FEEDBACK_ALLOWED
            - ENDED_STATES
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        startAddress:
          type: string
        startKilometers:
          $ref: '#/components/schemas/BigDecimal'
        endKilometers:
          $ref: '#/components/schemas/BigDecimal'
        distance:
          $ref: '#/components/schemas/BigDecimal'
        vehicle:
          $ref: '#/components/schemas/JsonVehicle'
        price:
          $ref: '#/components/schemas/JsonPrice'
        rating:
          $ref: '#/components/schemas/JsonRentalRating'
        rideMode:
          $ref: '#/components/schemas/RentalRideMode'
      x-stoplight:
        id: 3mudbo28mv5qi
    BookingListDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        state:
          type: string
          enum:
            - BOOKED
            - APPROVED
            - DELIVERED
            - SUCCESSFUL
            - CANCELED
            - ABORTED
            - EXPIRED
            - DECLINED
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        startStationCooldown:
          $ref: '#/components/schemas/Duration'
        endStationCooldown:
          $ref: '#/components/schemas/Duration'
        vehicleCategoryId:
          type: integer
          format: int64
        type:
          type: string
          enum:
            - STATION
            - FLOATING
        rentalType:
          $ref: '#/components/schemas/RentalType'
        guser:
          $ref: '#/components/schemas/JsonGUser'
        group:
          $ref: '#/components/schemas/JsonGroup'
        branch:
          $ref: '#/components/schemas/JsonBranch'
        endBranch:
          $ref: '#/components/schemas/JsonBranch'
        rental:
          $ref: '#/components/schemas/JsonRental'
        vehicle:
          $ref: '#/components/schemas/JsonVehicle'
        plannedVehicle:
          $ref: '#/components/schemas/JsonVehicle'
        price:
          $ref: '#/components/schemas/BookingPrice'
        annotations:
          description: List of annotations associated with the booking
          type: array
          items:
            $ref: '#/components/schemas/JsonAnnotation'
      x-stoplight:
        id: ym3jp35qumrbw
    BookingPrice:
      type: object
      properties:
        currency:
          type: string
        estimated:
          type: boolean
          description: indicates if the prices is an estimation or the final price
        netPrice:
          $ref: '#/components/schemas/BigDecimal'
        grossPrice:
          $ref: '#/components/schemas/BigDecimal'
    AddBookingByAdmin:
      type: object
      properties:
        guserId:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        endBranchId:
          type: integer
          format: int64
        vehicleCategoryId:
          type: integer
          format: int64
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        state:
          type: string
          enum:
            - BOOKED
            - APPROVED
            - DELIVERED
            - SUCCESSFUL
            - CANCELED
            - ABORTED
            - EXPIRED
            - DECLINED
        startPosition:
          $ref: '#/components/schemas/Point'
        startPositionRadius:
          type: number
          format: double
        userGroupCode:
          type: string
          deprecated: true
          description: 'The code of the user group for the booking. Deprecated, use ''userGroupId'' instead.'
        userGroupId:
          type: integer
          format: int64
          description: The id of the user group for the booking
        vehicleId:
          type: integer
          format: int64
          description: The id of the vehicle for the booking. If provided the resulting booking will be in state 'DELIVERED'.
        rentalType:
          $ref: '#/components/schemas/RentalType'
        reason:
          type: string
        externalReference:
          type: string
        additions:
          type: array
          items:
            type: string
        notes:
          type: array
          items:
            $ref: '#/components/schemas/BookingNoteCreate'
        costCenterId:
          type: integer
          format: int64
          description: The id of cost center to use. The booking needs to be a booking for a user group and the cost center must be assigned to that group.
      x-stoplight:
        id: mw94yi89gh8c1
    BookingNoteCreate:
      type: object
      properties:
        title:
          type: string
          description: The title of the booking note.
        content:
          type: string
          description: The content of the booking note.
    BookingNote:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: The unique identifier of the booking note.
        title:
          type: string
          description: The title of the booking note.
        content:
          type: string
          description: The content of the booking note.
        state:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
          description: The state of the booking note.
    Booking:
      type: object
      properties:
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        id:
          type: integer
          format: int64
        guserId:
          type: integer
          format: int64
        guser:
          $ref: '#/components/schemas/GUser'
        createdBy:
          $ref: '#/components/schemas/JsonGUser'
        updatedBy:
          $ref: '#/components/schemas/JsonGUser'
        rentalId:
          type: integer
          format: int64
        rental:
          $ref: '#/components/schemas/Rental'
        branch:
          $ref: '#/components/schemas/Branch'
        branchId:
          type: integer
          format: int64
        branchName:
          type: string
        endBranch:
          $ref: '#/components/schemas/Branch'
        endBranchId:
          type: integer
          format: int64
        endBranchName:
          type: string
        startStationCooldown:
          $ref: '#/components/schemas/Duration'
        endStationCooldown:
          $ref: '#/components/schemas/Duration'
        vehicleId:
          type: integer
          format: int64
        vehicle:
          $ref: '#/components/schemas/JsonVehicle'
        vehicleCategoryId:
          type: integer
          format: int64
        pricingBundleId:
          type: integer
          format: int64
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        state:
          type: string
          enum:
            - BOOKED
            - APPROVED
            - DELIVERED
            - SUCCESSFUL
            - CANCELED
            - ABORTED
            - EXPIRED
            - DECLINED
        type:
          type: string
          enum:
            - STATION
            - FLOATING
        invoice:
          $ref: '#/components/schemas/Invoice'
        costs:
          $ref: '#/components/schemas/BigDecimal'
        startPosition:
          $ref: '#/components/schemas/Point'
        startPositionRadius:
          type: number
          format: double
        estimatedPrice:
          $ref: '#/components/schemas/Price'
        userGroup:
          $ref: '#/components/schemas/UserGroup'
        userGroupCode:
          type: string
        rentalType:
          $ref: '#/components/schemas/RentalType'
        reason:
          type: string
        rejectionReason:
          type: string
        externalReference:
          type: string
        applicableVouchers:
          type: array
          items:
            $ref: '#/components/schemas/ConstraintVoucher'
        additions:
          type: array
          items:
            type: string
        annotations:
          description: System-managed tags associated with the booking. These annotations are automatically managed by the system and cannot be modified manually.
          type: array
          items:
            $ref: '#/components/schemas/Annotation'
          readOnly: true
        linkedBookingId:
          type: integer
          format: int64
        notes:
          type: array
          items:
            $ref: '#/components/schemas/BookingNote'
        cancellationInformation:
          type: object
          properties:
            canCancel:
              type: boolean
              description: Indicates if the booking can still be cancelled
            freeUntil:
              type: string
              format: date-time
              description: Indicates until which timestamp the booking can be cancelled without a fee
            estimatedFee:
              type: number
              format: double
              description: |-
                Provides an estimation of the cancellation fee at the time of the API response.

                Note that the actual fee could be higher on cancellation and can only be determined during cancellation.
        pricingBundleVersion:
          $ref: '#/components/schemas/PricingBundleVersionEmbedded'
      x-stoplight:
        id: v61gxlmk3y8b3
    BookingUpdate:
      type: object
      properties:
        guserId:
          type: integer
          format: int64
        rentalId:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        endBranchId:
          type: integer
          format: int64
        startStationCooldown:
          $ref: '#/components/schemas/Duration'
        endStationCooldown:
          $ref: '#/components/schemas/Duration'
        vehicleId:
          type: integer
          format: int64
        vehicleCategoryId:
          type: integer
          format: int64
          description: Updating the vehicle category will reset all additions previously assigned
        pricingBundleId:
          type: integer
          format: int64
          description: |-
            Update the pricing of a booking to a pricing other than the default pricing bundle.
            If the pricingBundleId is not provided, the existing configuration will be reset
            and the default pricing bundle or pricing strategy will be used.
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        state:
          type: string
          enum:
            - BOOKED
            - APPROVED
            - DELIVERED
            - SUCCESSFUL
            - CANCELED
            - ABORTED
            - EXPIRED
            - DECLINED
        type:
          type: string
          enum:
            - STATION
            - FLOATING
        startPosition:
          $ref: '#/components/schemas/Point'
        startPositionRadius:
          type: number
          format: double
        reason:
          type: string
          description: The reason for the business booking
        externalReference:
          type: string
        additions:
          type: array
          items:
            type: string
        notes:
          type: array
          items:
            $ref: '#/components/schemas/BookingNote'
        costCenterId:
          type: integer
          format: int64
          description: The id of cost center to use. The booking needs to be a booking for a user group and the cost center must be assigned to that group.
    BookingCancellation:
      type: object
      properties:
        waiveCancellationFee:
          type: boolean
          description: Indicates whether the cancellation fee is waived.
          default: false
        reason:
          type: string
          description: The reason for the cancellation.
    TimeSlot:
      type: object
      properties:
        startTime:
          type: string
          format: partial-time
        endTime:
          type: string
          format: partial-time
      x-stoplight:
        id: plalj1y7bc497
    BookingAvailabilityDay:
      type: object
      properties:
        date:
          type: string
          format: date
        availableState:
          type: string
          enum:
            - AVAILABLE
            - UNAVAILABLE
            - PARTIALLY_AVAILABLE
        availableSlots:
          type: array
          items:
            $ref: '#/components/schemas/TimeSlot'
      x-stoplight:
        id: mzh40nogzjrj8
    BookingUtilizationPerBranchResult:
      type: object
      properties: { }
      x-stoplight:
        id: 4jkcefjyljfpt
    UpdateBookingState:
      type: object
      properties:
        state:
          type: string
          enum:
            - BOOKED
            - APPROVED
            - DELIVERED
            - SUCCESSFUL
            - CANCELED
            - ABORTED
            - EXPIRED
            - DECLINED
        rejectionReason:
          type: string
      x-stoplight:
        id: 8ceen9qaaq7mo
    BookingTimeValidationResult:
      type: object
      required:
        - isTimeValid
        - willCauseConflict
        - validations
      properties:
        isTimeValid:
          type: boolean
          description: Indicator whether the booking time is valid.
        willCauseConflict:
          type: boolean
          description: Indicator whether a booking in that time frame will cause a conflict.
        validations:
          type: array
          items:
            $ref: '#/components/schemas/BookingTimeValidationErrors'
          description: List of validation errors. Empty if 'isTimeValid' is false.
    BookingTimeValidationErrors:
      type: object
      required:
        - errorCode
        - errorMessage
      properties:
        errorCode:
          type: string
          description: The error code of validation.
        errorMessage:
          type: string
          description: The detail message of validation error in the user's language.
        mandatory:
          type: boolean
          description: 'if the validation error is mandatory (i.e, needs to be fixed) or if it can be overridden by the operator'
    BookingAvailabilityValidationRequest:
      type: object
      required:
        - start
        - end
        - branchId
        - vehicleCategoryId
      properties:
        start:
          type: string
          format: date-time
          description: The start of potential booking period.
        end:
          type: string
          format: date-time
          description: The end of potential booking period.
        branchId:
          type: integer
          format: int64
          description: The ID of the branch for the potential booking.
        vehicleCategoryId:
          type: integer
          format: int64
          description: The ID of the vehicle category for the potential booking.
        vehicleId:
          type: integer
          format: int64
          description: The ID of the vehicle for the potential booking.
        bookingId:
          type: integer
          format: int64
          description: Do not consider a booking with the given ID in the checks. Useful when updating a booking to set `excludedBookingId` to the booking that is being updated.
        excludedBookingId:
          type: integer
          format: int64
          deprecated: true
          description: deprecated alias for 'bookingId'
        type:
          $ref: '#/components/schemas/RentalType'
    BalanceSettleResult:
      type: object
      properties:
        success:
          type: boolean
        balanceId:
          type: integer
          format: int64
        error:
          type: string
        value:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: gdt8wty6qq5q7
    BulkBalanceSettleResult:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/BalanceSettleResult'
        totalChargedValue:
          $ref: '#/components/schemas/BigDecimal'
        successCount:
          type: integer
          format: int32
      x-stoplight:
        id: dsyn2ahfpciez
    StationListDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        name:
          type: string
        type:
          type: string
          enum:
            - VIRTUAL
            - DOCKING
            - RECOMMENDED
            - PROMOTION
            - value
            - log
        capacity:
          type: integer
          format: int32
        position:
          $ref: '#/components/schemas/Point'
        area:
          $ref: '#/components/schemas/MultiPolygon'
        visibility:
          type: string
          enum:
            - ENDUSER_APP
            - SERVICE_APP
            - value
        state:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - value
            - log
        branchId:
          type: integer
          format: int64
        validUntil:
          type: string
          format: date-time
        availableVehicles:
          type: integer
          format: int64
        allVehicles:
          type: integer
          format: int64
      x-stoplight:
        id: ygrjn2pbybpp5
    Station:
      type: object
      properties:
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        createdBy:
          $ref: '#/components/schemas/JsonGUser'
        updatedBy:
          $ref: '#/components/schemas/JsonGUser'
        name:
          type: string
        type:
          type: string
          enum:
            - VIRTUAL
            - DOCKING
            - RECOMMENDED
            - PROMOTION
            - value
            - log
        capacity:
          type: integer
          format: int32
        position:
          $ref: '#/components/schemas/Point'
        radius:
          type: integer
          format: int32
        area:
          $ref: '#/components/schemas/MultiPolygon'
        visibility:
          type: string
          enum:
            - ENDUSER_APP
            - SERVICE_APP
            - value
        state:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - value
            - log
        validUntil:
          type: string
          format: date-time
        branchId:
          type: integer
          format: int64
        reward:
          $ref: '#/components/schemas/Reward'
      x-stoplight:
        id: 0vi5fv7nwnxyi
    VehicleStats:
      type: object
      properties: { }
      x-stoplight:
        id: 2xr9pqa3bncbb
    StationDetails:
      type: object
      properties:
        availableVehicles:
          type: integer
          format: int64
        allVehicles:
          type: integer
          format: int64
        stats:
          $ref: '#/components/schemas/VehicleStats'
        serviceStateCountPerSquareKilometer:
          type: string
          enum:
            - OPERATIONAL
            - LOW_SOC
            - OUT_OF_ORDER
            - RETIRED
            - CRITICAL_SOC
            - IN_SERVICE
            - TIMESTAMP_UPDATE_STATE
            - VALID_STATE_FOR_RENTAL
        id:
          type: integer
          format: int64
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        createdBy:
          $ref: '#/components/schemas/JsonGUser'
        updatedBy:
          $ref: '#/components/schemas/JsonGUser'
        name:
          type: string
        type:
          type: string
          enum:
            - VIRTUAL
            - DOCKING
            - RECOMMENDED
            - PROMOTION
            - value
            - log
        capacity:
          type: integer
          format: int32
        position:
          $ref: '#/components/schemas/Point'
        radius:
          type: integer
          format: int32
        area:
          $ref: '#/components/schemas/MultiPolygon'
        visibility:
          type: string
          enum:
            - ENDUSER_APP
            - SERVICE_APP
            - value
        state:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - value
            - log
        validUntil:
          type: string
          format: date-time
        branchId:
          type: integer
          format: int64
        reward:
          $ref: '#/components/schemas/Reward'
      x-stoplight:
        id: htarrgh4fpio0
    JsonRentalTimes:
      type: object
      properties:
        driving:
          $ref: '#/components/schemas/Duration'
        parking:
          $ref: '#/components/schemas/Duration'
        reservation:
          $ref: '#/components/schemas/Duration'
      x-stoplight:
        id: 99oznpyhk0tpo
    RentalTimes:
      type: object
      description: Breakdown of time spent in each rental phase
      properties:
        driving:
          $ref: '#/components/schemas/Duration'
        parking:
          $ref: '#/components/schemas/Duration'
        reservation:
          $ref: '#/components/schemas/Duration'
    JsonRentalPrice:
      type: object
      properties:
        priceForReservationGross:
          $ref: '#/components/schemas/BigDecimal'
        priceForDrivingGross:
          $ref: '#/components/schemas/BigDecimal'
        priceForParkingGross:
          $ref: '#/components/schemas/BigDecimal'
        nonRebatablePriceGross:
          $ref: '#/components/schemas/BigDecimal'
        rebateGross:
          $ref: '#/components/schemas/BigDecimal'
        priceGross:
          $ref: '#/components/schemas/BigDecimal'
        surchargeGross:
          $ref: '#/components/schemas/BigDecimal'
        priceForReservationNet:
          $ref: '#/components/schemas/BigDecimal'
        priceForDrivingNet:
          $ref: '#/components/schemas/BigDecimal'
        priceForParkingNet:
          $ref: '#/components/schemas/BigDecimal'
        nonRebatablePriceNet:
          $ref: '#/components/schemas/BigDecimal'
        rebateNet:
          $ref: '#/components/schemas/BigDecimal'
        priceNet:
          $ref: '#/components/schemas/BigDecimal'
        surchargeNet:
          $ref: '#/components/schemas/BigDecimal'
      x-stoplight:
        id: 6rf6vfga8cvjo
    RentalListDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        rentalId:
          type: integer
          format: int64
        state:
          type: string
          enum:
            - RESERVATION
            - ACTIVE
            - EXPIRED
            - ENDED
            - CANCELLED
            - ENDED_NO_MOVEMENT
            - STILL_ACTIVE
            - FEEDBACK_ALLOWED
            - ENDED_STATES
        startTime:
          type: string
          format: date-time
        driveStartTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        startKilometers:
          type: number
          format: double
        endKilometers:
          type: number
          format: double
        distance:
          type: number
          format: double
          description: 'Distance in kilometers only for ended rentals, rounded up to 2 decimal places.'
        startAddress:
          type: string
        endAddress:
          type: string
        startPosition:
          $ref: '#/components/schemas/Point'
        endPosition:
          $ref: '#/components/schemas/Point'
        imageOfRouteUrl:
          type: string
        branchId:
          type: integer
          format: int64
        totalDuration:
          $ref: '#/components/schemas/Duration'
        priceGross:
          type: string
        priceGrossRaw:
          type: number
          format: decimal
        sumGross:
          type: string
        sumGrossRaw:
          type: number
          format: decimal
        currency:
          type: string
        type:
          $ref: '#/components/schemas/RentalType'
        reason:
          type: string
        guser:
          $ref: '#/components/schemas/JsonGUser'
        group:
          $ref: '#/components/schemas/JsonGroup'
        vehicle:
          $ref: '#/components/schemas/JsonVehicle'
        branch:
          $ref: '#/components/schemas/JsonBranch'
        rentalTimes:
          $ref: '#/components/schemas/JsonRentalTimes'
        price:
          $ref: '#/components/schemas/JsonRentalPrice'
        estimatedPrice:
          $ref: '#/components/schemas/JsonRentalPrice'
        additions:
          type: array
          items:
            type: string
        encodedPolyLine:
          type: string
        feedback:
          $ref: '#/components/schemas/RentalFeedback'
        bookingId:
          type: integer
          format: int64
        appliedRebates:
          type: array
          items:
            $ref: '#/components/schemas/AppliedRentalRebate'
        activeDeposit:
          type: boolean
        priceV3:
          $ref: '#/components/schemas/PriceV3Dto'
        priceV4:
          $ref: '#/components/schemas/PriceV4Dto'
        rideMode:
          $ref: '#/components/schemas/RentalRideMode'
        station:
          $ref: '#/components/schemas/RentalStation'
      x-stoplight:
        id: xhgpsat228h48
    AdminAddRental:
      type: object
      properties:
        userId:
          type: integer
          format: int64
        vehicleId:
          type: integer
          format: int64
        vehicleCode:
          type: string
        startRentalState:
          $ref: '#/components/schemas/RentalState'
        additions:
          type: array
          items:
            type: string
        paidReservationMinutes:
          type: integer
          format: int64
        userGroupCode:
          type: string
        type:
          $ref: '#/components/schemas/RentalType'
        source:
          type: string
          enum:
            - INTERNAL
            - TURNN
        reason:
          type: string
        ref:
          type: string
        linkedRentalId:
          type: integer
          format: int64
        rideMode:
          $ref: '#/components/schemas/RentalRideMode'
      x-stoplight:
        id: x6rzs89ch2gj9
    RentalState:
      type: string
      description: |-
        - `RESERVATION`: The vehicle is reserved but it has not been started yet.
        - `ACTIVE`: The rental has started, i.e., the vehicle has been started and used for driving. The vehicle is driving or parking.
        - `EXPIRED`: The reservation is expired, i.e., the vehicle is free for rental again afterwards.
        - `ENDED`: The rental is ended.
        - `CANCELLED`: The reservation is cancelled by the user.
        - `ENDED_NO_MOVEMENT`: The rental was started (i.e., ACTIVE) but the vehicle was not moved. These rentals will appear on the invoice with a price of 0.
      enum:
        - RESERVATION
        - ACTIVE
        - EXPIRED
        - ENDED
        - CANCELLED
        - ENDED_NO_MOVEMENT
    RentalType:
      type: string
      description: |-
        - `PERSONAL`: Default value, normal rental for personal use.
        - `BUSINESS`: The rental is created with a group ID (business account) and will be charged against the group's balance.
        - `SERVICE`: Rental is created by a service worker to relocate the vehicle.
      enum:
        - PERSONAL
        - BUSINESS
        - SERVICE
    RentalRideMode:
      type: string
      enum:
        - NORMAL
        - BEGINNER
    RentalExportDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        state:
          type: string
          enum:
            - RESERVATION
            - ACTIVE
            - EXPIRED
            - ENDED
            - CANCELLED
            - ENDED_NO_MOVEMENT
            - STILL_ACTIVE
            - FEEDBACK_ALLOWED
            - ENDED_STATES
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        startPosition:
          $ref: '#/components/schemas/Point'
        endPosition:
          $ref: '#/components/schemas/Point'
        reservationDuration:
          $ref: '#/components/schemas/Duration'
        parkingDuration:
          $ref: '#/components/schemas/Duration'
        drivingDuration:
          $ref: '#/components/schemas/Duration'
        totalDuration:
          $ref: '#/components/schemas/Duration'
        priceGross:
          type: string
        vehicleId:
          type: integer
          format: int64
        vehicleLicensePlate:
          type: string
        customerId:
          type: integer
          format: int64
        customerLastName:
          type: string
        customerFirstName:
          type: string
        branchId:
          type: integer
          format: int64
        branchName:
          type: string
        rideMode:
          $ref: '#/components/schemas/RentalRideMode'
      x-stoplight:
        id: t2f0l9xil34mh
    PositionCoordinates:
      type: object
      properties:
        lat:
          type: string
        lng:
          type: string
      x-stoplight:
        id: gcxwfrsze17ds
    RentalWaypointDTO:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
        coordinates:
          $ref: '#/components/schemas/PositionCoordinates'
        speed:
          type: number
          format: float
        stateOfCharge:
          type: integer
          format: int32
      x-stoplight:
        id: vk27ljqvpo37f
    AdminRentalOperation:
      type: object
      properties:
        endTime:
          type: string
          format: date-time
        ignoreBusinessArea:
          type: boolean
        ignoreCommunicationFailure:
          type: boolean
        ignoreOperationFailure:
          type: boolean
        operationType:
          type: string
          description: |-
            START: start the rental if the vehicle was only reserved before (rental in state RESERVATION)
            END: end an active rental, will perform end rental checks too
            DRIVE: starts/powers the vehicle again and customer will be charged the drive rate again. needs to be an active rental
            PARK: powers off the vehicle and customer will be charged the park rate. needs to be an active rental
            RENEW_RESERVATION: renew the reservation (if rental in state RESERVATION)
            OPEN_TAILBOX: open just the tailbox (if the vehicle has one)
          enum:
            - START
            - END
            - DRIVE
            - PARK
            - RENEW_RESERVATION
            - OPEN_TAILBOX
        fileId:
          description: ID of a file that should be linked to the rental (only works on END operationType)
          type: integer
          format: int64
        vehicleCode:
          description: code of the vehicle. Not required but when passed it is verified that it matches the code of the vehicle and reject operations if it's not the same.
          type: string
        reason:
          description: |-
            Used on rental end to update the reason for a rental aka some description of why a rental was performed. 
            This is mostly being used for business rentals where users have to document the purpose of the rental.
          type: string
        communicationChannel:
          description: |-
            Defines if the device communication is via the API or via BLE (Bluetooth)

            API: the backend will talk to the device to perform the requested operation
            BLE: the client (ideally a mobile app) already executed the operation via Bluetooth but is telling the backend that it did so, we states can be updated
          type: string
          enum:
            - API
            - BLE
      x-stoplight:
        id: 5dwk9px7di8a9
    CreateVouchers:
      type: object
      required:
        - branchId
        - name
        - count
      description: |-
        This object can be used for the creation of unique voucher codes for marketing purposes.

        Note
        BENEFITS - One and only one of the benefits `value`, `rentalRebate` or `discount` must be provided.
        INVALIDATION - for invalidation after redemption set `validityTimeUnit` together with `validityPeriod` (valid for N units after redemption), or set `validityTimeUnit` alone (valid until the end of the current unit, e.g. end of day/week of redemption), or set `validityDateUntil` for a fixed point in time. If the voucher should not be invalidated by time, leave all three empty.
      properties:
        branchId:
          type: integer
          format: int64
          description: the id of the business unit on which the unique vouchers should be created.
        name:
          type: string
          description: the name of the unique voucher codes that is going to be displayed in the app once a user has redeemed it.
        count:
          type: integer
          format: int32
          description: The amount of unique voucher codes to be created.
        extInvoiceNumber:
          type: string
          description: An field which can be set with arbitrary text to be used for analysis or billing purposes. The content of this field will never be shown to an end user.
        description:
          type: string
          description: The description of the unique vouchers shown to the end user.
        signup:
          type: boolean
        requiredAnnotationIds:
          type: array
          description: A list of annotation a user must have to be able to redeem a generated voucher code.
          items:
            type: integer
            format: int64
        redeemWindowStart:
          type: string
          format: date-time
          description: Start of a time window during which the voucher can be redeemed.
        redeemWindowEnd:
          type: string
          format: date-time
          description: End of a time window during which the voucher can be redeemed.
        value:
          $ref: '#/components/schemas/BigDecimal'
        rentalRebate:
          $ref: '#/components/schemas/BigDecimal'
        discount:
          $ref: '#/components/schemas/BigDecimal'
        numberOfRentals:
          type: integer
          format: int32
          description: The number of rentals the voucher is valid for after it has been redeemed.
        validityTimeUnit:
          type: string
          enum:
            - HOURS
            - DAYS
            - WEEKS
            - MONTHS
            - YEARS
          description: Time unit applied to the voucher's validity after redemption. With `validityPeriod` it defines a duration (`validityPeriod` × `validityTimeUnit`); on its own it means the voucher is valid until the end of the current time unit (e.g. end of day/week).
        validityPeriod:
          type: integer
          format: int32
          description: Number of `validityTimeUnit`s the voucher is valid for after it has been redeemed. Requires `validityTimeUnit` to be set as well.
        validityDateUntil:
          type: string
          format: date-time
          description: A fixed time until when this voucher is valid no matter when it has been redeemed.
        applicableBranchIds:
          type: array
          items:
            type: integer
            format: int64
          description: 'If not empty, this voucher will only be applied to rentals which are linked to one of the provided branch ids.'
        applicableVehicleCategoryIds:
          type: array
          items:
            type: integer
            format: int64
          description: 'If not empty, this voucher will only be applied to rentals which are performed with a vehicle linked to one of the provided vehicle category ids.'
        applicablePriceType:
          type: string
          enum:
            - TIME_PRICE
            - DISTANCE_PRICE
          description: Defines on which part of the price the voucher is applied. It indicates if the benefit of this voucher will only take effect on the time price portion of a rental or only on the distance price portion of it. If not defined it will take effect on the total price.
        monetary:
          type: boolean
          description: Defines if value field is meant to be applied as money or as unit such as minutes.
        costSources:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: A mapping between `CostSourceType` and a list of strings representing applicable cost sources.
      x-stoplight:
        id: 3pw0sknd2ryre
    RedeemableVoucherSummary:
      type: object
      properties: { }
      x-stoplight:
        id: ewlbo67wgobld
    VoucherCampaign:
      type: object
      properties:
        name:
          type: string
        extInvoiceNumber:
          type: string
        allCount:
          type: integer
          format: int32
        redeemedCount:
          type: integer
          format: int32
      x-stoplight:
        id: t3mw8yz3t68k2
    Permission:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        code:
          type: string
          enum:
            - ANALYTICS_READ
            - USER_DEMAND_READ
            - BALANCE_CHARGE
            - BALANCE_READ
            - BALANCE_CREATE
            - BOOKING_CREATE
            - BOOKING_READ
            - BOOKING_LIST_READ
            - BOOKING_UPDATE
            - BOOKING_PICKUP
            - BOOKING_DELIVER_VEHICLE
            - BOOKING_UTILIZATION
            - BOOKING_EVENTS
            - BRANCH_CREATE
            - BRANCH_READ
            - BRANCH_UPDATE
            - BRANCH_DELETE
            - BRANCH_ADD_NOTES
            - BRANCH_READ_NOTES
            - VEHICLE_CATEGORY_BASIC_READ
            - VEHICLE_CATEGORY_CREATE
            - VEHICLE_CATEGORY_READ
            - VEHICLE_CATEGORY_UPDATE
            - VEHICLE_CATEGORY_DELETE
            - VEHICLE_CATEGORY_RELOAD
            - EVENT_READ
            - FILE_CREATE_PUBLIC_ASSET
            - IMPERSONATED_USER_CREATE
            - INVOICE_READ
            - INVOICE_REFUND
            - INVOICE_UPDATE
            - INVOICE_EXPORT
            - ISSUE_CREATE
            - ISSUE_READ
            - ISSUE_LIST_READ
            - ISSUE_UPDATE
            - ISSUE_INVOICE
            - ISSUE_READ_FILES
            - MESSAGE_RESOURCE_CREATE
            - MESSAGE_RESOURCE_READ
            - MESSAGE_RESOURCE_UPDATE
            - MESSAGE_RESOURCE_DELETE
            - MESSAGE_RESOURCE_RELOAD
            - MESSAGE_TRANSMISSION_READ
            - MODULE_CREATE
            - MODULE_READ
            - MODULE_RETIREMENTS_READ
            - MODULE_RETIRE
            - MODULE_UPDATE
            - PAYMENT_DELETE_SOURCE
            - PAYMENT_READ
            - PAYMENT_RETRY
            - PACKAGE_READ
            - PACKAGE_CREATE
            - PACKAGE_UPDATE
            - PACKAGE_DELETE
            - PROMOTION_READ
            - PROMOTION_CREATE
            - PROMOTION_UPDATE
            - PROMOTION_DELETE
            - RENTAL_CREATE
            - RENTAL_READ
            - RENTAL_LIST_READ
            - RENTAL_RECALCULATE_TIMES
            - RENTAL_OPERATION
            - RENTAL_ADD_NOTES
            - RENTAL_READ_NOTES
            - RENTAL_UPDATE_FILES
            - RENTAL_READ_FILES
            - RENTAL_EXPORT
            - RENTAL_EVENTS
            - RENTAL_DEPOSIT_RELEASE
            - RENTAL_ADDITION_CREATE
            - RENTAL_ADDITION_DELETE
            - RENTAL_ADDITION_READ
            - RENTAL_ADDITION_UPDATE
            - RENTAL_AUTHORITY_CREATE
            - RENTAL_AUTHORITY_DELETE
            - RENTAL_AUTHORITY_READ
            - RENTAL_AUTHORITY_UPDATE
            - REWARD_FLAG_VEHICLE
            - REWARD_CREATE
            - REWARD_DELETE
            - REWARD_READ
            - REWARD_UPDATE
            - ROLE_ASSIGNMENT_READ
            - ROLE_ASSIGNMENT_UPDATE
            - ROLE_CREATE
            - ROLE_DELETE
            - ROLE_READ
            - ROLE_UPDATE
            - SETTING_CREATE
            - SETTING_DELETE
            - SETTING_READ
            - SETTING_RELOAD
            - SETTING_UPDATE
            - SETTING_VALIDATE
            - SUBSCRIPTION_CREATE
            - SUBSCRIPTION_DELETE
            - SUBSCRIPTION_READ
            - SUBSCRIPTION_UPDATE
            - USER_CREATE
            - USER_READ
            - USER_READ_ALL_BRANCHES
            - USER_READ_FILES
            - USER_REMOVE_SIGN_IN_METHOD
            - USER_LIST_READ
            - USER_LIST_READ_ALL_BRANCHES
            - USER_DELETE
            - USER_ADD_CREDIT
            - USER_ADD_NOTES
            - USER_READ_NOTES
            - USER_EXPORT
            - USER_ASSIGN_CUSTOMER_CARE_VOUCHER
            - USER_UPDATE
            - USER_UPDATE_DATA
            - USER_UPDATE_BLOCK
            - USER_UPDATE_HOME_BILLABLE_BRANCH
            - USER_UPDATE_LICENSE_VERIFICATION
            - USER_UPDATE_MANUAL_VERIFICATION
            - USER_UPDATE_FILES
            - USER_UPDATE_PROPERTIES
            - USER_UPDATE_PAYMENT_STATE
            - USER_TAGS
            - USER_EVENTS
            - USER_LICENSE_VERIFICATION_READ
            - USER_AUTHENTICATION_READ
            - USER_AUTHENTICATION_LOGOUT
            - USER_AUTHENTICATION_LOGOUT_ROLES
            - USER_ADD_EMAIL_SIGN_IN_METHOD
            - USER_ADD_EMAIL_CODE_SIGN_IN_METHOD
            - USER_ADD_PHONE_SIGN_IN_METHOD
            - USER_RESET_MFA
            - USER_GROUP_CREATE
            - USER_GROUP_READ
            - USER_GROUP_LIST_READ
            - USER_GROUP_UPDATE
            - USER_GROUP_MEMBERS_READ
            - USER_GROUP_DELETE
            - USER_GROUP_ADD_MEMBERS
            - USER_GROUP_REMOVE_MEMBERS
            - USER_GROUP_CREATE_JOIN_REQUESTS
            - USER_GROUP_ASSIGN_VOUCHER
            - USER_GROUP_ADD_CREDIT
            - VEHICLE_CREATE
            - VEHICLE_READ
            - VEHICLE_LIST_READ
            - VEHICLE_RETIRE
            - VEHICLE_ADD_NOTES
            - VEHICLE_READ_NOTES
            - VEHICLE_UPDATE
            - VEHICLE_UPDATE_BRANCH
            - VEHICLE_UPDATE_ADDRESS
            - VEHICLE_UPDATE_CODE
            - VEHICLE_UPDATE_LICENSE_PLATE
            - VEHICLE_UPDATE_INSPECTION_DATE
            - VEHICLE_UPDATE_POSITION
            - VEHICLE_UPDATE_FILES
            - VEHICLE_READ_FILES
            - VEHICLE_UPDATE_SERVICE_STATE
            - VEHICLE_UPDATE_CUSTOM_PROPERTIES
            - VEHICLE_UPDATE_VIN
            - VEHICLE_UPDATE_CATEGORY
            - VEHICLE_UPDATE_ADD_MODULE
            - VEHICLE_UPDATE_REMOVE_MODULE
            - VEHICLE_ACTIVITY_CREATE
            - VEHICLE_ACTIVITY_READ
            - VEHICLE_ACTIVITY_UPDATE
            - VEHICLE_ACTIVITY_DELETE
            - VEHICLE_CUSTOM_COMMAND_CREATE
            - VEHICLE_CUSTOM_COMMAND_READ
            - VEHICLE_CUSTOM_COMMAND_UPDATE
            - VEHICLE_CUSTOM_COMMAND_DELETE
            - VEHICLE_COMPOSITE_ACTIVITY_CREATE
            - VEHICLE_COMPOSITE_ACTIVITY_READ
            - VEHICLE_COMPOSITE_ACTIVITY_UPDATE
            - VEHICLE_COMPOSITE_ACTIVITY_DELETE
            - VEHICLE_COMMAND
            - VEHICLE_COMMAND_CUSTOM
            - VEHICLE_COMMAND_UPDATE
            - VEHICLE_COMMAND_OPENTAILBOX
            - VEHICLE_COMMAND_LOCATE
            - VEHICLE_COMMAND_START
            - VEHICLE_COMMAND_STOP
            - VEHICLE_COMMAND_ALARM
            - VEHICLE_COMMAND_SADDLE
            - VEHICLE_COMMAND_REBOOT
            - VEHICLE_COMMAND_LOCKING
            - VEHICLE_CONFIG_SPEED
            - VEHICLE_DAMAGE_READ
            - VEHICLE_DAMAGE_CREATE
            - VEHICLE_DAMAGE_UPDATE
            - VEHICLE_EVENTS
            - VEHICLE_MAINTENANCE
            - VEHICLE_TAGS
            - VEHICLE_RADAR_LIST_READ
            - VEHICLE_RADAR_READ
            - MAINTENANCE_ROUTING
            - VOUCHER_CREATE
            - VOUCHER_READ
            - VOUCHER_CANCEL
            - VOUCHERABLE_CREATE
            - VOUCHERABLE_READ
            - VOUCHERABLE_UPDATE
            - VOUCHERABLE_DELETE
            - TRIGGERED_VOUCHERABLE_READ
            - TRIGGERED_VOUCHERABLE_CREATE
            - TRIGGERED_VOUCHERABLE_UPDATE
            - TRIGGERED_VOUCHERABLE_DELETE
            - CUSTOMER_CARE_VOUCHERABLE_READ
            - CUSTOMER_CARE_VOUCHERABLE_CREATE
            - CUSTOMER_CARE_VOUCHERABLE_UPDATE
            - CUSTOMER_CARE_VOUCHERABLE_DELETE
            - SIGNUP_REFERRAL_VOUCHERABLE_READ
            - SIGNUP_REFERRAL_VOUCHERABLE_CREATE
            - SIGNUP_REFERRAL_VOUCHERABLE_UPDATE
            - SIGNUP_REFERRAL_VOUCHERABLE_DELETE
            - VEHICLE_PROMOTION_VOUCHERABLE_READ
            - VEHICLE_PROMOTION_VOUCHERABLE_CREATE
            - VEHICLE_PROMOTION_VOUCHERABLE_UPDATE
            - VEHICLE_PROMOTION_VOUCHERABLE_DELETE
            - STATION_CREATE
            - STATION_READ
            - STATION_UPDATE
            - STATION_DELETE
            - TAG_UPDATE
            - TAG_DELETE
            - TASK_READ
            - TASK_CREATE
            - TASK_UPDATE
            - TASK_DELETE
            - TASK_TAGS
            - TERMS_AND_CONDITIONS_CREATE
            - TERMS_AND_CONDITIONS_READ
            - TERMS_AND_CONDITIONS_UPDATE
            - TERMS_AND_CONDITIONS_DELETE
            - TUTORIAL_CREATE
            - TUTORIAL_DELETE
            - TUTORIAL_READ
            - TUTORIAL_UPDATE
            - API_CLIENT_CREATE
            - POI_CATEGORY_CREATE
            - POI_CATEGORY_DELETE
            - POI_CATEGORY_READ
            - POI_CATEGORY_UPDATE
            - POI_CREATE
            - POI_DELETE
            - POI_READ
            - POI_UPDATE
            - POI_STATION_CREATE
            - POI_STATION_DELETE
            - POI_STATION_READ
            - POI_STATION_UPDATE
            - POI_VEHICLE_CREATE
            - POI_VEHICLE_DELETE
            - POI_VEHICLE_READ
            - POI_VEHICLE_UNLOCK
            - POI_VEHICLE_UPDATE
            - AREA_CREATE
            - AREA_READ
            - AREA_UPDATE
            - AREA_DELETE
            - AREA_TYPE_CREATE
            - AREA_TYPE_READ
            - AREA_TYPE_UPDATE
            - AREA_TYPE_DELETE
            - BUSINESS_UNIT_LIST
            - BUSINESS_UNIT_DELETE
            - BUSINESS_UNIT_CREATE
            - BUSINESS_UNIT_UPDATE
            - UNKNOWN
            - ALL_PERMISSION_NAMES
        description:
          type: string
      x-stoplight:
        id: sw710jv0ut7ny
    RoleWithPermissions:
      type: object
      properties:
        permissions:
          type: array
          items:
            $ref: '#/components/schemas/Permission'
        id:
          type: integer
          format: int64
        roleType:
          type: string
          enum:
            - USER
            - BRANCH_ADMIN
            - ROOT
            - ASSIGNABLE_ROLES
        name:
          type: string
        description:
          type: string
        actionIds:
          type: array
          items:
            type: integer
            format: int64
      x-stoplight:
        id: zd8h2u2wuoib9
    RoleAssignment:
      type: object
      properties:
        id:
          type: integer
          format: int64
        branchId:
          type: integer
          format: int64
        guserId:
          type: integer
          format: int64
        roleId:
          type: integer
          format: int64
        branchName:
          type: string
        guserName:
          type: string
        roleName:
          type: string
        userAuthId:
          type: string
      x-stoplight:
        id: q3orfwpo3k8dt
    RolesForGUser:
      type: object
      properties:
        assignmentId:
          type: integer
          format: int64
        roleId:
          type: integer
          format: int64
        roleName:
          type: string
        branchId:
          type: integer
          format: int64
      x-stoplight:
        id: hlyen5x5gjpnj
    GUserWithRoles:
      type: object
      properties:
        id:
          type: integer
          format: int64
        authId:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        roles:
          type: array
          items:
            $ref: '#/components/schemas/RolesForGUser'
      x-stoplight:
        id: lh2c7tx0vwb84
    CustomerIdentityCardResponse:
      title: CustomerIdentityCardResponse
      type: object
      x-examples:
        id: 156
        cardNumber: '0010142'
        rfidUid: 008033F5C28EFA04
        rfidType: iso14443a_mifare
        state: ASSIGNED
        branch:
          id: 1234
        assignedUser:
          id: 43
          firstName: John
          lastName: Doe
      properties:
        id:
          type: integer
          format: int64
          description: Identifier of the customer identity card
        cardNumber:
          type: string
          description: Card number of the customer identity card. Is globally unique.
        rfidUid:
          type: string
          description: Unique identifier of the RFID tag. Needs to be globally unique together with 'rfidType'.
        rfidType:
          type: string
          description: Type of the RFID tag. Needs to be globally unique together with 'rfidUid'.
        state:
          type: string
          description: State of the customer identity card
          enum:
            - NEW
            - ASSIGNED
            - UNASSIGNED
            - BROKEN
            - LOST
            - ARCHIVED
        branch:
          type: object
          description: 'Branch the card is assigned to, only present if explicitly assigned to a branch otherwise generally available on all branches.'
          properties:
            id:
              type: integer
              format: int64
              description: Identifier of the branch
        assignedUser:
          $ref: '#/components/schemas/JsonGUser'
    CustomerIdentityCardCreationRequest:
      title: CustomerIdentityCardCreationRequest
      type: object
      x-examples:
        cardNumber: '0010142'
        rfidUid: 008033F5C28EFA04
        rfidType: iso14443a_mifare
        branchId: 1234
      properties:
        cardNumber:
          type: string
          description: Card number of the customer identity card. Needs to be globally unique.
        rfidUid:
          type: string
          description: Unique identifier of the RFID tag. Needs to be globally unique together with 'rfidType'.
        rfidType:
          type: string
          description: |-
            Type of the RFID tag. Needs to be globally unique together with 'rfidUid'.
            Optional in case it is unknown.
        branchId:
          type: integer
          format: int64
          description: Identifier of the branch this card should be assigned to. If not present the card will be generally available on all branches.
      required:
        - cardNumber
        - rfidUid
    CustomerIdentityCardUpdateRequest:
      title: CustomerIdentityCardUpdateRequest
      type: object
      x-examples:
        cardNumber: '0010142'
        rfidUid: 008033F5C28EFA04
        rfidType: iso14443a_mifare
        state: LOST
        branchId: 1234
      properties:
        cardNumber:
          type: string
          description: Card number of the customer identity card. Needs to be globally unique.
        rfidUid:
          type: string
          description: Unique identifier of the RFID tag. Needs to be globally unique together with 'rfidType'.
        rfidType:
          type: string
          description: Type of the RFID tag.  Needs to be globally unique together with 'rfidUid'.
        state:
          type: string
          description: State of the customer identity card
          enum:
            - BROKEN
            - LOST
            - ARCHIVED
        branchId:
          type: integer
          format: int64
          description: Identifier of the branch this card should be assigned to. To unassign a card from a branch this has to be set to '-1'.
    VehicleCardResponse:
      title: VehicleCardResponse
      type: object
      x-examples:
        id: 156
        cardNumber: '0010142'
        rfidUid: 008033F5C28EFA04
        rfidType: iso14443a_mifare
        pin: 4932
        instructions: Only to be used at OMV fuel stations
        type: FUEL
        provider: OMV
        state: ASSIGNED
        branch:
          id: 1234
        assignedVehicle:
          id: 43
          licensePlat: W-1235D
          code: 43DR
          name: Tesla 3
      properties:
        id:
          type: integer
          format: int64
          description: Identifier of the vehicle card
        cardNumber:
          type: string
          description: Card number of the vehicle card. Is globally unique together with type.
        rfidUid:
          type: string
          description: Unique identifier of the RFID tag. Needs to be globally unique together with 'rfidType'.
        rfidType:
          type: string
          description: Type of the RFID tag. Needs to be globally unique together with 'rfidUid'.
        state:
          type: string
          description: State of the vehicle card
          enum:
            - NEW
            - ASSIGNED
            - UNASSIGNED
            - BROKEN
            - LOST
            - ARCHIVED
        pin:
          type: string
          description: Optional PIN that is required when using the card. Is sent to customers when they use the vehicle.
        instructions:
          type: string
          description: Optional instructions on how to use the card. Is sent to customers when they use the vehicle.
        provider:
          type: string
          description: 'Name of the provider that issued the card (e.g., company providing the charging facilities).'
        type:
          type: string
          description: Type of the card describing it's purpose.
          enum:
            - FUEL
            - CHARGING
            - PARKING
            - ROADSIDE_ASSISTANCE
            - OTHER
        branch:
          type: object
          description: 'Branch the card is assigned to, only present if explicitly assigned to a branch otherwise generally available on all branches.'
          properties:
            id:
              type: integer
              format: int64
              description: Identifier of the branch
        assignedVehicle:
          type: object
          properties:
            id:
              type: integer
              format: int64
              description: Identifier of the vehicle
            licensePlate:
              type: string
              description: License plate of the vehicle
            code:
              type: string
              description: Code of the vehicle
            name:
              type: string
              description: Name of the vehicle
    VehicleCardCreationRequest:
      title: VehicleCardCreationRequest
      type: object
      x-examples:
        cardNumber: '0010142'
        rfidUid: 008033F5C28EFA04
        rfidType: iso14443a_mifare
        pin: 4932
        instructions: Only to be used at OMV fuel stations
        type: FUEL
        provider: OMV
        branchId: 1234
      properties:
        cardNumber:
          type: string
          description: Card number of the vehicle card. Needs to be globally unique per type.
        rfidUid:
          type: string
          description: Unique identifier of the RFID tag. Needs to be globally unique together with 'rfidType'.
        rfidType:
          type: string
          description: |-
            Type of the RFID tag. Needs to be globally unique together with 'rfidUid'.
            Optional in case it is unknown.
        pin:
          type: string
          description: Optional PIN that is required when using the card. Is sent to customers when they use the vehicle.
        instructions:
          type: string
          description: Optional instructions on how to use the card. Is sent to customers when they use the vehicle.
        provider:
          type: string
          description: 'Name of the provider that issued the card (e.g., company providing the charging facilities).'
        type:
          type: string
          description: Type of the card describing it's purpose.
          enum:
            - FUEL
            - CHARGING
            - PARKING
            - ROADSIDE_ASSISTANCE
            - OTHER
        branchId:
          type: integer
          format: int64
          description: Identifier of the branch this card should be assigned to. If not present the card will be generally available on all branches.
      required:
        - cardNumber
        - rfidUid
        - type
    VehicleAttributeGroupResponse:
      type: object
      properties:
        id:
          type: number
          format: int64
          example: 1
        name:
          type: string
          example: Vehicle Type
          description: Name of the attribute group
        order:
          type: number
          format: int32
          example: 1
          description: Order of the attribute group in which it should show up in the UI
        filterType:
          type: string
          enum:
            - ANY
            - ALL
          example: ANY
          description: When filtering if any or all selected attributes have to match the vehicle
        selectionType:
          type: string
          enum:
            - CHECKBOX
            - SWITCH
            - RADIO
          example: CHECKBOX
          description: How the selection should be rendered in the UI
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/VehicleAttributeResponse'
    VehicleAttributeGroupCreationRequest:
      type: object
      properties:
        name:
          type: string
          example: Vehicle Type
          description: Name of the attribute group
        order:
          type: integer
          minimum: 0
          description: Order of the attribute group in which it should show up in the UI
          default: 0
        filterType:
          type: string
          enum:
            - ANY
            - ALL
          example: ANY
          description: When filtering if any or all selected attributes have to match the vehicle
          default: ANY
        selectionType:
          type: string
          enum:
            - CHECKBOX
            - SWITCH
            - RADIO
          example: CHECKBOX
          description: How the selection should be rendered in the UI
          default: CHECKBOX
      required:
        - name
    VehicleAttributeGroupUpdateRequest:
      type: object
      required:
        - name
        - order
        - filterType
        - selectionType
      properties:
        name:
          type: string
          example: Vehicle Type
          description: Name of the attribute group
        order:
          type: integer
          minimum: 0
          description: Order of the attribute group in which it should show up in the UI
        filterType:
          type: string
          enum:
            - ANY
            - ALL
          example: ANY
          description: When filtering if any or all selected attributes have to match the vehicle
        selectionType:
          type: string
          enum:
            - CHECKBOX
            - SWITCH
            - RADIO
          example: CHECKBOX
          description: How the selection should be rendered in the UI
    VehicleAttributeResponse:
      type: object
      properties:
        id:
          type: number
          format: int64
          example: 1
        name:
          type: string
          example: Sedan
          description: Name of the attribute
    VehicleAttributeCreationRequest:
      required:
        - name
      type: object
      properties:
        name:
          type: string
          example: Sedan
          description: Name of the attribute
    VehicleAttributeUpdateRequest:
      required:
        - name
      type: object
      properties:
        name:
          type: string
          example: Sedan
          description: Name of the attribute
    VehicleCardUpdateRequest:
      title: VehicleCardUpdateRequest
      type: object
      x-examples:
        cardNumber: '0010142'
        rfidUid: 008033F5C28EFA04
        rfidType: iso14443a_mifare
        pin: 4932
        instructions: Only to be used at OMV fuel stations
        type: FUEL
        state: LOST
        branchId: 1234
      properties:
        cardNumber:
          type: string
          description: Card number of the vehicle card. Needs to be globally unique per type.
        rfidUid:
          type: string
          description: Unique identifier of the RFID tag. Needs to be globally unique together with 'rfidType'.
        rfidType:
          type: string
          description: Type of the RFID tag. Needs to be globally unique together with 'rfidUid'.
        state:
          type: string
          description: State of the Vehicle card
          enum:
            - BROKEN
            - LOST
            - ARCHIVED
        pin:
          type: string
          description: Optional PIN that is required when using the card. Is sent to customers when they use the vehicle.
        instructions:
          type: string
          description: Optional instructions on how to use the card. Is sent to customers when they use the vehicle.
        provider:
          type: string
          description: 'Name of the provider that issued the card (e.g., company providing the charging facilities).'
        type:
          type: string
          description: Type of the card describing it's purpose.
          enum:
            - FUEL
            - CHARGING
            - PARKING
            - ROADSIDE_ASSISTANCE
            - OTHER
        branchId:
          type: integer
          format: int64
          description: Identifier of the branch this card should be assigned to. To unassign a card from a branch this has to be set to '-1'.
    BookingStation:
      title: BookingStation
      x-stoplight:
        id: 9pt2i4egefjlk
      type: object
      examples:
        - id: null
          name: Tesla booking
          publicName: Tesla booking station
          address:
            street: Jovana Ducica 23a
            postcode: '78000'
            city: Banja Luka
            country: Bosnia and Herzegovina
          conflictedVehicleCategories:
            - id: 1
              name: Tesla
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
          x-stoplight:
            id: f39kqf63591ia
        publicName:
          type: string
          x-stoplight:
            id: r6lsgqtpli8h4
        address:
          $ref: '#/components/schemas/AddressInfo'
          x-stoplight:
            id: zhn2h1htoqehy
        conflictedVehicleCategories:
          type: array
          x-stoplight:
            id: h2ym2gaafujxz
          items:
            x-stoplight:
              id: txxz2bszu9y7t
            type: object
            properties:
              id:
                type: integer
                x-stoplight:
                  id: baka22940djnm
                format: int64
              name:
                type: string
                x-stoplight:
                  id: xq4ijx86rijs5
        openingInformation:
          $ref: '#/components/schemas/OpeningInformation'
        timeZoneId:
          type: string
    ApiError:
      title: ApiError
      x-stoplight:
        id: wl1xkbbqkis8p
      type: object
      description: Response in case of any error
      properties:
        errorCode:
          type: string
          x-stoplight:
            id: vvljm721w7mch
        userMessage:
          type: string
          x-stoplight:
            id: sw98jgq1q35ec
        traceId:
          type: string
          x-stoplight:
            id: mfgz92w8dnbeu
        httpStatus:
          type: integer
          x-stoplight:
            id: hh6l58yhfb5pl
        timestamp:
          type: string
          x-stoplight:
            id: x8xdyojpew94s
          format: date-time
        details:
          type: array
          x-stoplight:
            id: 9xlx8b2ad6ram
          items:
            x-stoplight:
              id: 84yhhll60hwof
            type: object
            properties:
              errorCode:
                type: string
                x-stoplight:
                  id: 9ob3jh9iz1su9
              userMessage:
                type: string
                x-stoplight:
                  id: y5yuycu4982ds
              name:
                type: string
                x-stoplight:
                  id: xfqqjka56ikmz
              field:
                type: string
                x-stoplight:
                  id: cl44d9jlcrjpy
      examples:
        - errorCode: V404.4
          userMessage: Vehicle couldn't be found
          traceId: 47baa65acd2e4a5ba57306fad29557d1
          httpStatus: 404
          timestamp: '2024-03-08T10:08:58.311086682Z'
    BookingStationVehicleCategory:
      title: BookingStationVehicleCategory
      x-stoplight:
        id: wi2pi8avyxp9y
      type: object
      examples:
        - id: 1
          name: Acton
          capacity: 15
          pricingBundle:
            id: 0
            name: Pricing bundle name
            currency: EUR
            distanceUnit: KILOMETERS
            description: Simple pricing bundle description
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
          x-stoplight:
            id: zkr60rsb6ime8
        capacity:
          type: integer
          x-stoplight:
            id: bfus5llxdcfdv
            explicitProperties:
              - type
              - format
              - minimum
          format: int64
          minimum: 0
        pricingBundle:
          type: string
          x-stoplight:
            id: 122vgfcda4cx5
    GUserRentalRequirement:
      title: GUserRentalRequirement
      x-stoplight:
        id: w0x097nips9xh
      type: object
      properties:
        rentalRequirement:
          type: string
          x-stoplight:
            id: 18j3vpe3v8wgz
          enum:
            - SIGNUP
            - EMAIL
            - PHONE
            - FIRST_NAME
            - LAST_NAME
            - BIRTHDATE
            - STREET
            - POSTCODE
            - CITY
            - COUNTRY
            - PAYMENT_SOURCE
            - PAYMENT_PUSH
            - PAYMENT_ANY
            - SIGNUP_FEE_PUSH
            - SIGNUP_FEE_SOURCE
            - LICENSE
            - ID_DOCUMENT
            - MANUAL
            - MINIMUM_AGE
            - MAXIMUM_AGE
            - USER_HAVE_ENOUGH_BALANCE
            - USER_IS_NOT_LOCKED
            - TERMS_ACCEPTED_LATEST
            - TERMS_ACCEPTED
            - USER_HAS_NO_UNPAID_INVOICES
            - USER_REQUIRED_DRIVING_LICENCE_TYPE_PRESENT
            - UNKNOWN
            - CONFIGURATION_ISSUE
            - RENTAL_AUTHORITY
            - RIDE_PASS
            - POSITIVE_CREDIT
            - NEUTRAL_CREDIT
            - DISALLOW_CREDIT_CARD
            - DISALLOW_WALLET
            - CUSTOM_EXTERNAL_VERIFICATION
            - PREVIOUS_RENTALS
        fulfilled:
          type: boolean
          x-stoplight:
            id: hyrsk5zj6dnqs
        message:
          type: string
          x-stoplight:
            id: 86o1nngzaqywu
    BookingConflict:
      title: BookingConflict
      x-stoplight:
        id: bdxk3thrwjbtl
      type: object
      properties:
        vehicleCategoryId:
          type: integer
          x-stoplight:
            id: q865dprx4000b
          format: int64
        vehicleId:
          type: integer
          x-stoplight:
            id: w1vqfh7gde5fm
          format: int64
        range:
          $ref: '#/components/schemas/TimeRange'
          x-stoplight:
            id: m81pku3vccsg6
        type:
          type: string
          x-stoplight:
            id: 4v0plcvw98nl3
          enum:
            - FULLY_BOOKED
            - OVERBOOKED
      examples:
        - vehicleCategoryId: 12
          vehicleId: null
          range:
            startTime: '2019-08-24T14:15:22Z'
            endTime: '2019-08-24T14:15:22Z'
          type: OVERBOOKED
    TimeRange:
      title: TimeRange
      x-stoplight:
        id: 9xjcsb4us6gi2
      type: object
      properties:
        startTime:
          type: string
          x-stoplight:
            id: 26uymsz4mtpha
          format: date-time
        endTime:
          type: string
          x-stoplight:
            id: jpgzhdixt61nj
          format: date-time
    BookingCreationAvailability:
      title: BookingCreationAvailability
      x-stoplight:
        id: y5ab9tx3xxblm
      type: object
      description: Describes outcome of a booking creation availability check.
      properties:
        willCauseConflicts:
          type: boolean
          x-stoplight:
            id: vigen5fnttf2a
    JsonVehicleCategory:
      title: JsonVehicleCategory
      x-stoplight:
        id: 5f06sulmbulwe
      type: object
      examples:
        - id: 1
          name: Tesla Model S
      properties:
        id:
          type: number
        name:
          type: string
          x-stoplight:
            id: evm0vrm4vxxx8
    PhysicalStation:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        state:
          $ref: '#/components/schemas/PhysicalStationState'
        position:
          $ref: '#/components/schemas/Point'
        branch:
          $ref: '#/components/schemas/Branch'
        openingInformation:
          $ref: '#/components/schemas/OpeningInformation'
        contactInfo:
          $ref: '#/components/schemas/PhysicalStationContactInfo'
        operationalVehicles:
          $ref: '#/components/schemas/PhysicalStationVehiclesAvailability'
        nonOperationalVehicles:
          $ref: '#/components/schemas/PhysicalStationVehiclesAvailability'
        occupancy:
          $ref: '#/components/schemas/PhysicalStationOccupancy'
        createdAt:
          type: string
          format: date-time
        createdBy:
          $ref: '#/components/schemas/JsonGUser'
        updatedAt:
          type: string
          format: date-time
        updatedBy:
          $ref: '#/components/schemas/JsonGUser'
      required:
        - id
    PhysicalStationState:
      type: string
      enum:
        - OPERATIONAL
        - TEMPORARY_CLOSED
        - PERMANENTLY_CLOSED
        - IN_PREPARATION
    PhysicalStationOccupancy:
      type: object
      properties:
        vacant:
          type: integer
          format: int64
        occupied:
          type: integer
          format: int64
        outOfOrder:
          type: integer
          format: int64
        total:
          type: integer
          format: int64
      required:
        - vacant
        - occupied
        - outOfOrder
        - total
    PhysicalStationVehiclesAvailability:
      type: object
      properties:
        total:
          type: integer
          format: int64
        overview:
          type: object
          additionalProperties:
            type: integer
            format: int64
      required:
        - total
    PhysicalStationContactInfo:
      type: object
      properties:
        address:
          type: string
    PhysicalStationCreate:
      type: object
      required:
        - name
        - position
        - branchId
      properties:
        name:
          type: string
        position:
          $ref: '#/components/schemas/Point'
        branchId:
          type: integer
          format: int64
        openingInformation:
          $ref: '#/components/schemas/OpeningInformation'
        contactInfo:
          $ref: '#/components/schemas/PhysicalStationContactInfo'
    PhysicalStationPatch:
      type: object
      properties:
        name:
          type: string
        state:
          $ref: '#/components/schemas/PhysicalStationState'
        position:
          $ref: '#/components/schemas/Point'
        openingInformation:
          $ref: '#/components/schemas/OpeningInformation'
        contactInfo:
          $ref: '#/components/schemas/PhysicalStationContactInfo'
    PhysicalStationSlot:
      type: object
      properties:
        id:
          type: integer
          format: int64
        externalId:
          type: string
        state:
          $ref: '#/components/schemas/PhysicalStationSlotState'
        vehicle:
          $ref: '#/components/schemas/Vehicle'
      required:
        - id
        - externalId
        - state
        - vehicle
    PhysicalStationSlotState:
      type: string
      enum:
        - OCCUPIED
        - VACANT
        - OUT_OF_ORDER
    PhysicalStationSlotCreate:
      type: object
      properties:
        externalId:
          type: string
          description: external identifier of the slot
    PhysicalStationSlotPatch:
      type: object
      properties:
        state:
          type: string
          enum:
            - OUT_OF_ORDER
    PhysicalStationSlotVehicleConnect:
      type: object
      properties:
        vehicleId:
          type: integer
          format: int64
          description: identifier of the vehicle to be docked
    PhysicalStationParkingArea:
      type: object
      properties:
        capacity:
          type: integer
          format: int64
          description: Use null for unlimited capacity
        area:
          $ref: '#/components/schemas/MultiPolygon'
        vehicles:
          type: array
          items:
            $ref: '#/components/schemas/Vehicle'
        reservedParkingCount:
          type: integer
          description: Number of parking spots reserved by active rentals
    PhysicalStationParkingAreaCreate:
      type: object
      properties:
        capacity:
          type: integer
          format: int64
          description: Use null for unlimited capacity
        area:
          $ref: '#/components/schemas/MultiPolygon'
    PhysicalStationParkingAreaPatch:
      type: object
      properties:
        capacity:
          type: integer
          format: int64
          description: 'Parking area capacity. Must be positive or -1. Send -1 to clear (set to unlimited). Omit field to leave unchanged. Zero is not allowed.'
        area:
          $ref: '#/components/schemas/MultiPolygon'
    PhysicalStationParkingAreaVehiclePark:
      type: object
      properties:
        vehicleId:
          type: integer
          format: int64
    PhysicalStationParkingAreaVehicleParkBatch:
      type: object
      properties:
        vehicleIds:
          type: array
          items:
            type: integer
            format: int64
    PhysicalStationParkingAreaVehicleRemove:
      type: object
      properties:
        vehicleId:
          type: integer
          format: int64
    Breakdown:
      type: object
      properties:
        amount:
          type: number
          format: double
        title:
          type: string
        breakdown:
          additionalProperties:
            type: object
            properties:
              key:
                type: string
              breakdown:
                $ref: '#/components/schemas/Breakdown'
        reference:
          additionalProperties:
            type: object
            properties:
              key:
                type: string
              value:
                type: object
    TaxBreakdown:
      type: object
      properties:
        net:
          type: number
          format: double
        tax:
          type: number
          format: double
        gross:
          type: number
          format: double
        taxPercentage:
          type: number
          format: double
    PriceOverview:
      allOf:
        - $ref: '#/components/schemas/Breakdown'
        - type: object
          properties:
            currency:
              type: string
            taxBreakdown:
              $ref: '#/components/schemas/TaxBreakdown'
    BillingOverview:
      type: Object
      properties:
        priceOverview:
          $ref: '#/components/schemas/PriceOverview'
        refundsOverview:
          $ref: '#/components/schemas/TaxBreakdown'
      example:
        pricing:
          title: Booking fee
          reference:
            invoiceId: BOS-240000001248
            id: 3707
            type: INVOICE
          amount: 195.3
          breakdown:
            price:
              title: Rental price
              amount: 20
              breakdown:
                TIME:
                  title: Time Price
                  amount: 20
                DISTANCE:
                  title: Distance Price
                  amount: 0
            additions:
              title: Additions
              amount: 175.3
              breakdown:
                VIGNETTE:
                  title: Vignette
                  reference:
                    id: 67
                    type: RENTAL_ADDITION
                  amount: 15
                  breakdown:
                    UNCATEGORIZED:
                      title: Price
                      amount: 15
                CHAUFFEUR:
                  title: Chauffeur
                  reference:
                    id: 103
                    type: RENTAL_ADDITION
                  amount: 150
                  breakdown:
                    UNCATEGORIZED:
                      title: Price
                      amount: 150
                INSURANCE:
                  title: Versicherung
                  reference:
                    id: 1
                    type: RENTAL_ADDITION
                  amount: 5.3
                  breakdown:
                    UNCATEGORIZED:
                      title: Price
                      amount: 5.3
                INTERNAL_EXTRA:
                  title: Booking fee
                  reference:
                    id: 133
                    type: RENTAL_ADDITION
                  amount: 5
                  breakdown:
                    UNCATEGORIZED:
                      title: Price
                      amount: 5
          taxBreakdown:
            net: 166.92
            tax: 28.38
            gross: 195.3
            taxPercentage: 17
          currency: BAM
        refunds:
          title: Refunds
          amount: -5
          lineItems:
            - reference:
                invoiceId: BOS-240000001249
                id: 3708
                type: INVOICE
              amount: -5
              currency: BAM
              taxBreakdown:
                net: -4.27
                tax: -0.73
                gross: -5
                taxPercentage: 17
    OnDemandPricingAssignment:
      title: OnDemandPricingAssignment
      x-stoplight:
        id: gajm7rlmvj67l
      type: object
      properties:
        id:
          type: integer
          format: int64
        category:
          $ref: '#/components/schemas/VehicleCategory'
          x-stoplight:
            id: 3t5ldvn2isl3k
        branch:
          $ref: '#/components/schemas/Branch'
          x-stoplight:
            id: 849rh9vvtkq0a
        priceSetting:
          $ref: '#/components/schemas/OnDemandPricingOption'
          x-stoplight:
            id: jtczg0lllmcl4
        defaultForCategoryAndBranch:
          type: boolean
          x-stoplight:
            id: by5lvrz504rw1
    OnDemandPricingOption:
      title: OnDemandPricingOption
      x-stoplight:
        id: kh7h3f245pvuk
      type: object
      properties:
        priceSettingId:
          type: integer
          x-stoplight:
            id: i9f1tq82q1aoz
          format: int64
        name:
          type: string
          x-stoplight:
            id: 8ytlf5lg23jvf
        priceSettingKey:
          type: string
          x-stoplight:
            id: k9b86ka07tlhv
        fallback:
          type: boolean
          x-stoplight:
            id: pph4ro3zx57v4
    PricingBundleVersionEmbedded:
      title: PricingBundleVersionEmbedded
      type: object
      properties:
        id:
          type: integer
          format: int64
        label:
          type: string
        revision:
          type: integer
          format: int64
        pricingBundle:
          type: object
          $ref: '#/components/schemas/PricingBundle'
    DistanceUnit:
      title: DistanceUnit
      type: string
      enum:
        - KILOMETERS
        - MILES
      description: Unit of distance measurement

    PricingBundleType:
      title: PricingBundleType
      type: string
      enum:
        - BOOKING
        - ON_DEMAND_LEGACY
      description: Type of pricing bundle

    PricingBundleVersionStatus:
      title: PricingBundleVersionStatus
      type: string
      enum:
        - DRAFT
        - PUBLISHED
        - SUPERSEDED
        - ARCHIVED
        - EXPIRED
      description: Status of a pricing bundle version

    PricingBundle:
      title: PricingBundle
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        currency:
          type: string
        distanceUnit:
          $ref: '#/components/schemas/DistanceUnit'
        description:
          type: string
        type:
          $ref: '#/components/schemas/PricingBundleType'
        versions:
          type: array
          items:
            $ref: '#/components/schemas/PricingBundleVersion'
    PricingBundleVersion:
      title: PricingBundleVersion
      type: object
      properties:
        id:
          type: integer
          format: int64
        label:
          type: string
        revision:
          type: integer
          format: int64
        status:
          $ref: '#/components/schemas/PricingBundleVersionStatus'
        effectiveFrom:
          type: string
          format: date-time
        distanceUnit:
          $ref: '#/components/schemas/DistanceUnit'
        currency:
          type: string

    PricingBundleCreate:
      title: PricingBundleCreate
      type: object
      required:
        - name
        - currency
        - distanceUnit
        - type
      properties:
        name:
          type: string
        currency:
          type: string
        distanceUnit:
          $ref: '#/components/schemas/DistanceUnit'
        description:
          type: string
        type:
          $ref: '#/components/schemas/PricingBundleType'

    PricingBundleUpdate:
      title: PricingBundleUpdate
      type: object
      required:
        - name
        - type
      properties:
        name:
          type: string
        description:
          type: string
        type:
          $ref: '#/components/schemas/PricingBundleType'

    PricingBundleVersionCreate:
      title: PricingBundleVersionCreate
      type: object
      required:
        - label
        - pricingBundleType
      properties:
        label:
          type: string
        pricingBundleType:
          $ref: '#/components/schemas/PricingBundleType'

    PricingBundleVersionUpdate:
      title: PricingBundleVersionUpdate
      type: object
      required:
        - label
        - status
        - pricingBundleType
      properties:
        label:
          type: string
        status:
          $ref: '#/components/schemas/PricingBundleVersionStatus'
        pricingBundleType:
          $ref: '#/components/schemas/PricingBundleType'

    PricingBundleVersionPublish:
      title: PricingBundleVersionPublish
      type: object
      required:
        - effectiveFrom
      properties:
        effectiveFrom:
          type: string
          format: date-time
          description: Future date when the pricing bundle version becomes effective

    ModuleCreationResult:
      title: ModuleCreationResult
      type: object
      properties:
        status:
          enum:
            - SUCCESSFUL
            - PARTIALLY_SUCCESSFUL
            - FAILED
        failed:
          type: array
          items:
            $ref: '#/components/schemas/FailedModule'
        successful:
          type: array
          items:
            type: string
    FailedModule:
      title: FailedModule
      type: object
      properties:
        externalId:
          type: string
        errorCode:
          type: string
        reason:
          type: string
        duplicate:
          type: string
    Rating:
      title: Rating
      type: object
      description: |-
        Each rating attempt for each user is recorded with its own *Rating* entry.

        So if a failed rating is retried a new entry is added rather than the failed overwritten.
      examples:
        - gurn: 'credit-rating::998437df-4ec2-4c04-b47c-219f8a6a7b7b'
          accountGurn: 'user::20bd858d-da25-43f9-b955-57b4123c3a4c'
          accountId: 4142
          ratingStatus: YELLOW
          hitType: LAST_NAME
          approvalType: CRIF
          score: 467
          data:
            checkId: 146938326
            decision: 2
            typeOfHit: 4
            creditScore: 467
            correlationId: 'credit-rating::998437df-4ec2-4c04-b47c-219f8a6a7b7b'
            fraudFilterMatch: [ ]
            customerListEntry: [ ]
          createdAt: '2019-08-24T14:15:22Z'
      properties:
        gurn:
          type: string
          description: Gurn of this rating attempt
        accountGurn:
          type: string
          description: Gurn of the user the rating was requested for
        accountId:
          type: number
          description: Legacy AccountId of the user or userGroup in question.
          example: 4142
        ratingStatus:
          $ref: '#/components/schemas/CreditStatus'
          description: Status of this rating attempt
        hitType:
          type: string
          enum:
            - UNKNOWN
            - EXACT
            - LAST_NAME
            - HOUSEHOLD
            - ADDRESS
            - STREET
            - CITY
            - NONE
          description: Accuracy of the hit. How accurate was the match the rating provider has found?
        approvalType:
          type: string
          description: Which rating provider has created this rating.
          enum:
            - MANUAL
            - CRIF
        score:
          type: integer
          minimum: 0
          maximum: 1000
          description: Integer value from 0 to 1000 denoting the raw credit rating value returned from the provider.
        data:
          type: object
          description: Raw response from the rating provider for compliance and auditing purposes.
        errorMsg:
          type: string
          description: Error message of the error. Only filled if an error actually occured.
        createdBy:
          $ref: '#/components/schemas/GUserSimple'
          type: string
        createdAt:
          type: string
          format: date-time
          description: Time of rating creation
      required:
        - gurn
        - accountGurn
        - accountId
        - ratingStatus
        - hitType
        - approvalType
        - score
        - createdBy
        - createdAt
    ManualRatingRequest:
      title: ManualRatingRequest
      type: object
      description: Manual user credit rating request
      examples:
        - status: YELLOW
          score: 467
      properties:
        status:
          $ref: '#/components/schemas/CreditStatus'
          description: Status of this rating attempt
        score:
          type: integer
          minimum: 0
          maximum: 1000
          description: Integer value from 0 to 1000 denoting the raw credit rating value returned from the provider.
    CreditStatus:
      title: CreditStatus
      type: string
      enum:
        - PENDING
        - GREEN
        - YELLOW
        - RED
        - FAILED
      description: |-
        Credit Rating status of the user.

        * PENDING - There is either not enough information available for this user to attempt a credit rating, or the rating was requested and is currently being processed by the credit provider.
        * GREEN - The rating provider asserted a positive (good) credit state to this user.
        * YELLOW - The rating provider asserted a neutral credit state to this user.
        * RED - The rating provider asserted a negative (bad) credit state to this user.
        * FAILED - Credit rating was attempted but failed due to an system error.
    NotificationChannel:
      properties:
        name:
          type: string
          example: "some sample text here"
        messageSourceKey:
          type: string
          example: "rental.parking.long"
        key:
          type: string
          example: "rental.notification.parking-long"
        fallbacksOnly:
          type: boolean
          example: false
        notificationChannels:
          type: array
          items:
            type: string
            enum:
              - PUSH
              - SMS
              - EMAIL
            example:
              - PUSH
              - SMS
    DocumentVerificationState:
      title: Driving License Verification State
      type: string
      enum:
        - UNVERIFIED
        - CREATED
        - PROCESSING
        - VERIFIED
        - REJECTED
        - RETRY
        - VERIFIED_BUT_NEEDS_CHECK
        - EXPIRED_LICENSE
        - REVIEW
        - PENDING_REVERIFICATION
      description: |-
        - `UNVERIFIED`: No verification has started.
        - `CREATED`: Verification has been initiated.
        - `PROCESSING`: User uploaded data and verification is in progress.
        - `VERIFIED`: User has been verified successfully. User is able to create bookings and rentals. User is able to re-verify its driving license depending on configuration of the system.
        - `REJECTED`: User couldn't be verified.
        - `RETRY`: User needs to try again. User is able to re-verify its driving license.
        - `VERIFIED_BUT_NEEDS_CHECK`: Verification successful but they need additional processing.
        - `EXPIRED_LICENSE`: Document valid until date is before now. User is able to re-verify its driving license.
        - `REVIEW`: Verification needs to be reviewed by customer's team (only active when using fully-automatic mode on Veriff).
        - `PENDING_REVERIFICATION`: User has to reverify his driving license again.
    PriceV4Dto:
      type: object
      x-examples:
        Example 1:
          taxSplit:
            '0':
              tax: 0
              price: { }
              scale: 2
              rebates: { }
              currency: null
              totalNet: 70
              additions:
                INSURANCE:
                  DRIVING: 50
                  PARKING: 0
                  RESERVATION: 0
                  NON_REBATEABLE: 0
                BASIC_INSURANCE:
                  DRIVING: 20
                  PARKING: 0
                  RESERVATION: 0
                  NON_REBATEABLE: 0
              penalties: { }
              surcharges: { }
              totalGross: 70
              taxPercentage: 0
            '10.0000':
              tax: 21.73
              price:
                DRIVING: 229
                PARKING: 0
                RESERVATION: 0
                NON_REBATEABLE: 0
              scale: 2
              rebates: { }
              currency: null
              totalNet: 217.27
              additions:
                HELMET:
                  DRIVING: 10
                  PARKING: 0
                  RESERVATION: 0
                  NON_REBATEABLE: 0
              penalties: { }
              surcharges: { }
              totalGross: 239
              taxPercentage: 10
          totalNet: 287.27
          totalTax: 21.73
          totalGross: 309
      properties:
        taxSplit:
          type: object
          additionalProperties:
            type: object
            properties:
              taxPercentage:
                type: number
                format: double
              priceV3Dto:
                $ref: '#/components/schemas/PriceV3Dto'
        totalNet:
          type: number
        totalTax:
          type: number
        totalGross:
          type: number
    UserSubscription:
      type: object
      properties:
        id:
          type: integer
          format: int64
        subscription:
          $ref: '#/components/schemas/ConstraintVoucherable'
        switchingTarget:
          allOf:
            - $ref: '#/components/schemas/ConstraintVoucherable'
          nullable: true
          description: Pending switch target; populated only while state == SWITCHING.
        boughtAt:
          type: string
          format: date-time
        validUntil:
          type: string
          format: date-time
        autoRenewal:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - FAILED
        canceled:
          type: boolean
        state:
          type: string
          enum:
            - RENEWING
            - EXPIRED
            - SWITCHING
            - SWITCHED
            - CANCELLED
        remainingNumberOfRentals:
          type: integer
          format: int32
        remainingValueNet:
          $ref: '#/components/schemas/BigDecimal'
        remainingValueGross:
          $ref: '#/components/schemas/BigDecimal'
        latestInvoiceId:
          type: integer
          format: int64
          description: ID of the most recent invoice for this subscription
      x-stoplight:
        id: nd9d0iavpvhti
    ThoughtSpotAccessDetails:
      type: object
      properties:
        token:
          type: string
          description: Trusted authentication token for ThoughtSpot
        host:
          type: string
          description: ThoughtSpot instance hostname
        username:
          type: string
          description: ThoughtSpot username used for authentication
        expires_at:
          type: string
          format: date-time
          description: Token expiration timestamp in ISO 8601 format
        validity_seconds:
          type: integer
          format: int32
          description: Token validity duration in seconds
      required:
        - token
        - host
        - username
        - expires_at
        - validity_seconds
    BookingCooldownResponse:
      type: object
      properties:
        startStationCooldown:
          $ref: '#/components/schemas/Duration'
        endStationCooldown:
          $ref: '#/components/schemas/Duration'
      required:
        - startStationCooldown
        - endStationCooldown
    StationCapacityForecast:
      type: object
      title: StationCapacityForecast
      description: Forecasted vehicle capacity for a booking station over a time window, per vehicle category.
      required:
        - bookingStationId
        - capacityByCategory
      properties:
        bookingStationId:
          type: integer
          format: int64
          description: Booking station (branch) identifier
        capacityByCategory:
          type: array
          description: Forecasted capacity per vehicle category. Categories with no planned movements in the window are omitted.
          items:
            $ref: '#/components/schemas/VehicleCategoryCapacityForecast'
    VehicleCategoryCapacityForecast:
      type: object
      title: VehicleCategoryCapacityForecast
      description: Capacity timelines for a single vehicle category at a booking station.
      required:
        - vehicleCategoryId
        - assignedCapacity
        - presentCapacity
        - bookableCapacity
      properties:
        vehicleCategoryId:
          type: integer
          format: int64
        assignedCapacity:
          type: array
          description: Number of vehicles assigned to slots at the station over time (assigned = assigned by the planner, regardless of whether the vehicle is physically present yet).
          items:
            $ref: '#/components/schemas/CapacityTimelinePoint'
        presentCapacity:
          type: array
          description: Number of vehicles physically present at the station over time.
          items:
            $ref: '#/components/schemas/CapacityTimelinePoint'
        bookableCapacity:
          type: array
          description: Number of vehicles that are bookable at the station over time (a subset of present that is not on cooldown).
          items:
            $ref: '#/components/schemas/CapacityTimelinePoint'
    CapacityTimelinePoint:
      type: object
      title: CapacityTimelinePoint
      description: A single change in capacity. The capacity at any moment is the value of the latest change-point whose time is <= that moment.
      required:
        - time
        - capacity
      properties:
        time:
          type: string
          format: date-time
        capacity:
          type: integer
          minimum: 0
  securitySchemes:
    jwtAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
  parameters:
    Tenant:
      name: tenant
      in: path
      required: true
      schema:
        type: string
      description: Tenant unique identifier.
    Authorization:
      name: Authorization
      in: header
      required: false
      schema:
        type: string
        example: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
        pattern: bearer .+
      description: JWT authentication token
security:
  - jwtAuth: [ ]
