openapi: 3.0.3
info:
  title: Lochting API
  version: 1.0.0
  contact:
    name: Lochting Support
    url: https://www.lochting.com/en/contact/
  description: >-
    Programmatic access to orders, customers, reservations, shipments, stock,
    prices, and webhooks on the Lochting platform. See
    [Getting started](/getting-started) to choose an environment and make your
    first request.
servers:
  -
    url: https://api.lochting.com/public/v1
    description: Live
paths:
  /get-token:
    post:
      summary: Access Token
      operationId: getToken
      description: >-
        This endpoint returns an access token and refresh token for use in subsequent
        authenticated requests.


        Add the access token in the `Authorization` header of each request. You may
        pass the token directly or prefix it with `Bearer `. See
        [Authentication](/authentication) for details and examples.


        :::note

        To obtain an API key, please [contact us](https://www.lochting.com/en/contact/).

        :::
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Token'
        '400':
          description: Bad Request. `apiKey` not provided.
        '401':
          description: Unauthorized
      tags:
        - Authentication
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - apiKey
              properties:
                apiKey:
                  type: string
                  description: Your personal API key
  /refresh-token:
    post:
      summary: Refresh Token
      operationId: refreshToken
      description: This endpoint generates a new access token using a given refresh token.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Token'
        '401':
          description: Unauthorized
      tags:
        - Authentication
      parameters: []
      requestBody:
        required: true
        content:
          text/plain:
            schema:
              type: string
              description: Your refresh token
              example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NodGluZy5jb20iLCJhdWQiOiJsb2NodGluZy5jb20iLCJpYXQiOjE1OTMwNzgwMDAsIm5iZiI6MTU5MzA3ODAwMCwiZXhwIjoxNTkzMDc4NjAwLCJzdWIiOiJ1c2VyLTE3M2E3ODNhLWNjZWUtNDE0ZC05OGIxLTAwOTcwMjI3NWZkZiIsInVzZXJuYW1lIjoiSm9obiBQaGFybWEifQ.stHAtyWIPDJnoOHo-ssLXuwsVA8Ctf6xItm7gwgee_c
  /order/create:
    post:
      summary: New Order
      operationId: newOrder
      description: >-
        This endpoint allows you to create a new order with
        relevant details such as the type and quantity of products, delivery
        details, payment information, and any additional notes or comments.
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                required:
                  - orderId
                properties:
                  orderId:
                    type: string
                    example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
                    description: >-
                      The ID of the order, prefixed with `order-` and followed
                      by a 36-character UUID.
        '401':
          description: Unauthorized
      tags:
        - Orders
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderCreateItem'
  /order/{orderId}:
    get:
      summary: Order Details
      operationId: getOrder
      description: >- 
        This endpoint returns a JSON object with the order details.


        :::info

        The structure of prices and order lines differs from the _New Order_ endpoint.


        Prices are enriched with the correct currency name and symbol, and all product codes are returned indexed by type.

        :::
        
        
        ### Order Statuses
        
        
        Detailed explanation of the possible `orderStatus` values:
        
      
        * `pending` - The order has not been paid yet.
        
        * `paid` - The order has been paid. If a reservation is linked to the order, the customer, at the MT.Matic, won't be asked to pay anymore.
        
        * `readyToPickUpInStore` - The order is ready to be picked up in store, at the MT.Matic, or in a locker. If a reservation is linked to the order, the customer, at the MT.Matic, will need to pay before the products are delivered.
        
        * `complete` - The order is complete (and picked up if applicable).
        
        * `canceled` - The order was canceled.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderDetails'
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Order not found:
                      order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
      tags:
        - Orders
      parameters:
        - name: orderId
          in: path
          description: The ID of the order.
          required: true
          example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
    patch:
      summary: Update Order Details
      operationId: updateOrder
      description: This endpoint allows you to update an order.
      responses:
        '200':
          description: OK
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Order not found:
                      order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
      tags:
        - Orders
      parameters:
        - name: orderId
          in: path
          description: The ID of the order.
          required: true
          example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  $ref: '#/components/schemas/OrderStatus'
                paymentMethod:
                  $ref: '#/components/schemas/PaymentMethod'
  /orders:
    get:
      summary: Order Collection
      operationId: listOrders
      description: >-
        This endpoint returns a JSON object with orders.


        :::info

        The structure of prices differs from the _New Order_ endpoint.
        Prices are enriched with the correct currency name and symbol.

        :::
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/List'
                  - type: object
                    properties:
                      items:
                        items:
                          $ref: '#/components/schemas/OrderListItem'
        '401':
          description: Unauthorized
      tags:
        - Orders
      parameters:
        - name: pagination[page]
          in: query
          description: The page number to retrieve
          schema:
            type: integer
            default: 1
        - name: pagination[size]
          in: query
          description: The page size (hard limit to `1000`)
          schema:
            type: integer
            default: 10
        - name: sorting[field]
          in: query
          description: The field to sort on (createdAt, updatedAt or orderStatus).
          schema:
            type: string
            default: 'null'
        - name: sorting[direction]
          in: query
          description: The sorting direction (`ascending` or `descending`).
          schema:
            type: string
            default: 'null'
        - name: filters[customerId]
          in: query
          description: >-
            Filter orders by customer id, prefixed with `identifiedCustomer-`
            and followed by a 36-character UUID.
          schema:
            type: string
            default: 'null'
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
  /customer/create:
    post:
      summary: New Customer
      operationId: newCustomer
      description: >-
        This endpoint allows you to create a new customer with
        relevant details.
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                required:
                  - identifiedCustomerId
                properties:
                  identifiedCustomerId:
                    type: string
                    example: identifiedCustomer-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
                    description: >-
                      The ID of the customer, prefixed with `identifiedCustomer-` and followed
                      by a 36-character UUID.
        '401':
          description: Unauthorized
      tags:
        - Customers
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerCreateItem'
  /customer/{customerId}:
    get:
      summary: Customer Details
      operationId: getCustomer
      description: >-
        This endpoint returns a JSON object with the customer details.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerDetails'
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Customer not found:
                      identifiedCustomer-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
      tags:
        - Customers
      parameters:
        - name: customerId
          in: path
          description: The ID of the customer.
          required: true
          example: identifiedCustomer-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
    patch:
      summary: Update Customer Details
      operationId: updateCustomer
      description: This endpoint allows you to update a customer.
      responses:
        '200':
          description: OK
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Customer not found:
                      identifiedCustomer-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
      tags:
        - Customers
      parameters:
        - name: customerId
          in: path
          description: The ID of the customer.
          required: true
          example: identifiedCustomer-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerUpdateItem'
  /customers:
    get:
      summary: Customer Collection
      operationId: listCustomers
      description: >-
        This endpoint returns a JSON object with customers.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/List'
                  - type: object
                    properties:
                      items:
                        items:
                          $ref: '#/components/schemas/CustomerListItem'
        '401':
          description: Unauthorized
      tags:
        - Customers
      parameters:
        - name: pagination[page]
          in: query
          description: The page number to retrieve
          schema:
            type: integer
            default: 1
        - name: pagination[size]
          in: query
          description: The page size (hard limit to `1000`)
          schema:
            type: integer
            default: 10
        - name: sorting[field]
          in: query
          description: The field to sort on (`firstName`, `lastName`, `locale`, `createdOn`, `updatedOn`, and more). Response timestamps use `createdAt` and `updatedAt`.
          schema:
            type: string
            default: 'null'
        - name: sorting[direction]
          in: query
          description: The sorting direction (`ascending` or `descending`).
          schema:
            type: string
            default: 'null'
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
  /reservation/create:
    post:
      summary: New Vending Machine Reservation (legacy path)
      operationId: newReservationLegacy
      description: >-
        Legacy alias for [New Vending Machine Reservation](/api/new-vending-machine-reservation).
        Creates a vending machine reservation for a given order. Prefer
        `/reservation/vendingMachine/create` for new integrations.
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReservationCreateResponse'
        '401':
          description: Unauthorized
      tags:
        - Reservations
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/ReservationCreateItem'
                - type: object
                  properties:
                    isOverBoxReservation:
                      type: boolean
                      description: >-
                        Set to true if all products are placed in a container in the robot
                        (default false)
                      nullable: true
  /reservation/split/create:
    post:
      summary: New Reservation
      operationId: newReservation
      description: >-
        This endpoint allows you to create a new reservation for an order.


        It is possible to perform automatic assignment by not providing `products` in the request payload. This means
        the platform decides where to reserve products and quantities depending on availability.


        Alternatively, provide in the request payload the `products` property, specifying a `reserveIn` location for
        every item in the order.


        ### How automatic assignment works


        * Reserve all items in one robot if we have a robot with sufficient stock.

        * When impossible, reserve all items in one locker if we have a locker with sufficient stock.

        * When impossible, reserve items in the robot with most stock, then the locker with most stock, then what's left in the same robot. When no robots have stock, the first one is used.


        When the reservation is made in different locations, this is also called a split reservation.


        :::note

        All products in the order's order lines must be known to Lochting in order to perform automatic assignment.
        This means products must be provided by product ID or by known product codes.

        :::


        :::note

        Overbox reservations, specifying module or locker IDs, and selecting between multiple robots or lockers is
        currently not supported for this endpoint.


        If you need to create overbox reservations, use
        [New Vending Machine Reservation](/api/new-vending-machine-reservation) or
        [New Locker Reservation](/api/new-locker-reservation) instead.

        :::
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReservationCreateResponse'
        '401':
          description: Unauthorized
      tags:
        - Reservations
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/ReservationCreateItem'
                - type: object
                  properties:
                    products:
                      type: array
                      items:
                        $ref: '#/components/schemas/ReservationCreateProductLine'
                      description: >-
                        Products with locations to reserve in. When `products` is provided, you must specify a location
                        for every product and quantity in the order, without any additional products or quantities.
  /reservation/vendingMachine/create:
    post:
      summary: New Vending Machine Reservation
      operationId: newVendingMachineReservation
      description: >-
        This endpoint allows you to create a new vending machine
        reservation for a given order.
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReservationCreateResponse'
        '401':
          description: Unauthorized
      tags:
        - Reservations
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/ReservationCreateItem'
                - type: object
                  properties:
                    isOverBoxReservation:
                      type: boolean
                      description: >-
                        Set to true if all products are placed in a container in the robot
                        (default false)
                      nullable: true
  /reservation/locker/create:
    post:
      summary: New Locker Reservation
      operationId: newLockerReservation
      description: >-
        This endpoint allows you to create a new locker
        reservation for a given order.
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReservationCreateResponse'
        '401':
          description: Unauthorized
      tags:
        - Reservations
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/ReservationCreateItem'
                - type: object
                  properties:
                    isOverBoxReservation:
                      type: boolean
                      description: >-
                        Set to true if all products are placed in a container in the locker
                        (default false)
                      nullable: true
  /reservation/{reservationId}:
    get:
      summary: Reservation Details
      operationId: getReservation
      description: >-
        This endpoint returns a JSON object with the reservation details.
        
        
        ### Reservation Statuses
        
        
        Detailed explanation of the possible `reservationStatus` values:
        
        
        * `incomplete` - Reservation created in robot, but some packs are missing.
        
        * `complete` - Reservation created in robot, all packs are available.
        
        * `deliveryRequested` - Reservation is complete and a delivery was requested.
        
        * `deliveryRequestFailed` - The request for delivery has failed.
        
        * `delivered` - The reservation was ejected from the robot.
        
        * `deliveryFailed` - Delivery process started but failed to eject reservation from robot.
        
        * `pickedUp` - The customer picked up the delivered reservation.
        
        * `pickUpFailed` - The customer indicated that the ejected reservation was not ok.
        
        * `canceled` - The reservation was canceled.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReservationDetails'
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Reservation not found:
                      reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
      tags:
        - Reservations
      parameters:
        - name: reservationId
          in: path
          description: The ID of the reservation.
          required: true
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
    patch:
      summary: Update Reservation Details
      operationId: updateReservation
      description: This endpoint allows you to update a reservation.
      responses:
        '200':
          description: OK
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Reservation not found:
                      reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
      tags:
        - Reservations
      parameters:
        - name: reservationId
          in: path
          description: The ID of the reservation.
          required: true
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - status
              properties:
                status:
                  $ref: '#/components/schemas/UpdateReservationStatus'
  /reservations:
    get:
      summary: Reservation Collection
      operationId: listReservations
      description: This endpoint returns a JSON object with reservations.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/List'
                  - type: object
                    properties:
                      items:
                        items:
                          $ref: '#/components/schemas/ReservationItem'
        '401':
          description: Unauthorized
      tags:
        - Reservations
      parameters:
        - name: pagination[page]
          in: query
          description: The page number to retrieve
          schema:
            type: integer
            default: 1
        - name: pagination[size]
          in: query
          description: The page size (hard limit to `1000`)
          schema:
            type: integer
            default: 10
        - name: filters[orderId]
          in: query
          description: >-
            The ID of the order, prefixed with `order-` and followed by a 36
            characters long UUID.
          schema:
            type: string
            default: 'null'
        - name: filters[customerId]
          in: query
          description: >-
            Filter reservations by customer id, prefixed with `identifiedCustomer-`
            and followed by a 36-character UUID.
          schema:
            type: string
            default: 'null'
        - name: filters[reservationStatuses][]
          in: query
          description: >-
            Filter by one or more reservation statuses. Repeat the parameter for
            multiple values, for example
            `filters[reservationStatuses][]=complete&filters[reservationStatuses][]=incomplete`.
          schema:
            type: array
            items:
              $ref: '#/components/schemas/ReservationStatus'
          style: form
          explode: true
        - name: sorting[field]
          in: query
          description: The field to sort on (`createdAt`, `updatedAt`, or `pickupStatus`).
          schema:
            type: string
            default: 'null'
        - name: sorting[direction]
          in: query
          description: The sorting direction (`ascending` or `descending`).
          schema:
            type: string
            default: 'null'
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
  /reservation/{reservationId}/request-delivery:
    post:
      summary: Request Delivery
      operationId: requestReservationDelivery
      description: >-
        This endpoint allows you to trigger the delivery process for a specific
        reservation, specifying the output destination within the MT.Matic system
        where the reserved products should be delivered.
      responses:
        '200':
          description: OK
        '400':
          description: >-
            Bad Request. Possible messages: `Invalid reservation`, `Pickup requires
            payment before delivery`, or `Order requires payment before delivery`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                invalidReservation:
                  summary: Invalid reservation
                  value:
                    message: Invalid reservation
                pickupRequiresPayment:
                  summary: Pickup requires payment
                  value:
                    message: Pickup requires payment before delivery
                orderRequiresPayment:
                  summary: Order requires payment
                  value:
                    message: Order requires payment before delivery
        '401':
          description: Unauthorized
      tags:
        - Reservations
      parameters:
        - name: reservationId
          in: path
          description: The ID of the reservation.
          required: true
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - robotOutputDestinationId
              properties:
                robotOutputDestinationId:
                  type: integer
                  example: 2
                  description: The output destination id.
  /reservation/{reservationId}/qr-code:
    get:
      summary: Reservation QR Code
      operationId: getReservationQrCode
      description: >-
        This endpoint returns a string containing the base64 encoded
        representation of a QR code. This QR code can be utilized by customers
        at the MT.Matic for picking up their reservations, eliminating the need
        for manual entry of the reservation code.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
              example: >-
                iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC7klEQVR4nO3dQWrjQBBA0dGQ+1/Zs5mFs4pE+rdL9nu7QGJs8xGBorqPx+PxB1b7++o3wHsSFglhkfh6/uE4jh//4Mz/ZF7nM1/nmScWCWGREBYJYZEQFglhkRAWCWGREBYJYZEQFonjeQZUzIzuYtrc7czrrFJ8Lk8sEsIiISwSwiIhLBLCIiEsEsIiISwSwiIhLBJfP//Kd6tmWDtnjqve88753TT2ChlBWCSERUJYJIRFQlgkhEVCWCSERUJYJIRF4vKscNWM75N3GM+Y9tntFTKCsEgIi4SwSAiLhLBICIuEsEgIi4SwSAiLxOVZ4SrTZmE77dzNXDWTtVfICMIiISwSwiIhLBLCIiEsEsIiISwSwiIhLBIvmxVOO8t05x2C0+4rLD6XJxYJYZEQFglhkRAWCWGREBYJYZEQFglhkRAWidvfV7jzLNNpM76d7BUygrBICIuEsEgIi4SwSAiLhLBICIuEsEgIi4T7Cv+bNgM9Y+d36L5CRhAWCWGREBYJYZEQFglhkRAWCWGREBYJYZE4nuc7d5yXnbFqprZzZ3DnjO8Me4WMICwSwiIhLBLCIiEsEsIiISwSwiIhLBLCIpHsFU7bd1tl2nuedn+ivUJywiIhLBLCIiEsEsIiISwSwiIhLBLCIiEsEpdnhWfsnCdO2wecNgdcxV4hIwiLhLBICIuEsEgIi4SwSAiLhLBICIuEsEhcPoN02mzuXe8HPGPyPNETi4SwSAiLhLBICIuEsEgIi4SwSAiLhLBICItEsle40yfP73aeiWqvkBGERUJYJIRFQlgkhEVCWCSERUJYJIRFQlgkLs8Kp+0e7pwDrrLq+3FfIR9HWCSERUJYJIRFQlgkhEVCWCSERUJYJIRF4vIZpKvccZ44+czP37BXyG0Ii4SwSAiLhLBICIuEsEgIi4SwSAiLhLBIvGxWyPuxV0hOWCSERUJYJIRFQlgkhEVCWCSERUJYJIRF4rjjGZ7M54lFQlgkhEXiH+1C3HwqVbcGAAAAAElFTkSuQmCC
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Reservation not found:
                      reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
      tags:
        - Reservations
      parameters:
        - name: reservationId
          in: path
          description: The ID of the reservation.
          required: true
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
  /reservation/{reservationId}/over-box-barcode:
    get:
      summary: Reservation Overbox Barcode
      operationId: getReservationOverboxBarcode
      description: >-
        This endpoint returns a string containing the base64 encoded
        representation of an EAN13 overbox barcode. This barcode can be utilized
        by pharmacists to put on the overbox to be registered by the robot.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
              example: >-
                iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC7klEQVR4nO3dQWrjQBBA0dGQ+1/Zs5mFs4pE+rdL9nu7QGJs8xGBorqPx+PxB1b7++o3wHsSFglhkfh6/uE4jh//4Mz/ZF7nM1/nmScWCWGREBYJYZEQFglhkRAWCWGREBYJYZEQFonjeQZUzIzuYtrc7czrrFJ8Lk8sEsIiISwSwiIhLBLCIiEsEsIiISwSwiIhLBJfP//Kd6tmWDtnjqve88753TT2ChlBWCSERUJYJIRFQlgkhEVCWCSERUJYJIRF4vKscNWM75N3GM+Y9tntFTKCsEgIi4SwSAiLhLBICIuEsEgIi4SwSAiLxOVZ4SrTZmE77dzNXDWTtVfICMIiISwSwiIhLBLCIiEsEsIiISwSwiIhLBIvmxVOO8t05x2C0+4rLD6XJxYJYZEQFglhkRAWCWGREBYJYZEQFglhkRAWidvfV7jzLNNpM76d7BUygrBICIuEsEgIi4SwSAiLhLBICIuEsEgIi4T7Cv+bNgM9Y+d36L5CRhAWCWGREBYJYZEQFglhkRAWCWGREBYJYZE4nuc7d5yXnbFqprZzZ3DnjO8Me4WMICwSwiIhLBLCIiEsEsIiISwSwiIhLBLCIpHsFU7bd1tl2nuedn+ivUJywiIhLBLCIiEsEsIiISwSwiIhLBLCIiEsEpdnhWfsnCdO2wecNgdcxV4hIwiLhLBICIuEsEgIi4SwSAiLhLBICIuEsEhcPoN02mzuXe8HPGPyPNETi4SwSAiLhLBICIuEsEgIi4SwSAiLhLBICItEsle40yfP73aeiWqvkBGERUJYJIRFQlgkhEVCWCSERUJYJIRFQlgkLs8Kp+0e7pwDrrLq+3FfIR9HWCSERUJYJIRFQlgkhEVCWCSERUJYJIRF4vIZpKvccZ44+czP37BXyG0Ii4SwSAiLhLBICIuEsEgIi4SwSAiLhLBIvGxWyPuxV0hOWCSERUJYJIRFQlgkhEVCWCSERUJYJIRF4rjjGZ7M54lFQlgkhEXiH+1C3HwqVbcGAAAAAElFTkSuQmCC
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Reservation not found:
                      reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
      tags:
        - Reservations
      parameters:
        - name: reservationId
          in: path
          description: The ID of the reservation.
          required: true
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
  /reservation/{reservationId}/simulate-status-change:
    patch:
      summary: Reservation Simulation
      operationId: simulateReservationStatusChange
      description: >-
        This endpoint allows you to simulate a reservation status change. It is
        only available on the DEV and staging environments. It sets
        the reservation to any valid `ReservationStatus` value without enforcing
        production transition rules.
      responses:
        '200':
          description: OK
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Reservation not found:
                      reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
      tags:
        - Reservations
      parameters:
        - name: reservationId
          in: path
          description: The ID of the reservation.
          required: true
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - status
              properties:
                status:
                  $ref: '#/components/schemas/ReservationStatus'
  /product/robot:
    get:
      summary: Robot Products
      operationId: getRobotProducts
      description: >-
        This endpoint returns all products in the robot product selection along
        with their stock levels and product codes.
      tags:
        - Robot
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  required:
                    - productId
                    - quantity
                    - productCodes
                  properties:
                    productId:
                      type: string
                      description: The internal Lochting ID of the product, prefixed with `product-` and followed by a 36-character UUID.
                      example: product-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
                    quantity:
                      type: integer
                      description: Quantity in stock
                      example: 2
                    productCodes:
                      $ref: '#/components/schemas/ProductCodes'
        '401':
          description: Unauthorized
  /product/request-delivery-by-product-codes:
    post:
      summary: Deliver Product
      operationId: deliverProduct
      description: >-
        This endpoint allows you to deliver one or more products
        from the robot by product codes. Requires the `reservations` API key scope.
      responses:
        '200':
          description: OK
        '401':
          description: Unauthorized
      tags:
        - Robot
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - productCodes
                - robotOutputDestinationId
              properties:
                productCodes:
                  type: array
                  items:
                    type: object
                    required:
                      - type
                      - value
                    properties:
                      type:
                        $ref: '#/components/schemas/ProductCodeType'
                      value:
                        type: string
                        example: '1234567'
                  description: The list of product codes to be delivered from the robot
                robotOutputDestinationId:
                  type: integer
                  description: The number identifying the output destination to be used
                  example: 1
  /stock/robot:
    post:
      summary: Robot Stock
      operationId: retrieveRobotStock
      description: >-
        This endpoint returns robot stock for the provided product codes.
      tags:
        - Stock
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - productCodes
              properties:
                productCodes:
                  type: array
                  items:
                    type: object
                    required:
                      - type
                      - value
                    properties:
                      type:
                        $ref: '#/components/schemas/ProductCodeType'
                      value:
                        type: string
                        example: '1234567'
                  description: The list of product codes to be queried for stock.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - stock
                  - unresolvedProductCodes
                properties:
                  stock:
                    type: array
                    items:
                      type: object
                      required:
                        - productCode
                        - quantity
                      properties:
                        productCode:
                          type: string
                          example: '1234567'
                        quantity:
                          type: integer
                          example: 3
                          description: Quantity in stock
                    description: >-
                      The robot stock for each product code.
                  unresolvedProductCodes:
                    type: array
                    items:
                      type: object
                      required:
                        - type
                        - value
                      properties:
                        type:
                          $ref: '#/components/schemas/ProductCodeType'
                        value:
                          type: string
                          example: '1234567'
                    description: >-
                      The list of product codes that could not be resolved by Lochting.
        '401':
          description: Unauthorized
  /stock/locker:
    post:
      summary: Locker Stock
      operationId: retrieveLockerStock
      description: >-
        This endpoint returns locker stock for the provided product codes.


        :::note

        Retrieving locker stock is limited to maximum 1000 product codes per request.

        :::
      tags:
        - Stock
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - productCodes
              properties:
                productCodes:
                  type: array
                  items:
                    type: object
                    required:
                      - type
                      - value
                    properties:
                      type:
                        $ref: '#/components/schemas/ProductCodeType'
                      value:
                        type: string
                        example: '1234567'
                  description: The list of product codes to be queried for stock.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - stock
                  - unresolvedProductCodes
                properties:
                  stock:
                    type: array
                    items:
                      type: object
                      required:
                        - productCode
                        - quantity
                      properties:
                        productCode:
                          type: string
                          example: '1234567'
                        quantity:
                          type: integer
                          example: 3
                          description: Quantity in stock
                    description: >-
                      The locker stock for each product code.
                  unresolvedProductCodes:
                    type: array
                    items:
                      type: object
                      required:
                        - type
                        - value
                      properties:
                        type:
                          $ref: '#/components/schemas/ProductCodeType'
                        value:
                          type: string
                          example: '1234567'
                    description: >-
                      The list of product codes that could not be resolved by Lochting.
        '401':
          description: Unauthorized
  /stock/import:
    post:
      summary: Import Stock
      operationId: importStock
      description: >-
        This endpoint allows you to keep product stock levels
        in sync, ensuring accurate and real-time inventory.
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                type: object
                required:
                  - unresolvedProductCodes
                properties:
                  unresolvedProductCodes:
                    type: array
                    items:
                      type: object
                      required:
                        - type
                        - value
                      properties:
                        type:
                          $ref: '#/components/schemas/ProductCodeType'
                        value:
                          type: string
                          example: '1234567'
                    description: >-
                      The list of product codes that could not be resolved by
                      Lochting
        '401':
          description: Unauthorized
      tags:
        - Stock
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockImport'
  /price/import:
    post:
      summary: Import Price
      operationId: importPrice
      description: >-
        This endpoint allows you to synchronize and push
        real-time price information, ensuring pricing accuracy across all
        channels.
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                type: object
                required:
                  - unresolvedProductCodes
                properties:
                  unresolvedProductCodes:
                    type: array
                    items:
                      type: object
                      required:
                        - type
                        - value
                      properties:
                        type:
                          $ref: '#/components/schemas/ProductCodeType'
                        value:
                          type: string
                          example: '1234567'
                    description: >-
                      The list of product codes that could not be resolved by
                      Lochting
        '401':
          description: Unauthorized
      tags:
        - Prices
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PriceImport'
  /shipment/create:
    post:
      summary: New Shipment
      operationId: newShipment
      description: >-
        This endpoint allows you to create a new shipment for a
        given order.
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                required:
                  - shipmentId
                properties:
                  shipmentId:
                    type: string
                    example: shipment-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
                    description: >-
                      The ID of the shipment, prefixed with `shipment-` and
                      followed by a 36-character UUID.
        '401':
          description: Unauthorized
      tags:
        - Shipments
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShipmentCreateItem'
  /shipment/{shipmentId}:
    get:
      summary: Shipment Details
      operationId: getShipment
      description: >-
        This endpoint returns a JSON object with the shipment details.


        :::info

        The structure of the weight differs from the _New Shipment_ endpoint.
        The amount is returned as an object with three different representations.

        :::
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShipmentDetails'
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Shipment not found:
                      shipment-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
      tags:
        - Shipments
      parameters:
        - name: shipmentId
          in: path
          description: The ID of the shipment.
          required: true
          example: shipment-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
  /shipments:
    get:
      summary: Shipment Collection
      operationId: listShipments
      description: >-
        This endpoint returns a JSON object with shipments.


        :::info

        The structure of the weight differs from the _New Shipment_ endpoint.
        The amount is returned as an object with three different representations.

        :::
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/List'
                  - type: object
                    properties:
                      items:
                        items:
                          $ref: '#/components/schemas/ShipmentListItem'
        '401':
          description: Unauthorized
      tags:
        - Shipments
      parameters:
        - name: pagination[page]
          in: query
          description: The page number to retrieve
          schema:
            type: integer
            default: 1
        - name: pagination[size]
          in: query
          description: The page size (hard limit to `1000`)
          schema:
            type: integer
            default: 10
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
  /shipment/{shipmentId}/label/{labelSizeAndPlacement}:
    get:
      summary: Shipment Label
      operationId: getShipmentLabel
      description: >-
        This endpoint returns a base64 encoded PDF of the shipment label. It can
        be requested in A4 or A6 format.


        :::note

        It can take up to two minutes before a label can be generated from a
        newly created shipment.

        :::
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
              example: >-
                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uAOnX8jUR8Y6ENFOr/bl+yCTyidp3B/7u3Gc9/pzXNf2XqXhTxRDqq2N1qtq2nx2jm2AaRGVVGdpPIOzP/Aj+NO38PzDQtXutZ0O8nTUr/7QlnakGWBTuIbr1+bGPzFAHU3fjKzj0O91CCC63268RzWzpliCVzx0469qraR48srrSbae9juVuXTMghs5WQH2ODkfjWZpFr4jvtB8QWlyl6bSaBk09dRIE5JB4Y/l1/DvT9A8Qano+g2enTeFdXeS3j8tmSMYOD1FAHfUUUUgCiiigAooooAbJ/q2+hrjfhb/AMiXH/13k/nRRQB2lFFFABRRRQB//9kKZW5kc3RyZWFtCmVuZG9iago3IDAgb2JqCjw8Ci9UeXBlIC9YT2JqZWN0Ci9Db2xvclNwYWNlIFsgL0luZGV4ZWQgL0RldmljZVJHQiAyNTUgPDAwMDAwMDgwMDAwMDAwODAwMDgwODAwMDAwMDA4MDgwMDA4MDAwODA4MDgwODA4MGZjMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw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
        '401':
          description: Unauthorized
      tags:
        - Shipments
      parameters:
        - name: shipmentId
          in: path
          description: The ID of the shipment.
          required: true
          example: shipment-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: labelSizeAndPlacement
          in: path
          description: Label size and placement on the page.
          required: true
          example: TOP_LEFT_A4
          schema:
            type: string
            enum:
              - TOP_LEFT_A4
              - TOP_RIGHT_A4
              - BOTTOM_LEFT_A4
              - BOTTOM_RIGHT_A4
              - FULL_A6
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
  /webhook/create:
    post:
      summary: New Webhook
      operationId: newWebhook
      description: This endpoint allows you to create a new webhook.
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                required:
                  - webhookId
                properties:
                  webhookId:
                    type: string
                    example: webhook-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
                    description: >-
                      The ID of the webhook, prefixed with `webhook-` and
                      followed by a 36-character UUID.
        '401':
          description: Unauthorized
      tags:
        - Webhooks
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookCreateItem'
  /webhooks:
    get:
      summary: Webhook Collection
      operationId: listWebhooks
      description: >-
        This endpoint returns a JSON object with configured webhooks for a
        branch.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/List'
                  - type: object
                    properties:
                      items:
                        items:
                          $ref: '#/components/schemas/WebhookListItem'
        '401':
          description: Unauthorized
      tags:
        - Webhooks
      parameters:
        - name: pagination[page]
          in: query
          description: The page number to retrieve
          schema:
            type: integer
            default: 1
        - name: pagination[size]
          in: query
          description: The page size (hard limit to `1000`)
          schema:
            type: integer
            default: 10
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
  /webhook/{webhookId}:
    delete:
      summary: Delete Webhook
      operationId: deleteWebhook
      description: This endpoint allows you to delete a webhook.
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request. Invalid webhook.
        '401':
          description: Unauthorized
      tags:
        - Webhooks
      parameters:
        - name: webhookId
          in: path
          description: The ID of the webhook.
          required: true
          example: webhook-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
  /webhook/{webhookId}/test:
    post:
      summary: Test Webhook
      operationId: testWebhook
      description: >-
        This endpoint allows you to test a webhook. It sends a request to the
        configured webhook URL with the corresponding payload.
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request. Invalid webhook.
        '401':
          description: Unauthorized
      tags:
        - Webhooks
      parameters:
        - name: webhookId
          in: path
          description: The ID of the webhook.
          required: true
          example: webhook-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          example: your-access-token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - id
              properties:
                id:
                  type: string
                  example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
                  description: The ID of the resource to include in the test payload (for example an order or reservation ID).
components:
  schemas:
    CustomerAddress:
      type: object
      nullable: true
      properties:
        lineOne:
          type: string
          example: Main Street 1
          nullable: true
        lineTwo:
          type: string
          nullable: true
        city:
          type: string
          example: Gent
          nullable: true
        country:
          type: string
          description: ISO 3166-1 alpha-2 country code
          example: BE
          nullable: true
        zipCode:
          type: integer
          example: 9000
          nullable: true
        phoneNumber:
          type: string
          nullable: true
    ExternalReferenceIds:
      type: object
      description: External reference IDs keyed by provider name.
      additionalProperties:
        type: string
      example:
        publicApi: '34'
        Farmad: POS_ID_123
    ReservationCreateResponse:
      type: object
      required:
        - legacyReservationId
        - reservationId
        - reservationCode
      properties:
        legacyReservationId:
          type: string
          description: >-
            Deprecated alias for `reservationId`. Prefer `reservationId` in new
            integrations.
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
        reservationId:
          type: string
          description: >-
            The ID of the reservation, prefixed with `reservation-` and followed
            by a 36-character UUID.
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
        reservationCode:
          type: string
          example: XXX12345A
          description: The generated code. Can be used by a customer on the MT.Matic.
        overBoxBarCode:
          type: string
          example: '1234567891234'
          description: The overbox EAN13 barcode.
          nullable: true
        overBoxBarCodes:
          type: array
          items:
            type: string
          description: The overbox EAN13 barcodes when multiple overboxes are used.
    Token:
      type: object
      required:
        - accessToken
        - refreshToken
      properties:
        accessToken:
          type: string
          example: >-
            eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NodGluZy5jb20iLCJhdWQiOiJsb2NodGluZy5jb20iLCJpYXQiOjE1OTMwODEzNjAsIm5iZiI6MTU5MzA4MTQyMCwiZXhwIjoxNTkzMTE3MzYwLCJzdWIiOiJ1c2VyLTE3M2E3ODNhLWNjZWUtNDE0ZC05OGIxLTAwOTcwMjI3NWZkZiIsInVzZXJuYW1lIjoiSm9obiBQaGFybWEifQ.Z4ZVCnWwYCabYjGJiKiS12vhW_sJVlcSeW6uuXQB_9c
        refreshToken:
          type: string
          example: >-
            eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NodGluZy5jb20iLCJhdWQiOiJsb2NodGluZy5jb20iLCJpYXQiOjE1OTMwNzgwMDAsIm5iZiI6MTU5MzA3ODAwMCwiZXhwIjoxNTkzMDc4NjAwLCJzdWIiOiJ1c2VyLTE3M2E3ODNhLWNjZWUtNDE0ZC05OGIxLTAwOTcwMjI3NWZkZiIsInVzZXJuYW1lIjoiSm9obiBQaGFybWEifQ.stHAtyWIPDJnoOHo-ssLXuwsVA8Ctf6xItm7gwgee_c
    OrderCreateItem:
      type: object
      required:
        - salesChannelId
        - salesChannelType
        - externalReferenceId
        - currency
        - total
        - taxes
        - discount
        - shipping
        - status
        - orderLines
      properties:
        salesChannelId:
          type: string
          example: pos-03cac0fc-feaf-5bc5-a3d1-8dc5e80ada46
          description: >-
            The ID of the sales channel, prefixed with `mobileApplication-`,
            `pos-` or `other-` and followed by a 36-character UUID.
        salesChannelType:
          $ref: '#/components/schemas/SalesChannelType'
        externalReferenceId:
          type: string
          example: '00012345'
          description: External reference ID of the order
        currency:
          $ref: '#/components/schemas/Currency'
        total:
          type: integer
          example: 4000
          description: Total including VAT
        taxes:
          type: integer
          example: 300
          description: VAT
        discount:
          type: integer
          example: 1000
          description: Discount
          nullable: true
        shipping:
          type: integer
          example: 500
          description: Shipping
          nullable: true
        status:
          $ref: '#/components/schemas/OrderStatus'
        orderLines:
          type: array
          items:
            $ref: '#/components/schemas/OrderCreateOrderLine'
          description: Order Lines
        customerEmailAddress:
          type: string
          example: johndoe@lochting.com
          description: Email address of the customer
          nullable: true
        customerExternalReferenceId:
          type: string
          example: '23'
          description: External reference ID of the customer
          nullable: true
        customerFirstName:
          type: string
          example: John
          description: First name of customer
          nullable: true
        customerLastName:
          type: string
          example: Doe
          description: Last name of customer
          nullable: true
        customerAddress:
          type: string
          example: Dendermondsesteenweg 140C
          description: Street + Street number + box
          nullable: true
        customerZipCode:
          type: string
          example: '9000'
          description: ZIP code of customer
          nullable: true
        customerCity:
          type: string
          example: Gent
          description: City of customer
          nullable: true
        customerCountry:
          allOf:
            - $ref: '#/components/schemas/Country'
          description: ISO 3166-1 alpha-2 country code of Customer
          nullable: true
        customerPhoneNumber:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
          nullable: true
        shippingMethod:
          allOf:
            - $ref: '#/components/schemas/ShippingMethod'
          nullable: true
        shippingName:
          type: string
          example: John
          description: concatenated name of addressee
          nullable: true
        shippingAddress:
          type: string
          example: Dendermondsesteenweg 140C
          description: Street + Street number + box of shipping address
          nullable: true
        shippingZipCode:
          type: string
          example: '9000'
          description: ZIP code of shipping address
          nullable: true
        shippingCity:
          type: string
          example: Gent
          description: City of shipping address
          nullable: true
        shippingCountry:
          allOf:
            - $ref: '#/components/schemas/Country'
          description: ISO 3166-1 alpha-2 country code of shipping address
          nullable: true
        shippingPhoneNumber:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number for the shipping address (not a landline). Prefer
            E.164 format with a country prefix (e.g. +32412345678) to ensure SMS
            messages can be sent successfully.
          nullable: true
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        remarks:
          type: string
          description: Additional remarks
          nullable: true
        confirmationEmailAddress:
          type: string
          format: email
          description: Confirmation email address
          example: user@example.com
          nullable: true
        customerLocale:
          allOf:
            - $ref: '#/components/schemas/Locale'
          description: Locale of the customer
          nullable: true
        prescriptionBarcodes:
          type: array
          items:
            type: string
          description: Prescription barcodes
          example:
            - BEP1K5H5PPK6
            - BEP19D1M3VZS
            - BEP163CHB4RS
          nullable: true
    OrderDetails:
      type: object
      required:
        - orderId
        - orderNumber
        - salesChannelId
        - externalReferenceId
        - customerEmailAddress
        - customerName
        - customerFirstName
        - customerLastName
        - customerAddress
        - customerZipCode
        - customerCity
        - customerCountry
        - customerPhoneNumber
        - shippingMethod
        - shippingName
        - shippingAddress
        - shippingZipCode
        - shippingCity
        - shippingCountry
        - paymentMethod
        - currency
        - total
        - taxes
        - shipping
        - discount
        - orderStatus
        - createdAt
        - updatedAt
        - orderLines
        - prescriptionBarcodes
        - remarks
        - customerLocale
        - reservationId
      properties:
        orderId:
          type: string
          example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the order, prefixed with `order-` and followed by a 36
            characters long UUID.
        orderNumber:
          type: string
          example: W00010
        salesChannelId:
          type: string
          example: webshop-03cac0fc-feaf-5bc5-a3d1-8dc5e80ada46
          description: >-
            The ID of the sales channel, prefixed with `webshop-` or `device-`
            and followed by a 36-character UUID.
        externalReferenceId:
          type: string
          example: '34'
          description: The external reference ID of the integrator
        currency:
          allOf:
            - $ref: '#/components/schemas/CurrencyOutput'
          description: Currency of the Order
        total:
          allOf:
            - $ref: '#/components/schemas/PriceOutput'
          description: Total including VAT
        taxes:
          allOf:
            - $ref: '#/components/schemas/PriceOutput'
          description: VAT
        shipping:
          allOf:
            - $ref: '#/components/schemas/PriceOutput'
          description: Shipping Cost
        discount:
          allOf:
            - $ref: '#/components/schemas/PriceOutput'
          description: Discount
        orderStatus:
          $ref: '#/components/schemas/OrderStatus'
        reservationId:
          type: string
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the linked reservation, prefixed with `reservation-` and
            followed by a 36-character UUID.
          nullable: true
        createdAt:
          type: string
          example: '2020-02-25 10:20:30'
          description: UTC datetime in `Y-m-d H:i:s` format
        updatedAt:
          type: string
          example: '2020-02-25 10:20:30'
          description: UTC datetime in `Y-m-d H:i:s` format
          nullable: true
        customerEmailAddress:
          type: string
          example: johndoe@lochting.com
          description: Email address of the customer
          nullable: true
        customerLocale:
          type: string
          example: nl_BE
          description: Locale of the customer
          nullable: true
        customerName:
          type: string
          example: John Doe
          description: Name of customer
          nullable: true
        customerFirstName:
          type: string
          example: John
          description: First name of customer
          nullable: true
        customerLastName:
          type: string
          example: Doe
          description: Last name of customer
          nullable: true
        customerAddress:
          type: string
          example: Dendermondsesteenweg 140C
          description: Street + Street number + box
          nullable: true
        customerZipCode:
          type: string
          example: '9000'
          description: ZIP code of customer
          nullable: true
        customerCity:
          type: string
          example: Gent
          description: City of customer
          nullable: true
        customerCountry:
          allOf:
            - $ref: '#/components/schemas/Country'
          description: ISO 3166-1 alpha-2 country code of Customer
          nullable: true
        customerPhoneNumber:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
          nullable: true
        shippingMethod:
          allOf:
            - $ref: '#/components/schemas/ShippingMethod'
          nullable: true
        shippingName:
          type: string
          example: John
          description: concatenated name of addressee
          nullable: true
        shippingAddress:
          type: string
          example: Dendermondsesteenweg 140C
          description: Street + Street number + box of shipping address
          nullable: true
        shippingZipCode:
          type: string
          example: '9000'
          description: ZIP code of shipping address
          nullable: true
        shippingCity:
          type: string
          example: Gent
          description: City of shipping address
          nullable: true
        shippingCountry:
          allOf:
            - $ref: '#/components/schemas/Country'
          description: ISO 3166-1 alpha-2 country code of shipping address
          nullable: true
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        orderLines:
          type: array
          items:
            $ref: '#/components/schemas/OrderDetailsOrderLine'
          description: Order Lines
        remarks:
          type: string
          description: Additional remarks
          nullable: true
        prescriptionBarcodes:
          type: array
          items:
            type: string
          description: Prescription barcodes
          example:
            - BEP1K5H5PPK6
            - BEP19D1M3VZS
            - BEP163CHB4RS
    OrderListItem:
      type: object
      required:
        - orderId
        - orderNumber
        - salesChannelId
        - externalReferenceId
        - paymentMethod
        - total
        - taxes
        - shipping
        - discount
        - orderStatus
        - createdAt
        - updatedAt
        - shippingMethod
        - customerEmailAddress
        - customerFirstName
        - customerLastName
      properties:
        orderId:
          type: string
          example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the order, prefixed with `order-` and followed by a 36
            characters long UUID.
        orderNumber:
          type: string
          example: W00010
        salesChannelId:
          type: string
          example: webshop-03cac0fc-feaf-5bc5-a3d1-8dc5e80ada46
          description: >-
            The ID of the sales channel, prefixed with `webshop-` or `device-`
            and followed by a 36-character UUID.
        externalReferenceId:
          type: string
          example: '34'
          description: The external reference ID of the integrator
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        total:
          allOf:
            - $ref: '#/components/schemas/PriceOutput'
          description: Total including VAT
        taxes:
          allOf:
            - $ref: '#/components/schemas/PriceOutput'
          description: VAT
        shipping:
          allOf:
            - $ref: '#/components/schemas/PriceOutput'
          description: Shipping Cost
        discount:
          allOf:
            - $ref: '#/components/schemas/PriceOutput'
          description: Discount
        orderStatus:
          $ref: '#/components/schemas/OrderStatus'
        createdAt:
          type: string
          example: '2020-02-25 10:20:30'
          description: UTC datetime in `Y-m-d H:i:s` format
        updatedAt:
          type: string
          example: '2020-02-25 10:20:30'
          description: UTC datetime in `Y-m-d H:i:s` format
          nullable: true
        shippingMethod:
          allOf:
            - $ref: '#/components/schemas/ShippingMethod'
          nullable: true
        customerEmailAddress:
          type: string
          example: johndoe@lochting.com
          description: Email address of the customer
          nullable: true
        customerFirstName:
          type: string
          example: John
          description: First name of customer
          nullable: true
        customerLastName:
          type: string
          example: Doe
          description: Last name of customer
          nullable: true
    CustomerCreateItem:
      type: object
      required:
        - firstName
        - lastName
        - locale
        - gender
        - country
        - externalReferenceId
      properties:
        firstName:
          type: string
          example: John
          description: First name of customer
          nullable: false
        lastName:
          type: string
          example: Doe
          description: Last name of customer
          nullable: false
        locale:
          allOf:
            - $ref: '#/components/schemas/Locale'
          description: Locale of the customer
          nullable: false
        emailAddress:
          type: string
          example: johndoe@lochting.com
          description: Email address of the customer
          nullable: true
        gender:
          allOf:
            - $ref: '#/components/schemas/Gender'
          description: Gender of the customer
          nullable: false
        nationalId:
          type: string
          example: ABC12345
          description: National ID of the customer
          nullable: true
        phoneNumber:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
          nullable: true
        address:
          type: string
          example: Dendermondsesteenweg 140C
          description: Street + Street number + box
          nullable: true
        zipCode:
          type: string
          example: '9000'
          description: ZIP code of customer
          nullable: true
        city:
          type: string
          example: Gent
          description: City of customer
          nullable: true
        country:
          allOf:
            - $ref: '#/components/schemas/Country'
          description: ISO 3166-1 alpha-2 country code of Customer
          nullable: false
        externalReferenceId:
          type: string
          example: '23'
          description: External reference ID of the customer
          nullable: false
        loyaltyCardNumber:
          type: string
          example: '1234567890'
          description: Optional loyalty card number linked to the customer
          nullable: true
    CustomerUpdateItem:
      type: object
      required:
        - firstName
        - lastName
        - locale
        - gender
        - country
      properties:
        firstName:
          type: string
          example: John
          description: First name of customer
          nullable: false
        lastName:
          type: string
          example: Doe
          description: Last name of customer
          nullable: false
        locale:
          allOf:
            - $ref: '#/components/schemas/Locale'
          description: Locale of the customer
          nullable: false
        emailAddress:
          type: string
          example: johndoe@lochting.com
          description: Email address of the customer
          nullable: true
        gender:
          allOf:
            - $ref: '#/components/schemas/Gender'
          description: Gender of the customer
          nullable: false
        nationalId:
          type: string
          example: ABC12345
          description: National ID of the customer
          nullable: true
        phoneNumber:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
          nullable: true
        address:
          type: string
          example: Dendermondsesteenweg 140C
          description: Street + Street number + box
          nullable: true
        zipCode:
          type: string
          example: '9000'
          description: ZIP code of customer
          nullable: true
        city:
          type: string
          example: Gent
          description: City of customer
          nullable: true
        country:
          allOf:
            - $ref: '#/components/schemas/Country'
          description: ISO 3166-1 alpha-2 country code of Customer
          nullable: false
    CustomerListItem:
      type: object
      required:
        - customerId
        - firstName
        - lastName
        - locale
        - createdAt
        - updatedAt
        - externalReferenceIds
      properties:
        customerId:
          type: string
          example: identifiedCustomer-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the customer, prefixed with `identifiedCustomer-` and followed by a 36
            characters long UUID.
        firstName:
          type: string
          example: Bert
        lastName:
          type: string
          example: Jansens
        locale:
          allOf:
            - $ref: '#/components/schemas/Locale'
          description: Locale of the customer
        emailAddress:
          type: string
          example: johndoe@lochting.com
          description: Email address of the customer
          nullable: true
        gender:
          allOf:
            - $ref: '#/components/schemas/Gender'
          description: Gender of the customer
          nullable: true
        nationalId:
          type: string
          example: 85.02.01-002.00
          description: The national ID of the customer (for instance National Register Number in Belgium)
          nullable: true
        phoneNumber:
          type: string
          example: "+32412345678"
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
          nullable: true
        address:
          $ref: '#/components/schemas/CustomerAddress'
        externalReferenceIds:
          $ref: '#/components/schemas/ExternalReferenceIds'
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 datetime in UTC
          example: '2020-02-25T10:20:30+00:00'
        updatedAt:
          type: string
          format: date-time
          description: ISO 8601 datetime in UTC
          example: '2020-02-25T10:20:30+00:00'
    CustomerDetails:
      type: object
      required:
        - customerId
        - firstName
        - lastName
        - locale
        - createdAt
        - updatedAt
        - externalReferenceIds
      properties:
        customerId:
          type: string
          example: identifiedCustomer-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the customer, prefixed with `identifiedCustomer-` and followed by a 36
            characters long UUID.
        firstName:
          type: string
          example: Bert
        lastName:
          type: string
          example: Jansens
        locale:
          allOf:
            - $ref: '#/components/schemas/Locale'
          description: Locale of the customer
        emailAddress:
          type: string
          example: johndoe@lochting.com
          description: Email address of the customer
          nullable: true
        gender:
          allOf:
            - $ref: '#/components/schemas/Gender'
          description: Gender of the customer
          nullable: true
        nationalId:
          type: string
          example: 85.02.01-002.00
          description: The national ID of the customer (for instance National Register Number in Belgium)
          nullable: true
        phoneNumber:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
          nullable: true
        address:
          $ref: '#/components/schemas/CustomerAddress'
        externalReferenceIds:
          $ref: '#/components/schemas/ExternalReferenceIds'
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 datetime in UTC
          example: '2020-02-25T10:20:30+00:00'
        updatedAt:
          type: string
          format: date-time
          description: ISO 8601 datetime in UTC
          example: '2020-02-25T10:20:30+00:00'
    OrderDetailsOrderLine:
      type: object
      required:
        - orderLineId
        - productId
        - name
        - quantity
        - unitPriceIncludingVat
        - unitPriceExcludingVat
        - totalIncludingVat
        - totalExcludingVat
        - discountExcludingVat
        - discountIncludingVat
        - vatAmount
        - vatPercentage
        - discountPercentage
        - productCodes
      properties:
        orderLineId:
          type: string
          example: orderLine-8cc78f3d-54c2-4faa-925d-4878ac6e5181
          description: >-
            The ID of the order line, prefixed with `orderLine-`
            and followed by a 36-character UUID.
        productId:
          type: string
          description: >-
            The internal Lochting ID of the product, prefixed with
            `product-` and followed by a 36-character UUID.
          example: product-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          nullable: true
        name:
          type: string
          example: product A
          description: Name of the product
        quantity:
          type: integer
          example: 3
          description: Quantity ordered
        unitPriceIncludingVat:
          $ref: '#/components/schemas/PriceOutput'
        unitPriceExcludingVat:
          $ref: '#/components/schemas/PriceOutput'
        totalIncludingVat:
          $ref: '#/components/schemas/PriceOutput'
        totalExcludingVat:
          $ref: '#/components/schemas/PriceOutput'
        discountExcludingVat:
          $ref: '#/components/schemas/PriceOutput'
        discountIncludingVat:
          $ref: '#/components/schemas/PriceOutput'
        vatAmount:
          $ref: '#/components/schemas/PriceOutput'
        vatPercentage:
          type: number
          format: float
          minimum: 0
          maximum: 100
          example: 21
        discountPercentage:
          type: number
          format: float
          minimum: 0
          maximum: 100
          example: 3.33
        productCodes:
          $ref: '#/components/schemas/ProductCodes'
    OrderCreateOrderLine:
      type: object
      required:
        - productCode
        - productName
        - quantity
        - unitPriceIncludingVat
        - unitPriceExcludingVat
        - totalIncludingVat
        - totalExcludingVat
        - discountIncludingVat
        - discountExcludingVat
        - vatAmount
        - vatPercentage
        - discountPercentage
      properties:
        productCode:
          type: object
          required:
            - type
            - value
          properties:
            type:
              $ref: '#/components/schemas/ProductCodeType'
            value:
              type: string
              example: '1234567'
              description: The product code value
          description: The unique product code
        productName:
          type: string
          example: product A
          description: Name of the product
        quantity:
          type: integer
          example: 3
          description: Quantity ordered
        unitPriceIncludingVat:
          type: integer
          description: Price in cents
        unitPriceExcludingVat:
          type: integer
          description: Price in cents
        totalIncludingVat:
          type: integer
          description: Price in cents
        totalExcludingVat:
          type: integer
          description: Price in cents
        discountExcludingVat:
          type: integer
          description: Price in cents
        discountIncludingVat:
          type: integer
          description: Price in cents
        vatAmount:
          type: integer
          description: Total VAT
        vatPercentage:
          type: number
          format: float
          minimum: 0
          maximum: 100
          example: 21
        discountPercentage:
          type: number
          format: float
          minimum: 0
          maximum: 100
    ReservationDetails:
      type: object
      required:
        - reservationId
        - reservationCode
        - reservationStatus
        - orderId
        - customerLocale
        - remarks
        - products
        - isOverBoxReservation
        - customerEmail
        - customerPhone
        - reservationDelivery
        - createdAt
        - updatedAt
      properties:
        reservationId:
          type: string
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the reservation, prefixed with `reservation-` and followed
            by a 36-character UUID.
        reservationCode:
          type: string
          example: XXX12345A
          description: The generated code. Can be used by a customer on the MT.Matic.
        reservationStatus:
          $ref: '#/components/schemas/ReservationStatus'
        orderId:
          type: string
          example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the order, prefixed with `order-` and followed by a 36
            characters long UUID.
          nullable: true
        customerLocale:
          allOf:
            - $ref: '#/components/schemas/Locale'
          description: Locale of the customer
        remarks:
          type: string
          description: Additional remarks
          nullable: true
          example: hello
        products:
          type: array
          items:
            type: object
            required:
              - productId
              - quantity
              - packDetails
              - productCodes
              - name
            properties:
              productId:
                type: string
                description: The internal Lochting ID of the product, prefixed with `product-` and followed by a 36-character UUID.
                example: product-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
                nullable: true
              quantity:
                type: integer
                description: Quantity reserved
                example: 2
              packDetails:
                type: array
                description: An array of pack details. Can be empty if the robot did not reserve the products yet.
                items:
                  type: object
                  properties:
                    packId:
                      type: string
                      description: The unique ID of the pack
                      example: '2020230310114456'
                    scanCode:
                      type: string
                      description: The scan code of the pack. Contains FMD data
                      example: '01054005810010171029065B/1\u001d17250131211WTLWMM29T'
              productCodes:
                $ref: '#/components/schemas/ProductCodes'
              name:
                type: object
                properties:
                  nl_BE:
                    type: string
                    description: NL translation
                  fr_BE:
                    type: string
                    description: FR translation
          description: Reserved products
        isOverBoxReservation:
          type: boolean
        customerEmail:
          type: string
          example: johndoe@lochting.com
          description: Email address of the customer
          nullable: true
        customerPhone:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
          nullable: true
        reservationDelivery:
          type: object
          properties:
            id:
              type: string
              example: 7bd4f856-705e-46ed-b475-ad5740e07c62
              description: The unique ID of the delivery
            destination:
              type: integer
              example: 2
              description: The output destination id
          description: Details about the reservation delivery
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 datetime in UTC
          example: '2020-02-25T10:20:30+00:00'
        updatedAt:
          type: string
          format: date-time
          description: ISO 8601 datetime in UTC
          example: '2020-02-25T10:20:30+00:00'
          nullable: true
    ReservationItem:
      type: object
      required:
        - reservationId
        - reservationCode
        - reservationStatus
        - createdAt
      properties:
        reservationId:
          type: string
          example: reservation-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the reservation, prefixed with `reservation-` and followed
            by a 36-character UUID.
        reservationCode:
          type: string
          example: XXX12345A
          description: The generated code. Can be used by a customer on the MT.Matic.
        reservationStatus:
          $ref: '#/components/schemas/ReservationStatus'
        orderId:
          type: string
          example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the order, prefixed with `order-` and followed by a 36
            characters long UUID.
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 datetime in UTC
          example: '2020-02-25T10:20:30+00:00'
        customerLocale:
          allOf:
            - $ref: '#/components/schemas/Locale'
          description: Locale of the customer
          nullable: true
        remarks:
          type: string
          description: Additional remarks
          nullable: true
        customerEmail:
          type: string
          example: johndoe@lochting.com
          description: Email address of the customer
          nullable: true
        customerPhone:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
          nullable: true
    ReservationCreateItem:
      type: object
      required:
        - orderId
        - customerLocale
      properties:
        orderId:
          type: string
          example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the order, prefixed with `order-` and followed by a 36
            characters long UUID.
        customerId:
          type: string
          example: identifiedCustomer-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            Optional customer id, prefixed with `identifiedCustomer-` and followed
            by a 36-character UUID.
          nullable: true
        customerEmail:
          type: string
          example: johndoe@lochting.com
          description: Email address of the customer
          nullable: true
        customerLocale:
          allOf:
            - $ref: '#/components/schemas/Locale'
          description: Locale of the customer
        customerPhone:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
          nullable: true
        remarks:
          type: string
          description: Additional remarks
          nullable: true
        muteAllNotifications:
          type: boolean
          example: true
          description: Indicates if Lochting has to mute all communications (default true)
          nullable: true
        numberOfOverBoxes:
          type: integer
          example: 1
          description: >-
            Number of overboxes to reserve. Defaults to `1` when
            `isOverBoxReservation` is true, otherwise `0`.
          nullable: true
    ReservationCreateProductLine:
      type: object
      required:
        - productCode
        - quantity
        - reserveIn
      properties:
        productCode:
          type: object
          required:
            - type
            - value
          properties:
            type:
              $ref: '#/components/schemas/ProductCodeType'
            value:
              type: string
              example: '1234567'
              description: The product code value
          description: The unique product code
        quantity:
          type: integer
          example: 3
          description: Quantity to reserve in the provided location
        reserveIn:
          type: string
          example: robot
          description: Location where to reserve the item(s)
          enum:
            - robot
            - locker
    StockImport:
      type: object
      required:
        - stockType
        - stockSourceLabel
        - replaceCurrentStock
        - productStock
      properties:
        stockType:
          $ref: '#/components/schemas/stockType'
        stockSourceLabel:
          type: string
          example: 'Robot Stock'
          description: A human readable label of the stock source
        replaceCurrentStock:
          type: boolean
          description: Before importing stock, remove all previously imported stock first
        productStock:
          type: array
          description: Product stock
          items:
            type: object
            required:
              - productCode
              - quantity
            properties:
              productCode:
                type: object
                required:
                  - type
                  - value
                properties:
                  type:
                    $ref: '#/components/schemas/ProductCodeType'
                  value:
                    type: string
                    example: '1234567'
                    description: The product code value
                description: The unique product code
              quantity:
                type: integer
                example: 3
                description: Quantity in stock
    PriceImport:
      type: object
      required:
        - replaceCurrentPrices
        - productPrices
      properties:
        replaceCurrentPrices:
          type: boolean
          description: Before importing prices, remove all previously imported prices first
        productPrices:
          type: array
          items:
            type: object
            required:
              - productCode
              - price
              - vatRate
            properties:
              productCode:
                type: object
                required:
                  - type
                  - value
                properties:
                  type:
                    $ref: '#/components/schemas/ProductCodeType'
                  value:
                    type: string
                    example: '1234567'
                    description: The product code value
                description: The unique product code
              price:
                type: integer
                description: Price in cents
              vatRate:
                type: integer
                minimum: 0
                maximum: 100
                example: 21
              promotionalPrice:
                type: integer
                description: Price in cents
          description: Product prices
    ShipmentDetails:
      type: object
      required:
        - shipmentId
        - orderId
        - salesChannelId
        - customerFirstName
        - customerLastName
        - customerPhone
        - customerEmailAddress
        - shippingStreet
        - shippingStreetNr
        - shippingZipCode
        - shippingCity
        - shippingCountry
        - carrierCode
        - createdAt
        - weight
      properties:
        shipmentId:
          type: string
          example: shipment-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the shipment, prefixed with `shipment-` and followed by a
            36-character UUID.
        orderId:
          type: string
          example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the order, prefixed with `order-` and followed by a 36
            characters long UUID.
        salesChannelId:
          type: string
          example: webshop-03cac0fc-feaf-5bc5-a3d1-8dc5e80ada46
          description: >-
            The ID of the sales channel, prefixed with `webshop-` or `device-`
            and followed by a 36-character UUID.
        customerFirstName:
          type: string
          example: John
          description: First name of customer
        customerLastName:
          type: string
          example: Doe
          description: Last name of customer
        customerPhone:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
        customerEmailAddress:
          type: string
          example: johndoe@lochting.com
          description: >-
            Email address of the customer to whom the track and trace email will
            be sent
        shippingStreet:
          type: string
          example: Dendermondsesteenweg
          description: Street
        shippingStreetNr:
          type: string
          example: 140c
          description: Street number + box of shipping address
        shippingZipCode:
          type: string
          example: '9000'
          description: ZIP code of shipping address
        shippingCity:
          type: string
          example: Gent
          description: City of shipping address
        shippingCountry:
          allOf:
            - $ref: '#/components/schemas/Country'
          description: ISO 3166-1 alpha-2 country code of shipping address
        carrierCode:
          type: string
          example: bpost
          description: Carrier (currently only bpost)
        createdAt:
          type: string
          example: '2020-02-25 10:20:30'
          description: UTC datetime in `Y-m-d H:i:s` format
        updatedAt:
          type: string
          example: '2020-02-25 10:20:30'
          description: UTC datetime in `Y-m-d H:i:s` format
          nullable: true
        weight:
          allOf:
            - $ref: '#/components/schemas/Weight'
          description: the weight of the parcel
        trackingNumber:
          type: string
          example: '323201150859923439129030'
          description: The tracking number
          nullable: true
        trackingUrl:
          type: string
          example: >-
            https://tracking.eu-central-1-0.sendcloud.sc/forward?carrier=bpost&code=323201150859923439129030&destination=BE&lang=nl-nl&source=BE&type=parcel&verification=2300&servicepoint_verification=&created_at=2023-04-25
          description: Tracking url
          nullable: true
        status:
          allOf:
            - $ref: '#/components/schemas/Status'
          nullable: true
    ShipmentListItem:
      type: object
      required:
        - shipmentId
        - salesChannelId
        - orderId
        - customerFirstName
        - customerLastName
        - customerPhone
        - carrierCode
        - createdAt
        - weight
      properties:
        shipmentId:
          type: string
          example: shipment-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the shipment, prefixed with `shipment-` and followed by a
            36-character UUID.
        salesChannelId:
          type: string
          example: webshop-03cac0fc-feaf-5bc5-a3d1-8dc5e80ada46
          description: >-
            The ID of the sales channel, prefixed with `webshop-` or `device-`
            and followed by a 36-character UUID.
        orderId:
          type: string
          example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the order, prefixed with `order-` and followed by a 36
            characters long UUID.
        customerFirstName:
          type: string
          example: John
          description: First name of customer
        customerLastName:
          type: string
          example: Doe
          description: Last name of customer
        customerPhone:
          type: string
          example: '+32412345678'
          description: >-
            Mobile phone number of the customer (not a landline). Prefer E.164 format
            with a country prefix (e.g. +32412345678) to ensure SMS messages can be
            sent successfully.
        carrierCode:
          type: string
          example: bpost
          description: Carrier (currently only bpost)
        createdAt:
          type: string
          example: '2020-02-25 10:20:30'
          description: UTC datetime in `Y-m-d H:i:s` format
        updatedAt:
          type: string
          example: '2020-02-25 10:20:30'
          description: UTC datetime in `Y-m-d H:i:s` format
          nullable: true
        weight:
          allOf:
            - $ref: '#/components/schemas/Weight'
          description: the weight of the parcel
        status:
          allOf:
            - $ref: '#/components/schemas/Status'
          nullable: true
    ShipmentCreateItem:
      type: object
      required:
        - orderId
        - weightInGrams
      properties:
        orderId:
          type: string
          example: order-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the order, prefixed with `order-` and followed by a 36
            characters long UUID.
        weightInGrams:
          type: number
          example: 900
          description: The weight in grams of the parcel
    Status:
      type: string
      description: The status of the shipment
      enum:
        - Address invalid
        - Announced
        - 'Announced: not collected'
        - Announcement failed
        - At customs
        - At sorting
        - Awaiting customer pickup
        - Being announced
        - Being sorted
        - Cancellation request
        - Cancelled
        - Cancelled upstream
        - Delivered
        - Delivery attempt failed
        - Delivery delayed
        - Driver en route
        - En route to sorting center
        - Error collecting
        - Exception
        - No label
        - Not sorted
        - Parcel en route
        - Ready to send
        - Refused by recipient
        - Shipment collected by customer
        - Shipment picked up by driver
        - Sorted
        - Unable to deliver The parcel
      example: Announced
    Weight:
      type: object
      required:
        - amount
        - amountInGrams
        - amountInKilograms
      properties:
        amount:
          type: number
          example: 900
        amountInGrams:
          type: number
          example: 900
        amountInKilograms:
          type: number
          example: 0.9
    WebhookCreateItem:
      type: object
      required:
        - url
        - webhookType
      properties:
        url:
          type: string
          example: https://www.example.com
          description: The url that needs to be called with the POST (json) request
        webhookType:
          $ref: '#/components/schemas/WebhookType'
        authenticationType:
          $ref: '#/components/schemas/WebhookAuthenticationType'
        secret:
          type: string
          description: >-
            The secret to be used in the `X-Webhook-Secret` header when the
            webhook url is called
        contactEmailAddress:
          type: string
          format: email
          example: john@doe.com
          description: >-
            The contact email to be used to notify you when webhook calls fail
    WebhookListItem:
      type: object
      required:
        - webhookId
        - url
        - webhookType
        - createdOn
      properties:
        webhookId:
          type: string
          example: webhook-c7d932c1-84e8-410c-a9b2-18bf739d6b8b
          description: >-
            The ID of the webhook, prefixed with `webhook-` and followed by a 36
            characters long UUID.
        url:
          type: string
          example: https://www.this-is-a-callback-url.org
          description: The url that will be called when the webhook is activated.
        webhookType:
          $ref: '#/components/schemas/WebhookType'
        createdOn:
          type: string
          example: '2020-02-25 10:20:30'
          description: UTC datetime in `Y-m-d H:i:s` format
        updatedOn:
          type: string
          example: '2020-02-25 10:20:30'
          description: UTC datetime in `Y-m-d H:i:s` format
          nullable: true
    WebhookType:
      type: string
      description: The webhook type
      enum:
        - orderWasAccepted
        - orderStatusWasUpdated
        - reservationWasCreated
        - reservationStatusWasUpdated
        - shipmentStatusWasUpdated
      example: orderWasAccepted
    WebhookAuthenticationType:
      type: string
      description: The authentication type to use when the webhook url is called
      enum:
        - none
        - secret
      example: none
    PaymentMethod:
      type: string
      description: The payment method
      enum:
        - maestro
        - bancontact
        - visa_mastercard
        - paypal
        - carte_bleue
        - offline_payment
        - payconiq
        - tyro_mastercard
        - free
      example: bancontact
      nullable: true
    OrderStatus:
      type: string
      description: The order status
      enum:
        - pending
        - paid
        - readyToPickUpInStore
        - complete
        - canceled
      example: paid
    List:
      type: object
      required:
        - total
        - items
      properties:
        pagination:
          type: object
          required:
            - page
            - size
          properties:
            page:
              type: integer
              example: 1
              description: Page number
            size:
              type: integer
              example: 10
              description: Page size
          description: Pagination
        total:
          type: integer
          example: 1
          description: Total number of items.
        items:
          type: array
          items: {}
          description: List of items
    Currency:
      type: string
      description: Currency
      enum:
        - EUR
        - AUD
        - SGD
        - CZK
        - GBP
        - USD
    CurrencyOutput:
      type: object
      required:
        - name
        - symbol
      properties:
        name:
          type: string
          example: EUR
          description: name of the currency
        symbol:
          type: string
          example: €
          description: unicode symbol of the currency
    PriceOutput:
      type: object
      required:
        - amountInCents
        - currency
      properties:
        amountInCents:
          type: integer
          example: 4000
        currency:
          $ref: '#/components/schemas/CurrencyOutput'
    ShippingMethod:
      type: string
      enum:
        - pickup
        - locker
        - localDelivery
        - serviceDelivery
      example: pickup
    ProductCodeType:
      type: string
      description: The type of product code
      enum:
        - EanCode
        - GtinCode
        - CnkCode
        - Acl13Code
        - Cip13Code
        - CipOrAcl7Code
        - OspCode
        - PznCode
        - PznAustriaCode
        - UdiCode
        - CodeNational
        - PdkCode
        - SuklCode
      example: EanCode
    ProductCodes:
      type: object
      description: List of product codes
      properties:
        EanCode:
          type: array
          items:
            type: string
          example: ['4030539112468', '4030539113007']
        GtinCode:
          type: array
          items:
            type: string
          example: ['08717606032053']
        CnkCode:
          type: array
          items:
            type: string
          example: ['1013168']
        Acl13Code:
          type: array
          items:
            type: string
          example: ['3401123456789']
        Cip13Code:
          type: array
          items:
            type: string
          example: ['3400123456789']
        CipOrAcl7Code:
          type: array
          items:
            type: string
          example: ['1234567']
        OspCode:
          type: array
          items:
            type: string
          example: ['some-code-OspCode']
        PznCode:
          type: array
          items:
            type: string
          example: ['1234567', '12345678']
        PznAustriaCode:
          type: array
          items:
            type: string
          example: ['1234567', '7654321']
        UdiCode:
          type: array
          items:
            type: string
          example: ['1234567']
        CodeNational:
          type: array
          items:
            type: string
          example: ['123456']
        PdkCode:
          type: array
          items:
            type: string
          example: ['1234567']
        SuklCode:
          type: array
          items:
            type: string
          example: ['1234567']
        CustomCode:
          type: array
          items:
            type: string
          example: ['Custom1234567']
    SalesChannelType:
      type: string
      description: The sales channel type
      enum:
        - mobileApplication
        - pos
        - other
      example: pos
    stockType:
      type: string
      description: The stockType type
      enum:
        - inHouse
        - robot
      example: inHouse
    Country:
      type: string
      enum:
        - BE
        - FR
        - AU
        - DE
        - ES
        - AT
        - CZ
        - SG
        - PT
      example: BE
    Locale:
      type: string
      enum:
        - nl_BE
        - fr_BE
        - en_BE
        - de_BE
        - fr_FR
        - en_FR
        - de_DE
        - en_DE
        - en_AU
        - en_ES
        - es_ES
        - en_AT
        - de_AT
        - en_CZ
        - cs_CZ
        - en_SG
        - en_PT
        - pt_PT
      example: nl_BE
    Gender:
      type: string
      enum:
        - male
        - female
        - nonBinary
        - notDisclosed
      example: female
    ReservationStatus:
      type: string
      description: The reservation status
      enum:
        - incomplete
        - complete
        - deliveryRequested
        - deliveryRequestFailed
        - delivered
        - deliveryFailed
        - pickedUp
        - pickUpFailed
        - canceled
      example: incomplete
    UpdateReservationStatus:
      type: string
      description: The reservation status
      enum:
        - pickedUp
        - canceled
      example: canceled
tags:
  - name: Authentication
    description: >-
      In the Lochting software, API access is secured with JSON Web Tokens (JWT).


      Obtain and refresh access tokens for protected endpoints. See
      [Authentication](/authentication) for token lifetimes, scopes, and code
      examples.
  - name: Orders
    description: >-
      In the Lochting software, an order represents a sale of products. Orders
      can include customer details, delivery information, payment method, and
      order lines.


      Through the API you can create, retrieve, update, and list orders. An order
      can be linked to a reservation when products are set aside for pickup at
      an [MT.Matic](https://www.lochting.com/en/products/mt-matic/) or
      MT.Collect.
  - name: Customers
    description: >-
      In the Lochting software, a customer represents an identified person linked
      to a branch.


      Through the API you can create, retrieve, update, and list customers.
      Customers can be referenced when creating orders and reservations.
  - name: Reservations
    description: >-
      In the Lochting software, a reservation is a collection of products set
      aside for pickup by a customer.


      Reservations can be fulfilled through two devices:

      * **MT.Matic** — products are reserved in the dispensing robot and
      collected through the [MT.Matic](https://www.lochting.com/en/products/mt-matic/)
      vending machine.

      * **MT.Collect** — products are reserved in a parcel locker and collected
      through the MT.Collect parcel locker.


      Each reservation is assigned a pickup code. The customer provides this code
      at the MT.Matic or MT.Collect to retrieve their products.


      Through the API you can create, retrieve, update, and list reservations,
      request delivery, and retrieve QR codes and overbox barcodes (`overBoxBarCodes`).
  - name: Robot
    description: >-
      In the Lochting software, the robot integration connects to a product
      storage robot such as the Meditech Pharma dispensing robot.


      Through the API you can list products in the robot selection, query stock
      levels, and request ad-hoc delivery of products by product codes. Deliver
      Product requires the `reservations` API key scope.
  - name: Stock
    description: >-
      In the Lochting software, stock levels determine whether a product is
      available for sale on a sales channel (webshop, MT.Matic, MT.Collect, ...).


      Through the API you can query robot and locker stock for product codes and
      import stock updates to keep inventory in sync.
  - name: Prices
    description: >-
      In the Lochting software, prices determine how products are sold on a sales
      channel. All prices are considered tax included.


      Prices apply per sales channel, such as MT.Shop, MT.Matic, MT.Vision, and
      MT.Collect.


      Through the API you can import price updates to keep pricing in sync across
      channels.
  - name: Shipments
    description: >-
      In the Lochting software, a shipment represents a package sent from an
      order.


      :::note

      At this moment, Lochting shipments are only available for Belgian
      customers.


      In order to start using Lochting shipments, the integration needs to be
      configured for your branch. Please [contact
      us](https://www.lochting.com/en/contact/) so we can set it up for you.
      Make sure to provide us the address from where shipments will be sent.

      :::


      Through the API you can create, retrieve, and list shipments, and generate
      shipment labels. In Belgium, shipments are sent by the Bpost carrier.
      Shipments can have a weight up to 10 kg. A shipment is ready to send once
      its label has been generated.
  - name: Webhooks
    description: >-
      In the Lochting software, webhooks send real-time event notifications to
      an external URL when something changes on the platform.


      Configure webhooks to receive event payloads. See [Webhooks](/webhooks)
      for payload examples, testing, and security.
