openapi: 3.0.0
info:
  title: eBooking API - Apigee
  description: >-
    eBooking API documentation <h2>Authentication & Authorization</h2> <p>You
    will need to be identified before calling any ebooking endpoints. </p> <p>In
    order to be recognized and authorized to access our eBooking API, we put in
    place 2 mechanisms:</p><ul><li>Authentication mechanism is done with an API
    key dedicated to you. <br/>Remember that the API key provided should be
    shared with care.<br/> The API key must be inserted in the header of the
    request in the appropriate field</li><li>Authorization mechanism is done by
    a well-known authorization flow for REST Web API: <strong>“Client
    credentials” OAuth2.0 flow.</strong></li></ul>
  license:
    name: Internal usage only
  version: 2.5.3
servers:
  - url: https://indus.api.euromaster.com
    description: APIGEE UAT
  - url: https://api.euromaster.com
    description: APIGEE PROD
tags:
  - name: timeslots
    description: Time slots for a dedicated centre
  - name: appointments
    description: Appointments management
  - name: services
    description: Services management
  - name: centres
    description: Centres management
  - name: vehicles
    description: Vehicles management
paths:
  /ebooking-erm/v2/centres/{centreCode}/timeslots:
    post:
      description: This endpoint allows to get available slots for a specific centre.
      summary: Get available slots for a dedicated centre
      operationId: getTimeslots
      tags:
        - timeslots
      parameters:
        - in: path
          name: centreCode
          schema:
            $ref: '#/components/schemas/CentreCodeParameterIn'
          required: true
          description: The code of the centre you want to get available slots
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TimeSlotsQueryDTO'
            examples:
              withDates:
                summary: Get timeslots between two future dates
                description: >-
                  Use dateTo and dateFrom fields to define a search interval for
                  timeslots.
                value:
                  dateFrom: '2022-03-15'
                  dateTo: '2022-03-22'
                  services:
                    - serviceCode: S0000418
                      quantity: 2
              withoutDates:
                summary: Without the fields dateFrom and dateTo
                description: >-
                  By omitting the dateFrom and the dateTo fields, the range will
                  begin today, to X days after (defined by configuration).
                value:
                  services:
                    - serviceCode: '1000151984'
                      quantity: 3
              withLicencePlate:
                summary: With licence plate
                description: >-
                  By omitting the dateFrom and the dateTo fields, the range will
                  begin today, to X days after (defined by configuration).
                value:
                  services:
                    - serviceCode: '1000151984'
                      quantity: 3
                  vehicle:
                    licencePlate: AA123BB
      responses:
        '200':
          $ref: '#/components/responses/TimeSlotsResponseDTO'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                wrongDateFromFormat:
                  summary: The dateFrom has wrong format
                  value:
                    errors:
                      - error: Wrong format
                        property: dateFrom
                tooLongField:
                  summary: The field is too long
                  value:
                    errors:
                      - error: 'The field is too long. Max Length: 10'
                        property: centreCode
                missingMandatoryTag:
                  summary: A mandatory tag is missing
                  value:
                    errors:
                      - error: Missing mandatory tag
                        property: centreCode
                invalidServiceForCenter:
                  summary: The center does not provide the service
                  value:
                    errors:
                      - error: 'Center 123 does not offer the service: 12345689'
                        property: serviceCode
                fastBookingCentreCodeInconsistency:
                  summary: Center does not match with tyres location
                  value:
                    errors:
                      - error: Center XXX does not match with tyres location
                        property: centreCode
                fastBookingLicencePlateInconsistency:
                  summary: Missing licence plate with a tyres hotel service
                  value:
                    errors:
                      - error: Missing licence plate
                        property: licencePlate
                fastBookingTooManyTyresLocationServices:
                  summary: Too many tyres location services
                  value:
                    errors:
                      - error: Too many tyres location services
                        property: services
                centerNotActive:
                  summary: The center is not active
                  value:
                    errors:
                      - error: Center XXX is not active
                        property: centreCode
        '401':
          $ref: '#/components/responses/UnauthorizedDTO'
        '404':
          $ref: '#/components/responses/CentreCodeNotFoundDTO'
        '500':
          description: Bad request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/InternalErrorDTO'
                  - $ref: '#/components/schemas/BadRequestDTO'
              examples:
                fastBookingSubServicesInconsistency:
                  summary: 'Internal error : error while retrieving sub-services'
                  value:
                    errors:
                      - error: 'Internal error : error while retrieving sub-services'
                        property: services
                Internal error:
                  summary: An internal error occured
                  value:
                    error: >-
                      An internal error occurred, please try again later. Thank
                      you for your understanding
  /ebooking-erm/v2/appointments:
    post:
      tags:
        - appointments
      summary: Book an appointment in a garage
      description: This endpoint allows to book an appointment in a garage
      operationId: bookAppointment
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingAppointmentQueryDTO'
      responses:
        '202':
          $ref: '#/components/responses/BookingAppointmentResponseDTO'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                wrongDateFromFormat:
                  summary: The dateFrom has wrong format
                  value:
                    errors:
                      - error: Wrong format
                        property: dateFrom
                tooLongField:
                  summary: The field is too long
                  value:
                    errors:
                      - error: 'The field is too long. Max Length: 30'
                        property: centreCode
                missingMandatoryTag:
                  summary: A mandatory tag is missing
                  value:
                    errors:
                      - error: Missing mandatory tag
                        property: centreCode
                unknownCenter:
                  summary: The center is unknown
                  value:
                    errors:
                      - error: Unknown center 239
                        property: centreCode
                centerNotActive:
                  summary: The center is not active
                  value:
                    errors:
                      - error: Center 239 is not active
                        property: centreCode
                unknownService:
                  summary: The service is unknown
                  value:
                    errors:
                      - error: Unknown service
                        property: serviceCode
                invalidServiceForCenter:
                  summary: The center does not provide the service
                  value:
                    errors:
                      - error: 'Center 123 does not offer the service: 12345689'
                        property: serviceCode
                negativeValue:
                  summary: The value is negative
                  value:
                    errors:
                      - error: Negative value provided for front tyre ratio
                        property: tyreDimensions.frontTyre.ratio
                valueNotInRange:
                  summary: The value is not in the range
                  value:
                    errors:
                      - error: >-
                          The front tyre ratio must be lower than or equals to
                          99
                        property: tyreDimensions.frontTyre.ratio
                fastBookingCentreCodeInconsistency:
                  summary: Center does not match with tyres location
                  value:
                    errors:
                      - error: Center XXX does not match with tyres location
                        property: centreCode
                fastBookingTooManyTyresLocationServices:
                  summary: Too many tyres location services
                  value:
                    errors:
                      - error: Too many tyres location services
                        property: services
                askCarLeaseButNoCompanyCode:
                  summary: >-
                    Ask car lease option is set to true in BO but the company
                    code is missing
                  value:
                    errors:
                      - error: Missing company code
                        property: companyCode
                askCarLeaseButUnknownCompanyCode:
                  summary: >-
                    Ask car lease option is set to true in BO but the company
                    code is unknown
                  value:
                    errors:
                      - error: Unknown company code
                        property: companyCode
        '401':
          $ref: '#/components/responses/UnauthorizedDTO'
        '409':
          description: Conflicts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                unavailableSlot:
                  summary: The time slot is not available
                  value:
                    errors:
                      - error: Time slot not available or no longer available
                        property: timeSlot
        '500':
          description: Bad request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/InternalErrorDTO'
                  - $ref: '#/components/schemas/BadRequestDTO'
              examples:
                fastBookingSubServicesInconsistency:
                  summary: 'Internal error : error while retrieving sub-services'
                  value:
                    errors:
                      - error: 'Internal error : error while retrieving sub-services'
                        property: services
                Internal error:
                  summary: An internal error occured
                  value:
                    error: >-
                      An internal error occurred, please try again later. Thank
                      you for your understanding
  /ebooking-erm/v2/appointments/{appointmentCode}:
    patch:
      summary: Update the time slot of an existing appointment.
      description: >-
        This endpoint allows to move the appointment date in the calendar of a
        garage
      tags:
        - appointments
      operationId: updateAppointmentTimeSlot
      parameters:
        - in: path
          name: appointmentCode
          schema:
            $ref: '#/components/schemas/AppointmentCodeParameterIn'
          required: true
          description: >-
            The code you received with the *booking appointment* endpoint. <br/>
            <br/> @See [/appointments](#/appointments/bookAppointment)
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAppointmentQueryDTO'
      responses:
        '200':
          $ref: '#/components/responses/UpdateAppointmentResponseDTO'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                modificationCutOffExpired:
                  summary: Appointment modification cutoff has expired
                  value:
                    errors:
                      - error: Appointment modification cutoff has expired
                        property: appointmentCode
                cancelledAppointment:
                  summary: The appointment has been cancelled, it cannot be moved
                  value:
                    errors:
                      - error: The appointment has been cancelled, it cannot be moved
                        property: appointmentCode
                endedAppointment:
                  summary: The appointment time slot is over, it cannot be moved
                  value:
                    errors:
                      - error: The appointment time slot is over, it cannot be moved
                        property: appointmentCode
                wrongFormatAppointmentCode:
                  summary: The appointment code has a wrong format
                  value:
                    errors:
                      - error: Wrong format
                        property: appointmentCode
                modificationFailedUnknownReason:
                  summary: >-
                    Appointment modification or cancellation failed for unknown
                    reason
                  value:
                    errors:
                      - error: >-
                          Appointment modification or cancellation failed for
                          unknown reason
                        property: unknown
        '401':
          $ref: '#/components/responses/UnauthorizedDTO'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenDTO'
              examples:
                modificationForbidden:
                  summary: Appointment modification is disabled
                  value:
                    errors:
                      - error: Appointment modification is disabled
                        property: appointmentCode
                modificationFailedUnknownReason:
                  summary: >-
                    Appointment modification or cancellation failed for unknown
                    reason
                  value:
                    errors:
                      - error: >-
                          Appointment modification or cancellation failed for
                          unknown reason
                        property: unknown
                appointmentForbidden:
                  summary: Instance is not authorized to access this appointment
                  value:
                    errors:
                      - error: Instance is not authorized to access this appointment
                        property: appointmentCode
        '404':
          $ref: '#/components/responses/AppointmentCodeNotFoundDTO'
        '409':
          description: Conflicts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                unavailableSlot:
                  summary: The time slot is not available
                  value:
                    errors:
                      - error: Time slot not available or no longer available
                        property: timeSlot
        '410':
          description: Gone
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                unknownCenterRelatedToAppointment:
                  summary: The center is unknown
                  value:
                    errors:
                      - error: Unknown center 239
                        property: centreCode
                centerNotActive:
                  summary: The center is not active
                  value:
                    errors:
                      - error: Center 239 is not active
                        property: centreCode
    delete:
      summary: Delete an existing appointment.
      description: >-
        This endpoint allows to delete an existing appointment in the calendar
        of a garage
      tags:
        - appointments
      operationId: deleteAppointment
      parameters:
        - in: path
          name: appointmentCode
          schema:
            $ref: '#/components/schemas/AppointmentCodeParameterIn'
          required: true
          description: >-
            The code you received with the *booking appointment* endpoint. <br/>
            <br/> @See [/appointments](#/appointments/bookAppointment)
      responses:
        '204':
          description: Your appointment has been successfully deleted
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                cancellationCutOffExpired:
                  summary: Appointment cancellation cutoff has expired
                  value:
                    errors:
                      - error: Appointment cancellation cutoff has expired
                        property: appointmentCode
                cancelledAppointment:
                  summary: Appointment already cancelled
                  value:
                    errors:
                      - error: Appointment already cancelled
                        property: appointmentCode
                endedAppointment:
                  summary: The appointment time slot is over, it cannot be deleted
                  value:
                    errors:
                      - error: >-
                          The appointment time slot is over, it cannot be
                          deleted
                        property: appointmentCode
                wrongFormatAppointmentCode:
                  summary: The appointment code has a wrong format
                  value:
                    errors:
                      - error: Wrong format
                        property: appointmentCode
                cancellationFailedUnknownReason:
                  summary: >-
                    Appointment modification or cancellation failed for unknown
                    reason
                  value:
                    errors:
                      - error: >-
                          Appointment modification or cancellation failed for
                          unknown reason
                        property: unknown
        '401':
          $ref: '#/components/responses/UnauthorizedDTO'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenDTO'
              examples:
                cancellationForbidden:
                  summary: Appointment cancellation is disabled
                  value:
                    errors:
                      - error: Appointment cancellation is disabled
                        property: appointmentCode
                cancellationFailedUnknownReason:
                  summary: >-
                    Appointment modification or cancellation failed for unknown
                    reason
                  value:
                    errors:
                      - error: >-
                          Appointment modification or cancellation failed for
                          unknown reason
                        property: unknown
                appointmentForbidden:
                  summary: Instance is not authorized to access this appointment
                  value:
                    errors:
                      - error: Instance is not authorized to access this appointment
                        property: appointmentCode
        '404':
          $ref: '#/components/responses/AppointmentCodeNotFoundDTO'
        '410':
          description: Gone
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                unknownCenterRelatedToAppointment:
                  summary: The center is unknown
                  value:
                    errors:
                      - error: Unknown center 239
                        property: centreCode
                centerNotActive:
                  summary: The center is not active
                  value:
                    errors:
                      - error: Center 239 is not active
                        property: centreCode
  /ebooking-erm/v2/appointments/{appointmentCode}/status:
    get:
      summary: Get the status of an appointment.
      description: This endpoint allows to retrieve the status of an appointment
      tags:
        - appointments
      operationId: getAppointmentStatus
      parameters:
        - in: path
          name: appointmentCode
          schema:
            $ref: '#/components/schemas/AppointmentCodeParameterIn'
          required: true
          description: >-
            The code you received with the *booking appointment* endpoint. <br/>
            <br/> @See [/appointments](#/appointments/bookAppointment)
      responses:
        '200':
          $ref: '#/components/responses/GetAppointmentStatusResponseDTO'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                wrongFormatAppointmentCode:
                  summary: The appointment code has a wrong format
                  value:
                    errors:
                      - error: Wrong format
                        property: appointmentCode
        '401':
          $ref: '#/components/responses/UnauthorizedDTO'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenDTO'
              examples:
                appointmentForbidden:
                  summary: Instance is not authorized to access this appointment
                  value:
                    errors:
                      - error: Instance is not authorized to access this appointment
                        property: appointmentCode
        '404':
          $ref: '#/components/responses/AppointmentCodeNotFoundDTO'
        '410':
          description: Gone
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                unknownCenterRelatedToAppointment:
                  summary: The center is unknown
                  value:
                    errors:
                      - error: Unknown center 239
                        property: centreCode
                centerNotActive:
                  summary: The center is not active
                  value:
                    errors:
                      - error: Center 239 is not active
                        property: centreCode
  /ebooking-erm/v2/services/{serviceCode}/first-availabilities:
    get:
      summary: >-
        Get the first availability for a defined service for 10 centers max
        simultaneously
      description: >-
        This endpoint allows to get the first availability for a defined service
        with a defined quantity for 10 centers max simultaneously
      tags:
        - services
      operationId: getFirstAvailabilities
      parameters:
        - in: path
          name: serviceCode
          schema:
            $ref: '#/components/schemas/ServiceCodeParameterIn'
          required: true
          description: The code of the service you want to get first availability
        - in: query
          name: centres
          schema:
            $ref: '#/components/schemas/CentreCodeListQueryParameter'
          required: true
          description: List of centers delimited by , that need to be considered for filter
        - in: query
          name: quantity
          schema:
            $ref: '#/components/schemas/QuantityQueryParameter'
          required: true
          description: Quantity of service that need to be considered for filter
        - in: query
          name: licencePlate
          schema:
            $ref: '#/components/schemas/LicencePlateQueryParameter'
          required: false
          description: Licence plate of the vehicle
        - in: query
          name: dateFrom
          schema:
            $ref: '#/components/schemas/DateFromQueryParameter'
          required: false
          description: Date from which we compute the firstAvailabilities
      responses:
        '200':
          $ref: '#/components/responses/GetFirstAvailabilitiesResponseDTO'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                missingMandatoryTag:
                  summary: A mandatory tag is missing
                  value:
                    errors:
                      - error: Missing mandatory tag
                        property: centres
                tooLongCentres:
                  summary: Too many centres
                  value:
                    errors:
                      - error: 'The field is too long. Max length: 10'
                        property: centres
                quantityNotInRange:
                  summary: The quantity requested is not in the range
                  value:
                    errors:
                      - error: The quantity must be between 1 and 10
                        property: quantity
                invalidServiceForCenter:
                  summary: The center does not provide the service
                  value:
                    errors:
                      - error: 'Center 123 does not offer the service: 12345689'
                        property: serviceCode
                fastBookingCentreCodeInconsistency:
                  summary: Center does not match with tyres location
                  value:
                    errors:
                      - error: Center XXX does not match with tyres location
                        property: centreCode
                fastBookingLicencePlateInconsistency:
                  summary: Missing licence plate with a tyres hotel service
                  value:
                    errors:
                      - error: Missing licence plate
                        property: licencePlate
        '404':
          $ref: '#/components/responses/ServiceCodeNotFoundDTO'
        '500':
          description: Bad request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/InternalErrorDTO'
                  - $ref: '#/components/schemas/BadRequestDTO'
              examples:
                fastBookingSubServicesInconsistency:
                  summary: 'Internal error : error while retrieving sub-services'
                  value:
                    errors:
                      - error: 'Internal error : error while retrieving sub-services'
                        property: services
                Internal error:
                  summary: An internal error occured
                  value:
                    error: >-
                      An internal error occurred, please try again later. Thank
                      you for your understanding
  /ebooking-erm/v2/services:
    get:
      summary: Get the list of services available
      description: >-
        This endpoint allows to get the list of services available in an
        instance
      tags:
        - services
      operationId: getServices
      responses:
        '200':
          $ref: '#/components/responses/GetServicesResponseDTO'
  /ebooking-erm/v2/centres:
    get:
      summary: Get the list of centres available
      description: This endpoint allows to get the list of centres available in an instance
      tags:
        - centres
      operationId: getCentres
      responses:
        '200':
          $ref: '#/components/responses/GetCentresResponseDTO'
  /ebooking-erm/v2/tyres-location:
    get:
      summary: Get the list of tyre location
      description: This endpoint allows to get all of the tyre location
      tags:
        - vehicles
      operationId: getTyresLocation
      parameters:
        - in: query
          name: centreCode
          schema:
            $ref: '#/components/schemas/CentreCodeQueryParameter'
          required: false
          description: Center code
        - in: query
          name: pageNumber
          schema:
            $ref: '#/components/schemas/PageNumberQueryParameter'
          required: true
          description: The page number
        - in: query
          name: pageSize
          schema:
            $ref: '#/components/schemas/PageSizeQueryParameter'
          required: true
          description: The page size
      responses:
        '200':
          $ref: '#/components/responses/TyresLocationsResponseDTO'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                wrongDateFromFormat:
                  summary: The dateFrom has wrong format
                  value:
                    errors:
                      - error: Wrong format
                        property: dateFrom
                centerNotActive:
                  summary: The center is not active
                  value:
                    errors:
                      - error: Center 239 is not active
                        property: centreCode
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundDTO'
              examples:
                InvalidPageNumber:
                  summary: Invalid page number
                  value:
                    errors:
                      - error: The pageNumber must be between 1 and 10
                        property: pageNumber
                invalidCentreCode:
                  summary: The CentreCode cannot be found
                  value:
                    errors:
                      - error: Unknown center XXABCXX
                        property: centreCode
  /ebooking-erm/v2/vehicles/{licencePlate}/tyres-location:
    get:
      summary: Get the list of tyre location for a licence plate
      description: This endpoint allows to get the tyre location regarding a licence plate
      tags:
        - vehicles
      operationId: getTyresLocationByLicencePlate
      parameters:
        - in: path
          name: licencePlate
          schema:
            $ref: '#/components/schemas/LicencePlateParameterIn'
          required: true
          description: Registration number of the vehicle
      responses:
        '200':
          $ref: '#/components/responses/TyresLocationResponseDTO'
        '404':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestDTO'
              examples:
                wrongDateFromFormat:
                  summary: Unknown licence plate
                  value:
                    errors:
                      - error: The licence plate is unknown
                        property: licencePlate
security:
  - OAuth2: []
    ApiKeyAuth: []
components:
  securitySchemes:
    OAuth2:
      type: oauth2
      flows: {}
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-Gateway-APIKey
  schemas:
    BookingAppointmentQueryDTO:
      type: object
      additionalProperties: false
      properties:
        centreCode:
          type: string
          example: A333
          maxLength: 30
          description: Code of the centre in which you want to book an appointment
        timeSlot:
          type: string
          pattern: ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})T([01][0-9]|2[0-3]):([0-5][0-9])$
          description: >-
            Booking date: one of the time slots offered in the timeslots end
            point. 
             Required format: 
             YYYY-MM-DDThh:mm 

             Example of accepted values: 
            2021-06-18T10:00

            2021-06-18T10:00
          example: 2021-03-18T10:00
          maxLength: 16
        externalCode:
          type: string
          maxLength: 30
          description: >-
            External identifier belonging to the consumer and linked to the
            reservation (can ease tracking)
          example: my-external-code_AB123
        comments:
          type: string
          maxLength: 2000
          description: Comments entered when making an appointment
          example: Front tyre and rear tyre must be reversed
        services:
          type: array
          minItems: 1
          maxItems: 50
          items:
            type: object
            additionalProperties: false
            properties:
              serviceCode:
                type: string
                maxLength: 30
                description: Service code from the list (refer to services list)
                nullable: false
              quantity:
                type: integer
                format: int64
                example: '2'
                minimum: 1
                maximum: 10
                description: Quantity of the requested service
            required:
              - serviceCode
              - quantity
        driver:
          type: object
          description: The driver informations
          additionalProperties: false
          properties:
            firstName:
              type: string
              maxLength: 30
              description: Driver's first name
              example: John
            lastName:
              type: string
              maxLength: 50
              description: Driver's last name
              example: Doe
            mobilePhone:
              type: string
              maxLength: 20
              pattern: ^[+0-9][0-9- ]{8,19}$
              format: mobilePhone
              description: Driver's phone number
              example: '+33602030405'
            email:
              type: string
              format: email
              pattern: ^[^|]*$
              maxLength: 70
              description: Driver's email
              example: john@doe.com
            optIn:
              type: boolean
              description: Consent to receive marketing information
              nullable: true
          required:
            - lastName
            - mobilePhone
            - email
        vehicle:
          type: object
          description: The vehicle
          additionalProperties: false
          properties:
            licencePlate:
              type: string
              maxLength: 20
              description: Registration number of the vehicle
              example: AA123BB
            make:
              type: string
              maxLength: 20
              description: Make of the vehicle
              example: Renault
            model:
              type: string
              maxLength: 50
              description: Model of the vehicle
              example: Clio
            year:
              type: string
              format: year
              maxLength: 4
              description: Year of manufacturing
              example: '2016'
            mileage:
              type: string
              pattern: ^\d+$
              maxLength: 6
              description: Mileage of the vehicle
              example: '10001'
            identificationNumber:
              type: string
              maxLength: 20
              description: Corresponding to VIN or meldCode according on country
            companyCode:
              type: string
              maxLength: 20
              description: >-
                Company code, is mandatory if "Ask car lease" option is set to
                true in BO. If option is set to false, no verification are
                done.<br/>It will be used to retrieve lease company by using
                companyCode and subCompanyCode from declared couples in BO
                Instance and car lease companies data.<br/>If no lease company
                are found with this couple, we will search again and use only
                companyCode.<br/>An error message will be raised if no company
                are found by doing these both search.<br/>When a matching lease
                company is found, we will retrieve the commercial code related
                to it (also declared in BO in same interface),<br/>and we will
                send it during Focus LY/GW worksheet process and fill the
                commercial customer code field.
            subCompanyCode:
              type: string
              maxLength: 20
              description: >-
                Sub company code, can be set if "Ask car lease" option is set to
                true in BO.<br/>It will be used to retrieve lease company by
                using companyCode and subCompanyCode.
          required:
            - licencePlate
        tyreDimensions:
          type: object
          description: The tyre dimensions
          additionalProperties: false
          properties:
            frontTyre:
              description: Front tyre dimensions
              $ref: '#/components/schemas/TyreDimensionDTO'
            rearTyre:
              description: Rear tyre dimensions
              $ref: '#/components/schemas/TyreDimensionDTO'
      required:
        - centreCode
        - timeSlot
        - services
        - driver
        - vehicle
    TyreDimensionDTO:
      type: object
      additionalProperties: false
      properties:
        brand:
          type: string
          maxLength: 30
          description: Brand of the tyre
          example: MICHELIN
        model:
          type: string
          maxLength: 50
          description: Model of the tyre
          example: PILOT SPORT 5 XL
        width:
          type: string
          maxLength: 4
          description: Width of the tyre
          example: '225'
        ratio:
          type: integer
          format: int32
          minimum: 0
          maximum: 99
          description: Ratio of the tyre
          example: '45'
        rim:
          type: string
          maxLength: 3
          description: Rim of the tyre
          example: '17'
        loadIndex:
          type: integer
          format: int32
          minimum: 0
          maximum: 999
          description: Load index of the tyre
          example: '91'
        speedIndex:
          type: string
          maxLength: 1
          description: Speed index of the tyre
          example: V
      required:
        - width
        - ratio
        - rim
    TimeSlotsQueryDTO:
      type: object
      properties:
        dateFrom:
          type: string
          format: date
          description: |-
            Date from which the time slots will be searched.
             *dateFrom* property is optional.
             If dateFrom property is not set: *dateFrom* will be equal to the current date.
             Required format: YYYY-MM-DD
        dateTo:
          type: string
          format: date
          description: |-
            Date until which slots will be searched.
             *dateTo* property is optional. 
             If *dateTo* property is not set, a maximum of 21 days of available time slots will be sent in the response. 
             We recommend that you limit the search interval as much as possible for good performance (7 days might be a good compromise)
             Required format: YYYY-MM-DD 
             The dateTo must be greater than the dateFrom, otherwise an error will occur.
        services:
          type: array
          minItems: 1
          maxItems: 50
          items:
            type: object
            additionalProperties: false
            properties:
              serviceCode:
                type: string
                format: string
                example: '1000151984'
                maxLength: 30
                description: 'Service code from the list (refer to services list) '
              quantity:
                type: integer
                format: int32
                example: '2'
                minimum: 1
                maximum: 10
                description: Quantity of the requested service
            required:
              - serviceCode
              - quantity
        vehicle:
          type: object
          description: The vehicle
          additionalProperties: false
          properties:
            licencePlate:
              type: string
              maxLength: 20
              description: Registration number of the vehicle
              example: AA123BB
          required:
            - licencePlate
      required:
        - services
      additionalProperties: false
    ErrorDetailDTO:
      type: object
      properties:
        error:
          type: string
          format: string
          maxLength: 2000
          description: Error message
        property:
          type: string
          format: string
          maxLength: 50
          description: The name of the field affected by the error
    BadRequestDTO:
      type: object
      additionalProperties: false
      properties:
        errors:
          type: array
          minItems: 1
          maxItems: 20
          items:
            $ref: '#/components/schemas/ErrorDetailDTO'
    ForbiddenDTO:
      type: object
      properties:
        errors:
          type: array
          minItems: 1
          maxItems: 20
          items:
            $ref: '#/components/schemas/ErrorDetailDTO'
      additionalProperties: false
    GetAppointmentStatusResponseDTO:
      type: object
      additionalProperties: false
      properties:
        status:
          type: string
          enum:
            - CONFIRMED
            - CANCELLED
            - ENDED
            - PENDING
            - REJECTED
          description: >-
            The Appointment Status you have queried <br/><strong>Status
            values</strong><ul><li><strong>CONFIRMED:</strong> booking
            confirmed, appointment is registered in the calendar of the
            garage</li><li><strong>CANCELLED:</strong> booking cancelled by you
            or the centre.</li><li><strong>ENDED:</strong> booking time slot is
            over</li><li><strong>PENDING:</strong> The appointment is waiting to
            be validated by calendar</li><li><strong>REJECTED:</strong> The
            appointment has been rejected by calendar</li></ul>
          example: CONFIRMED
        description:
          type: string
          maxLength: 2000
          description: More details about the Appointment Status
        timeSlot:
          type: string
          pattern: ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})T([01][0-9]|2[0-3]):([0-5][0-9])$
          description: The start time of the time slot
          example: 2021-05-31T08:30
          maxLength: 16
        updatableUntil:
          type: string
          pattern: >-
            ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$
          description: Date until which the appointment can be updated
          example: '2021-05-31T11:30:00'
          maxLength: 10
        cancelableUntil:
          type: string
          pattern: >-
            ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$
          description: Date until which the appointment can be canceled
          example: '2021-05-31T11:30:00'
          maxLength: 10
    UpdateAppointmentResponseDTO:
      type: object
      additionalProperties: false
      properties:
        status:
          type: string
          enum:
            - CONFIRMED
          description: The Appointment Status you have updated.
          example: CONFIRMED
        description:
          type: string
          description: More details about the Appointment Status
          maxLength: 2000
        timeSlot:
          type: string
          pattern: ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})T([01][0-9]|2[0-3]):([0-5][0-9])$
          description: The start time of the time slot
          example: 2021-05-31T08:30
          maxLength: 16
    BookingAppointmentResponseDTO:
      type: object
      additionalProperties: false
      properties:
        appointmentCode:
          type: string
          maxLength: 50
          description: Code corresponding to the appointment you have just created
          example: '2021061413121681887'
        updatableUntil:
          type: string
          pattern: ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})$
          maxLength: 10
          description: Date until which the appointment can be updated
          example: '2021-05-31'
        cancelableUntil:
          type: string
          pattern: ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})$
          maxLength: 10
          description: Date until which the appointment can be canceled
          example: '2021-05-31'
    TimeslotsSearchLimitDto:
      type: object
      additionalProperties: false
      properties:
        dateFrom:
          type: string
          pattern: ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})$
          maxLength: 10
          description: Date from which the time slots will be searched
          example: '2021-05-31'
        dateTo:
          type: string
          pattern: ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})$
          maxLength: 10
          description: Date to which the time slots will be searched
          example: '2021-06-15'
    TimeSlotsResponseDTO:
      type: object
      additionalProperties: false
      properties:
        searchLimit:
          type: object
          additionalProperties: false
          properties:
            current:
              $ref: '#/components/schemas/TimeslotsSearchLimitDto'
            next:
              $ref: '#/components/schemas/TimeslotsSearchLimitDto'
        servicesDuration:
          type: integer
          format: int64
          example: 60
          minimum: 0
          maximum: 1440
          description: >-
            The total services duration. That will be clamped between 0 and the
            max duration of services for a Bay (internally defined).
        timeSlots:
          type: array
          maxItems: 1000
          items:
            type: object
            additionalProperties: false
            properties:
              startTime:
                type: string
                pattern: >-
                  ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})T([01][0-9]|2[0-3]):([0-5][0-9])$
                description: The start time of the time slot
                maxLength: 16
                example: 2021-05-31T08:30
      required:
        - serviceDuration
        - timeSlots
        - searchLimit
    InternalErrorDTO:
      type: object
      additionalProperties: false
      properties:
        error:
          type: string
          maxLength: 2000
          example: Unexpected error while saving the appointment
    UnauthorizedDTO:
      type: object
      properties:
        errors:
          type: array
          minItems: 1
          maxItems: 20
          items:
            $ref: '#/components/schemas/ErrorDetailDTO'
      additionalProperties: false
    ResourceNotFoundDTO:
      type: object
      properties:
        errors:
          type: array
          minItems: 1
          maxItems: 20
          items:
            type: object
            additionalProperties: false
            properties:
              error:
                type: string
                format: string
                maxLength: 2000
                description: Error message
              property:
                type: string
                format: string
                maxLength: 50
                description: The name of the parameter affected by the error
      additionalProperties: false
    CentreCodeParameterIn:
      type: string
      example: A333
      maxLength: 30
      description: Code of the centre in which you want to book an appointment
    AppointmentCodeParameterIn:
      type: integer
      format: int64
      example: '123456'
      minimum: 0
      maximum: 999999999
      description: Code of the appointment you want to update or delete
    ServiceCodeParameterIn:
      type: string
      format: string
      maxLength: 30
      description: Service code from the list (refer to services list)
      example: '1000151984'
    LicencePlateParameterIn:
      type: string
      format: string
      maxLength: 20
      description: Registration number of the vehicle
      example: AA123BB
    CentreCodeListQueryParameter:
      type: array
      description: List of centers delimited by ,
      minItems: 1
      maxItems: 10
      example: A333,A332
      items:
        type: string
        maxLength: 30
    QuantityQueryParameter:
      type: integer
      format: int64
      example: '2'
      minimum: 1
      maximum: 10
      description: Quantity of the requested service
    LicencePlateQueryParameter:
      type: string
      format: string
      maxLength: 20
      description: Registration number of the vehicle
      example: AA123BB
    PageNumberQueryParameter:
      type: integer
      format: int32
      example: '2'
      maximum: 1000
      description: The number of page requested, minimum 1
    PageSizeQueryParameter:
      type: integer
      format: int32
      example: '2'
      minimum: 1
      maximum: 1000
      description: The size of the page
    CentreCodeQueryParameter:
      type: string
      format: string
      example: A0006
      maxLength: 30
      description: The center code
    UpdateAppointmentQueryDTO:
      type: object
      properties:
        timeSlot:
          type: string
          pattern: ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})T([01][0-9]|2[0-3]):([0-5][0-9])$
          description: >-
            Booking date: one of the time slots offered in the timeslots end
            point. 
             Required format: 
             YYYY-MM-DDThh:mm 

             Example of accepted values: 
            2021-06-18T10:00

            2021-06-18T10:00
          maxLength: 16
          example: 2021-03-18T10:00
      required:
        - timeSlot
      additionalProperties: false
    GetFirstAvailabilitiesResponseDTO:
      type: object
      additionalProperties: false
      properties:
        serviceAvailability:
          type: array
          maxItems: 10
          items:
            type: object
            additionalProperties: false
            properties:
              centreCode:
                type: string
                format: string
                maxLength: 30
                example: A333
                description: Centre code
              firstAvailability:
                type: string
                pattern: ^([0-9]{4})-(?:[0-9]{2})-([0-9]{2})$
                description: |-
                  First date for the center. 
                   Required format: 
                   YYYY-MM-DD 

                   Example of accepted values: 
                  2021-06-18
                  2021-06-18
                maxLength: 10
                example: '2021-03-18'
        errors:
          type: array
          maxItems: 10
          items:
            $ref: '#/components/schemas/ErrorDetailDTO'
    GetServicesResponseDTO:
      type: object
      additionalProperties: false
      properties:
        services:
          type: array
          maxItems: 50
          items:
            type: object
            additionalProperties: false
            properties:
              serviceCode:
                type: string
                maxLength: 30
                description: Service code
                nullable: false
              description:
                type: string
                maxLength: 2000
                description: The service description
                nullable: false
              isTyreHotel:
                type: boolean
                description: If the service is a tyre hotel service
                nullable: false
              price:
                type: number
                format: float
                example: '10.99'
                minimum: 0
                maximum: 1000
                description: Non-exhaustive price indication
    GetCentresResponseDTO:
      type: object
      additionalProperties: false
      properties:
        centres:
          type: array
          maxItems: 1000
          items:
            type: object
            additionalProperties: false
            properties:
              centreCode:
                type: string
                example: A333
                maxLength: 30
                description: Code of the centre
              name:
                type: string
                maxLength: 50
                example: Euromaster SERVICE
                description: Name of the centre
              address1:
                type: string
                maxLength: 2000
                example: Unit 1, Pony Road
                description: Address of the centre
              address2:
                type: string
                example: Cowley
                maxLength: 2000
                description: Additional address of the centre
              postalCode:
                type: string
                example: 31-983
                maxLength: 50
                description: Postal code of the centre
              city:
                type: string
                example: Kraków
                maxLength: 50
                description: City of the centre
              phoneNumber:
                type: string
                example: 06 89 75 48 69
                maxLength: 50
                description: Phone number of the centre
              faxNumber:
                type: string
                example: 555-123-4567
                maxLength: 50
                description: Fax number of the centre
              mail:
                type: string
                example: name@mail.com
                maxLength: 1000
                description: Mail of the centre
              latitude:
                type: string
                example: '47.01878'
                maxLength: 50
                description: Latitude of the centre
              longitude:
                type: string
                example: '4.8575'
                maxLength: 50
                description: Longitude of the centre
              googlePlaceId:
                type: string
                example: ChIJD9YcoZEb90cRmXDp8EhtANs
                maxLength: 50
                description: Google place id of the centre
              services:
                type: array
                maxItems: 50
                items:
                  type: object
                  additionalProperties: false
                  properties:
                    serviceCode:
                      type: string
                      maxLength: 30
                      description: Service code
                      nullable: false
              workingDay:
                type: array
                maxItems: 10
                items:
                  type: object
                  additionalProperties: false
                  properties:
                    day:
                      type: string
                      maxLength: 30
                      description: Day of week
                      nullable: false
                    openingHour:
                      type: array
                      maxItems: 10
                      items:
                        type: object
                        additionalProperties: false
                        properties:
                          start:
                            type: string
                            maxLength: 10
                            description: Start time of slot
                            nullable: false
                          end:
                            type: string
                            maxLength: 10
                            description: End time of slot
                            nullable: false
              nonWorkingDay:
                type: array
                maxItems: 10
                items:
                  type: object
                  additionalProperties: false
                  properties:
                    start:
                      type: string
                      maxLength: 10
                      description: Start time of unavailability
                      nullable: false
                    end:
                      type: string
                      maxLength: 10
                      description: End time of unavailability
                      nullable: false
                    message:
                      type: string
                      maxLength: 30
                      description: Message for this unavailability
                      nullable: true
    PaginationDTO:
      type: object
      additionalProperties: false
      properties:
        next:
          type: string
          maxLength: 200
          description: Url for next page
          example: /ebooking-erm/v2/tyres-location?page=3&size=50&centreCode=A006
        previous:
          type: string
          maxLength: 200
          description: Url for previous page
          example: /ebooking-erm/v2/tyres-location?page=1&size=50&centreCode=A006
        pageTotal:
          type: integer
          format: int64
          example: '2'
          minimum: 0
          maximum: 1000
          description: Number total of page available
        totalElements:
          type: integer
          format: int64
          example: '200'
          minimum: 0
          maximum: 10000
          description: Number total of elements available
    TyresLocationDTO:
      type: object
      additionalProperties: false
      properties:
        licencePlate:
          type: string
          maxLength: 20
          description: Registration number of the vehicle
          example: AA123BB
        centreCode:
          type: string
          example: A333
          maxLength: 30
          description: Code of the centre
    TyresLocationsResponseDTO:
      type: object
      additionalProperties: false
      properties:
        pagination:
          description: Pagination informations
          $ref: '#/components/schemas/PaginationDTO'
        tyresLocations:
          type: array
          maxItems: 1000
          items:
            description: Pagination informations
            $ref: '#/components/schemas/TyresLocationDTO'
    DateFromQueryParameter:
      type: string
      format: date
      description: Date from which we compute the firstAvailabilities
      example: '2023-05-18'
  responses:
    UnauthorizedDTO:
      description: The requester is not recognized by our system.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UnauthorizedDTO'
          examples:
            Wrong API key:
              summary: The API key is wrong
              value:
                errors:
                  - error: Unknown API key, please contact our API service support
                    property: x-Gateway-APIKey
            Missing API key:
              summary: The API key is missing
              value:
                errors:
                  - error: The API key is missings
                    property: x-Gateway-APIKey
            Bad credentials:
              summary: The credentials are wrong
              value:
                errors:
                  - error: The credentials are wrong
                    property: Authorization
            Missing credentials:
              summary: The credentials are missing
              value:
                errors:
                  - error: The credentials are missing
                    property: Authorization
    CentreCodeNotFoundDTO:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ResourceNotFoundDTO'
          examples:
            invalidCentreCode:
              summary: The CentreCode cannot be found
              value:
                errors:
                  - error: The centre code XXABCXX cannot be found
                    property: centreCode
    AppointmentCodeNotFoundDTO:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ResourceNotFoundDTO'
          examples:
            invalidAppointmentCode:
              summary: The appointment code cannot be found
              value:
                errors:
                  - error: The appointment code XXABCXX cannot be found
                    property: appointmentCode
    ServiceCodeNotFoundDTO:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ResourceNotFoundDTO'
          examples:
            invalidAppointmentCode:
              summary: The service code cannot be found
              value:
                errors:
                  - error: Unknown service
                    property: serviceCode
    TimeSlotsResponseDTO:
      description: The available timeSlots
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TimeSlotsResponseDTO'
          examples:
            lambdaResponse:
              summary: ''
              value:
                searchLimit:
                  current:
                    dateFrom: '2023-10-25'
                    dateTo: '2023-11-15'
                  next:
                    dateFrom: '2023-11-16'
                    dateTo: '2023-12-25'
                servicesDuration: 60
                timeSlots:
                  - startTime: 2022-10-04T08:00
                  - startTime: 2022-10-04T08:30
                  - startTime: 2022-10-04T09:00
            noTimeslotsAvailable:
              summary: No Timeslots available
              value:
                searchLimit:
                  current:
                    dateFrom: '2023-10-25'
                    dateTo: '2023-11-15'
                  next:
                    dateFrom: '2023-11-16'
                    dateTo: '2023-12-25'
                servicesDuration: 0
                timeSlots: []
    BookingAppointmentResponseDTO:
      description: The appointment booked and confirmed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BookingAppointmentResponseDTO'
      links:
        getAppointmentStatusWithCode:
          description: The appointmentCode can be used to get its status
          operationId: getAppointmentStatus
          parameters:
            appointmentCode: $response.body#/appointmentCode/
        updateAppointmentWithCode:
          description: The appointmentCode can be used to update timeslot of appointment
          operationId: updateAppointmentTimeSlot
          parameters:
            appointmentCode: $response.body#/appointmentCode/
        deleteAppointmentWithCode:
          description: The appointmentCode can be used to cancel appointment
          operationId: deleteAppointment
          parameters:
            appointmentCode: $response.body#/appointmentCode/
    GetAppointmentStatusResponseDTO:
      description: The appointment status
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GetAppointmentStatusResponseDTO'
          examples:
            CONFIRMED:
              summary: The appointment request has been confirmed
              value:
                status: CONFIRMED
                description: Booking confirmed
                timeSlot: '2021-05-31T08:30:00'
                updatableUntil: '2021-05-30T08:30:00'
                cancelableUntil: '2021-05-30T08:30:00'
            CANCELLED:
              summary: The appointment request has been cancelled
              value:
                status: CANCELLED
                description: Appointment has been cancelled
                timeSlot: '2021-05-31T08:30:00'
                updatableUntil: '2021-05-30T08:30:00'
                cancelableUntil: '2021-05-30T08:30:00'
            ENDED:
              summary: The appointment is over now
              value:
                status: ENDED
                description: Appointment is over
                timeSlot: '2021-05-31T08:30:00'
                updatableUntil: '2021-05-30T08:30:00'
                cancelableUntil: '2021-05-30T08:30:00'
            PENDING:
              summary: The appointment is pending
              value:
                status: PENDING
                description: Appointment pending
                timeSlot: '2021-05-31T08:30:00'
                updatableUntil: '2021-05-30T08:30:00'
                cancelableUntil: '2021-05-30T08:30:00'
            REJECTED:
              summary: The appointment is rejected
              value:
                status: REJECTED
                description: Appointment rejected
                timeSlot: '2021-05-31T08:30:00'
                updatableUntil: '2021-05-30T08:30:00'
                cancelableUntil: '2021-05-30T08:30:00'
    UpdateAppointmentResponseDTO:
      description: The appointment status after having updated it
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UpdateAppointmentResponseDTO'
          examples:
            CONFIRMED:
              summary: The appointment update request has been confirmed
              value:
                status: CONFIRMED
                description: Booking confirmed
                timeSlot: 2021-05-31T08:30
    GetFirstAvailabilitiesResponseDTO:
      description: First availabilities
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GetFirstAvailabilitiesResponseDTO'
          examples:
            firstAvailabilities:
              summary: >-
                First availabilities successfully retrieved for all given
                centres
              value:
                serviceAvailability:
                  - centreCode: '636'
                    firstAvailability: '2022-04-13'
                  - centreCode: '492'
                    firstAvailability: '2022-04-12'
                  - centreCode: '299'
                    firstAvailability: '2022-04-11'
                errors: []
            firstAvailabilitiesWithErrors:
              summary: >-
                First availabilities retrieved for some given centres, KO for
                others
              value:
                serviceAvailability:
                  - centreCode: '636'
                    firstAvailability: '2022-04-13'
                  - centreCode: '492'
                    firstAvailability: '2022-04-12'
                errors:
                  - error: Unknown center 299
                    property: centreCode
                  - error: Center 299 is not active
                    property: centreCode
                  - error: 'No available calendar related to: 299'
                    property: null
                  - error: No available slot for center 976 and service 2050000055
                    property: null
    GetServicesResponseDTO:
      description: Get services
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GetServicesResponseDTO'
          examples:
            getServices:
              summary: Get services
              value:
                services:
                  - serviceCode: '1000151984'
                    description: the service description
                    isTyreHotel: true
                    price: 12.55
                  - serviceCode: '1000151985'
                    description: the service description
                    isTyreHotel: false
                    price: null
    GetCentresResponseDTO:
      description: Get centres
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GetCentresResponseDTO'
          examples:
            getCentres:
              summary: Get centres
              value:
                centres:
                  - centreCode: A006
                    name: Euromaster SERVICE
                    address1: Nadbrzezie 2
                    postalCode: 31-983
                    city: Kraków
                    phoneNumber: 06 89 75 48 69
                    faxNumber: 555-123-4567
                    mail: name@mail.com
                    latitude: '47.01878'
                    longitude: '4.8575'
                    googlePlaceId: ChIJD9YcoZEb90cRmXDp8EhtANs
                    services:
                      - serviceCode: '1000151984'
                      - serviceCode: '1000151985'
    TyresLocationsResponseDTO:
      description: Get tyre location
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TyresLocationsResponseDTO'
          examples:
            tyresLocation:
              summary: Tyres locations
              value:
                pagination:
                  next: >-
                    /ebooking-erm/v2/tyres-location?page=3&size=50&centreCode=A006
                  previous: >-
                    /ebooking-erm/v2/tyres-location?page=1&size=50&centreCode=A006
                  pageTotal: 20
                  total: 437
                tyresLocations:
                  - licencePlate: AA123BB
                    centreCode: A006
                  - licencePlate: AA456BB
                    centreCode: A026
    TyresLocationResponseDTO:
      description: Get tyre location
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TyresLocationDTO'
          examples:
            tyresLocation:
              summary: Tyres locations
              value:
                licencePlate: AA123BB
                centreCode: A006
