openapi: 3.0.4
info:
  title: Norce Checkout - nShift Adapter API
  description: |-
    Build 2026-01-13 12:26:53

    The nShift Adapter API is used to create and manage nShift shippings.
  version: 1.0.0
tags:
  - name: Callback
  - name: Shipping
paths:
  /api/checkout/v1/callback/orders/{order_id}/shippings/{shipping_id}/update-nshift-session:
    post:
      tags:
        - Norce Callbacks
      summary: Handle Cart changed in Norce order.
      description: Cart changed.
      operationId: CartChanged
      parameters:
        - name: x-merchant
          in: header
          description: Merchant identifier.
          required: true
          schema:
            type: string
            example: norce
          example: norce
        - name: x-channel
          in: header
          description: Channel identifier
          required: true
          schema:
            type: string
            example: '1'
          example: '1'
        - name: order_id
          in: path
          description: Order identifier
          required: true
          schema:
            type: string
        - name: shipping_id
          in: path
          description: Shipping identifier
          required: true
          schema:
            type: string
      requestBody:
        description: Updated order
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/NorceOrder'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PatchOperation'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - {}
  /api/checkout/v1/callback/orders/{order_id}/shippings/{shipping_id}/state-changed:
    post:
      tags:
        - Norce Callbacks
      summary: Handle State changed in Norce order.
      description: State changed.
      operationId: StateChanged
      parameters:
        - name: x-merchant
          in: header
          description: Merchant identifier.
          required: true
          schema:
            type: string
            example: norce
          example: norce
        - name: x-channel
          in: header
          description: Channel identifier
          required: true
          schema:
            type: string
            example: '1'
          example: '1'
        - name: order_id
          in: path
          description: Order identifier
          required: true
          schema:
            type: string
        - name: shipping_id
          in: path
          description: Shipping identifier
          required: true
          schema:
            type: string
      requestBody:
        description: Updated order
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/NorceOrder'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PatchOperation'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - {}
  /api/checkout/v1/callback/orders/{order_id}/shippings/{shipping_id}/shipping-changed:
    post:
      tags:
        - nShift client side callbacks
      summary: >-
        Shipping changed - called when user selects a shipping option in the
        nShift widget
      description: Shipping changed.
      operationId: ShippingChanged
      parameters:
        - name: x-merchant
          in: header
          description: Merchant identifier.
          required: true
          schema:
            type: string
            example: norce
          example: norce
        - name: x-channel
          in: header
          description: Channel identifier
          required: true
          schema:
            type: string
            example: '1'
          example: '1'
        - name: order_id
          in: path
          description: Order identifier
          required: true
          schema:
            type: string
        - name: shipping_id
          in: path
          description: Shipping identifier
          required: true
          schema:
            type: string
      requestBody:
        description: >-
          The selection result from the nShift widget containing the user's
          selection
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/NShiftSelectionResult'
              description: >-
                Represents the result object from the nShift Checkout widget
                when a user makes a selection.

                This is sent via the resultCallback when the user interacts with
                the widget.
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      security:
        - {}
  /api/checkout/v1/orders/{order_id}/shippings:
    post:
      tags:
        - nShift Delivery Checkout Orders
      summary: Create a new nShift session
      description: Requires an existing order.
      operationId: CreateNShiftSession
      parameters:
        - name: order_id
          in: path
          description: Order identifier
          required: true
          schema:
            type: string
        - name: x-merchant
          in: header
          description: Merchant identifier.
          required: true
          schema:
            type: string
            example: norce
          example: norce
        - name: x-channel
          in: header
          description: Channel identifier
          required: true
          schema:
            type: string
            example: '1'
          example: '1'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NShiftSession'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - {}
  /api/checkout/v1/orders/{order_id}/shippings/{shipping_id}:
    get:
      tags:
        - nShift Delivery Checkout Orders
      summary: Get nShift session
      description: Used to get the session with shipping options
      operationId: GetNShiftSession
      parameters:
        - name: order_id
          in: path
          description: Order identifier
          required: true
          schema:
            type: string
        - name: shipping_id
          in: path
          description: Shipping identifier
          required: true
          schema:
            type: string
        - name: x-merchant
          in: header
          description: Merchant identifier.
          required: true
          schema:
            type: string
            example: norce
          example: norce
        - name: x-channel
          in: header
          description: Channel identifier
          required: true
          schema:
            type: string
            example: '1'
          example: '1'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NShiftSession'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - {}
  /api/checkout/v1/orders/{order_id}/shippings/{shipping_id}/remove:
    post:
      tags:
        - nShift Delivery Checkout Orders
      summary: Remove a nShift session
      description: Requires an existing shipping on order.
      operationId: RemoveNShiftSession
      parameters:
        - name: order_id
          in: path
          description: Order identifier
          required: true
          schema:
            type: string
        - name: shipping_id
          in: path
          description: Shipping identifier
          required: true
          schema:
            type: string
        - name: x-merchant
          in: header
          description: Merchant identifier.
          required: true
          schema:
            type: string
            example: norce
          example: norce
        - name: x-channel
          in: header
          description: Channel identifier
          required: true
          schema:
            type: string
            example: '1'
          example: '1'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NShiftSession'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - {}
components:
  schemas:
    Addon:
      type: object
      properties:
        reference:
          type: string
          nullable: true
        price:
          type: number
          format: double
      additionalProperties: false
    Address:
      type: object
      properties:
        type:
          allOf:
            - $ref: '#/components/schemas/CustomerType'
        givenName:
          type: string
          nullable: true
        familyName:
          type: string
          nullable: true
        careOf:
          type: string
          nullable: true
        reference:
          type: string
          nullable: true
        organizationName:
          type: string
          nullable: true
        streetAddress:
          type: string
          nullable: true
        streetAddress2:
          type: string
          nullable: true
        postalCode:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        region:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        nationalIdentificationNumber:
          type: string
          nullable: true
        organizationIdentificationNumber:
          type: string
          nullable: true
        attributes:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
      additionalProperties: false
    Callback:
      type: object
      properties:
        id:
          type: string
          nullable: true
        adapterId:
          type: string
          nullable: true
        event:
          allOf:
            - $ref: '#/components/schemas/CallbackEvent'
        url:
          type: string
          nullable: true
      additionalProperties: false
    CallbackEvent:
      enum:
        - validate
        - accept
        - complete
      type: string
    Cart:
      type: object
      properties:
        reference:
          type: string
          nullable: true
        items:
          type: array
          items:
            $ref: '#/components/schemas/Item'
          nullable: true
        discounts:
          type: array
          items:
            $ref: '#/components/schemas/Discount'
          nullable: true
        total:
          allOf:
            - $ref: '#/components/schemas/Price'
          nullable: true
        attributes:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
      additionalProperties: false
    Consent:
      type: object
      properties:
        id:
          type: string
          nullable: true
        checked:
          type: boolean
        text:
          type: string
          nullable: true
        required:
          type: boolean
      additionalProperties: false
    Customer:
      type: object
      properties:
        billing:
          allOf:
            - $ref: '#/components/schemas/Address'
          nullable: true
        shipping:
          allOf:
            - $ref: '#/components/schemas/Address'
          nullable: true
        type:
          allOf:
            - $ref: '#/components/schemas/CustomerType'
        attributes:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
      additionalProperties: false
    CustomerType:
      enum:
        - person
        - organization
      type: string
    DeliveryDetails:
      type: object
      properties:
        carrier:
          type: string
          nullable: true
        class:
          type: string
          nullable: true
        product:
          allOf:
            - $ref: '#/components/schemas/Product'
          nullable: true
        pickupLocation:
          allOf:
            - $ref: '#/components/schemas/PickupLocation'
          nullable: true
      additionalProperties: false
    Discount:
      type: object
      properties:
        type:
          allOf:
            - $ref: '#/components/schemas/DiscountType'
        name:
          type: string
          nullable: true
        code:
          type: string
          nullable: true
        value:
          allOf:
            - $ref: '#/components/schemas/Price'
          nullable: true
        attributes:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
      additionalProperties: false
    DiscountType:
      enum:
        - item
        - shipping
      type: string
    Error:
      type: object
      properties:
        code:
          type: string
          description: Error code
          nullable: true
          example: nshift-error
        message:
          type: string
          description: Detailed error information
          nullable: true
          example: No warehouse configured for this region
        nShiftError:
          allOf:
            - $ref: '#/components/schemas/NShiftError'
          description: Error if originating from nShift
          nullable: true
      additionalProperties: false
    Hook:
      type: object
      properties:
        id:
          type: string
          nullable: true
        adapterId:
          type: string
          nullable: true
        subscribeTo:
          type: string
          nullable: true
        target:
          type: string
          nullable: true
        invoke:
          type: string
          nullable: true
      additionalProperties: false
    Item:
      type: object
      properties:
        id:
          type: string
          nullable: true
        reference:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        sku:
          type: string
          nullable: true
        url:
          type: string
          nullable: true
        imageUrl:
          type: string
          nullable: true
        quantity:
          type: integer
          format: int32
        unit:
          type: string
          nullable: true
        price:
          allOf:
            - $ref: '#/components/schemas/Price'
          nullable: true
        total:
          allOf:
            - $ref: '#/components/schemas/Price'
          nullable: true
        originalTotal:
          allOf:
            - $ref: '#/components/schemas/Price'
          nullable: true
        vatRate:
          type: number
          format: double
        discounts:
          type: array
          items:
            $ref: '#/components/schemas/Discount'
          nullable: true
        logistics:
          allOf:
            - $ref: '#/components/schemas/Logistics'
          nullable: true
        attributes:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
      additionalProperties: false
    Logistics:
      type: object
      properties:
        weight:
          type: integer
          format: int32
          nullable: true
        height:
          type: integer
          format: int32
          nullable: true
        width:
          type: integer
          format: int32
          nullable: true
        length:
          type: integer
          format: int32
          nullable: true
        tags:
          type: array
          items:
            type: string
          nullable: true
        shippingDate:
          type: string
          format: date-time
          nullable: true
      additionalProperties: false
    NShiftError:
      type: object
      properties:
        errorCode:
          type: string
          nullable: true
        errorMessages:
          type: array
          items:
            type: string
          nullable: true
        correlationId:
          type: string
          nullable: true
      additionalProperties: false
    NShiftFieldValue:
      type: object
      properties:
        fieldId:
          type: string
          description: ID of the field.
          nullable: true
        value:
          type: string
          description: Value of the field as a string.
          nullable: true
      additionalProperties: false
      description: Represents a field value in the nShift widget result.
    NShiftSelectedAddon:
      type: object
      properties:
        addonId:
          type: string
          description: ID of the addon.
          nullable: true
        price:
          type: number
          description: >-
            Price that has been added to the total price because this addon is
            selected.
          format: double
          nullable: true
        originalPrice:
          type: number
          description: >-
            Original price that has been added to the total original price
            because this addon is selected.
          format: double
          nullable: true
        fields:
          type: array
          items:
            $ref: '#/components/schemas/NShiftFieldValue'
          description: Array of field inputs under the selected addon.
          nullable: true
        additionalValues:
          type: object
          additionalProperties:
            nullable: true
          description: Additional key-value pairs defined by the checkout configuration.
          nullable: true
      additionalProperties: false
      description: Represents a selected addon in the nShift widget result.
    NShiftSelectionResult:
      type: object
      properties:
        valid:
          type: boolean
          description: Whether the result is valid and can be used to create a shipment.
        sessionId:
          type: string
          description: >-
            UUID of the session used to request the shipping options. Required
            to create a shipment.
          nullable: true
        checkoutId:
          type: string
          description: >-
            UUID of the checkout configuration used to generate the shipping
            options.
          nullable: true
        checkoutVersion:
          type: string
          description: >-
            Version number of the checkout configuration used to generate the
            shipping options.
          nullable: true
        optionId:
          type: string
          description: >-
            UUID of the shipping option that is selected in the widget. Required
            to create a shipment.
          nullable: true
        pickupPointId:
          type: string
          description: |-
            Carrier-specific ID of the pickup point selected in the widget.
            Required only if the shipping option uses pickup points.
          nullable: true
        timeSlotId:
          type: string
          description: |-
            Carrier-specific ID of the time slot selected in the widget.
            Required only if the shipping option uses time slots.
          nullable: true
        addons:
          type: array
          items:
            $ref: '#/components/schemas/NShiftSelectedAddon'
          description: Array of addons selected under the selected shipping option.
          nullable: true
        fields:
          type: array
          items:
            $ref: '#/components/schemas/NShiftFieldValue'
          description: Array of field inputs under the selected shipping option.
          nullable: true
        totalPrice:
          type: number
          description: Total price of the selected shipping option and any selected addons.
          format: double
          nullable: true
        totalOriginalPrice:
          type: number
          description: >-
            Total original price of the selected shipping option and any
            selected addons.
          format: double
          nullable: true
        taxRate:
          type: number
          description: Tax rate set in the checkout configuration.
          format: double
          nullable: true
        additionalValues:
          type: object
          additionalProperties:
            nullable: true
          description: Additional key-value pairs defined by the checkout configuration.
          nullable: true
        resultsVersion:
          type: string
          description: Version of the results object. Currently always "2".
          nullable: true
        widgetVersion:
          type: string
          description: >-
            Version of the widget that generated the results object. Currently
            always "2".
          nullable: true
      additionalProperties: false
      description: >-
        Represents the result object from the nShift Checkout widget when a user
        makes a selection.

        This is sent via the resultCallback when the user interacts with the
        widget.
    NShiftSession:
      type: object
      properties:
        shippingId:
          type: string
          description: Shipping identifier
          nullable: true
        sessionId:
          type: string
          description: Session id
          nullable: true
        selectedOptionId:
          type: string
          description: >-
            The currently selected shipping option ID. In CreateSession this is
            the first valid option,

            in GetSession this is the option that was previously selected (from
            shipping reference).

            Used by the frontend to preselect the same option when the user
            refreshes the checkout page.
          nullable: true
        settings:
          allOf:
            - $ref: '#/components/schemas/WidgetSettings'
          description: Widget settings for the nShift checkout widget
          nullable: true
        data:
          allOf:
            - $ref: '#/components/schemas/ShippingOptionsData'
          description: >-
            Shipping options data from nShift (matching ShippingOptionsResponse
            format for widget compatibility)
          nullable: true
      additionalProperties: false
    NorceOrder:
      type: object
      properties:
        id:
          type: string
          nullable: true
        merchant:
          type: string
          nullable: true
        channel:
          type: string
          nullable: true
        reference:
          type: string
          nullable: true
        created:
          type: string
          format: date-time
        lastModified:
          type: string
          format: date-time
        state:
          allOf:
            - $ref: '#/components/schemas/State'
          nullable: true
        culture:
          type: string
          nullable: true
        currency:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
        cart:
          allOf:
            - $ref: '#/components/schemas/Cart'
          nullable: true
        shippings:
          type: array
          items:
            $ref: '#/components/schemas/Shipping'
          nullable: true
        payments:
          type: array
          items:
            $ref: '#/components/schemas/Payment'
          nullable: true
        customer:
          allOf:
            - $ref: '#/components/schemas/Customer'
          nullable: true
        consents:
          type: array
          items:
            $ref: '#/components/schemas/Consent'
          nullable: true
        validations:
          type: array
          items:
            $ref: '#/components/schemas/Callback'
          nullable: true
        hooks:
          type: array
          items:
            $ref: '#/components/schemas/Hook'
          nullable: true
        notifications:
          type: array
          items:
            $ref: '#/components/schemas/Callback'
          nullable: true
        total:
          allOf:
            - $ref: '#/components/schemas/Price'
          nullable: true
        attributes:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
      additionalProperties: false
    OrderStatus:
      enum:
        - checkout
        - processing
        - accepted
        - completed
        - declined
        - removed
      type: string
    PatchOperation:
      type: object
      properties:
        op:
          type: string
          nullable: true
        path:
          type: string
          nullable: true
        value:
          nullable: true
      additionalProperties: false
    Payment:
      type: object
      properties:
        id:
          type: string
          nullable: true
        adapterId:
          type: string
          nullable: true
        reference:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        price:
          allOf:
            - $ref: '#/components/schemas/Price'
          nullable: true
        state:
          allOf:
            - $ref: '#/components/schemas/PaymentState'
        attributes:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
      additionalProperties: false
    PaymentState:
      enum:
        - intent
        - removed
        - processing
        - failed
        - confirmed
        - pending
        - declined
        - reserved
        - credited
        - captured
        - cancelled
        - refunded
      type: string
    PickupLocation:
      type: object
      properties:
        reference:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        address:
          allOf:
            - $ref: '#/components/schemas/PickupLocationAddress'
          nullable: true
      additionalProperties: false
    PickupLocationAddress:
      type: object
      properties:
        streetAddress:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        postalCode:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
      additionalProperties: false
    Price:
      type: object
      properties:
        includingVat:
          type: number
          format: double
        excludingVat:
          type: number
          format: double
      additionalProperties: false
    ProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
      additionalProperties: {}
    Product:
      type: object
      properties:
        reference:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
      additionalProperties: false
    Shipping:
      type: object
      properties:
        id:
          type: string
          nullable: true
        merchant:
          type: string
          nullable: true
        channel:
          type: string
          nullable: true
        state:
          allOf:
            - $ref: '#/components/schemas/ShippingState'
        reference:
          type: string
          nullable: true
        tmsReference:
          type: string
          nullable: true
        orderId:
          type: string
          nullable: true
        adapterId:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        total:
          allOf:
            - $ref: '#/components/schemas/Price'
          nullable: true
        vatRate:
          type: number
          format: double
        deliveryDetails:
          allOf:
            - $ref: '#/components/schemas/DeliveryDetails'
          nullable: true
        addons:
          type: array
          items:
            $ref: '#/components/schemas/Addon'
          nullable: true
        attributes:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
      additionalProperties: false
    ShippingAddon:
      type: object
      properties:
        id:
          type: string
          description: Addon identifier
          nullable: true
        name:
          type: string
          description: Addon name
          nullable: true
        description:
          type: string
          description: Addon description
          nullable: true
        price:
          type: number
          description: Addon price
          format: double
          nullable: true
        taxRate:
          type: number
          description: Tax rate percentage
          format: double
          nullable: true
        selected:
          type: boolean
          description: Whether the addon is selected
        required:
          type: boolean
          description: Whether the addon is required
      additionalProperties: false
    ShippingCategory:
      type: object
      properties:
        id:
          type: string
          description: Category identifier
          nullable: true
        name:
          type: string
          description: Category name
          nullable: true
        description:
          type: string
          description: Category description
          nullable: true
        sortOrder:
          type: integer
          description: Sort order for display
          format: int32
          nullable: true
      additionalProperties: false
    ShippingDeliveryTime:
      type: object
      properties:
        earliestDate:
          type: string
          description: Earliest delivery date
          nullable: true
        latestDate:
          type: string
          description: Latest delivery date
          nullable: true
        earliestTime:
          type: string
          description: Earliest delivery time
          nullable: true
        latestTime:
          type: string
          description: Latest delivery time
          nullable: true
        description:
          type: string
          description: Delivery time description
          nullable: true
      additionalProperties: false
    ShippingField:
      type: object
      properties:
        id:
          type: string
          description: Field identifier
          nullable: true
        name:
          type: string
          description: Field name
          nullable: true
        type:
          type: string
          description: Field type (e.g., text, select)
          nullable: true
        required:
          type: boolean
          description: Whether the field is required
        defaultValue:
          type: string
          description: Default value for the field
          nullable: true
        description:
          type: string
          description: Field description
          nullable: true
        options:
          type: array
          items:
            type: string
          description: Available options for select fields
          nullable: true
      additionalProperties: false
    ShippingOption:
      type: object
      properties:
        valid:
          type: boolean
          description: Whether the option is valid/available
        optionId:
          type: string
          description: Unique option identifier
          nullable: true
        categoryId:
          type: string
          description: Category identifier this option belongs to
          nullable: true
        name:
          type: string
          description: Display name of the option
          nullable: true
        title:
          type: string
          description: Title of the option (from nShift)
          nullable: true
        description:
          type: string
          description: Description of the option
          nullable: true
        carrierId:
          type: string
          description: Carrier identifier
          nullable: true
        carrierProductId:
          type: string
          description: Carrier product identifier
          nullable: true
        carrierProductVersion:
          type: integer
          description: Carrier product version
          format: int32
          nullable: true
        carrierProductName:
          type: string
          description: Carrier product name
          nullable: true
        carrierProductSourceSystem:
          type: string
          description: Carrier product source system
          nullable: true
        sourceSystemCarrierId:
          type: string
          description: Source system carrier identifier
          nullable: true
        sourceSystemProductId:
          type: string
          description: Source system product identifier
          nullable: true
        externalSystemCustomCarrier:
          type: string
          description: External system custom carrier
          nullable: true
        carrierName:
          type: string
          description: Carrier name
          nullable: true
        texts:
          type: array
          items:
            type: string
          description: Text descriptions for the option
          nullable: true
        priceDescription:
          type: string
          description: Price description text
          nullable: true
        price:
          type: number
          description: Price including VAT
          format: double
          nullable: true
        originalPriceDescription:
          type: string
          description: Original price description text
          nullable: true
        originalPrice:
          type: number
          description: Original price before discount
          format: double
          nullable: true
        taxRate:
          type: number
          description: Tax rate percentage
          format: double
          nullable: true
        logoId:
          type: string
          description: Logo identifier
          nullable: true
        logoUrl:
          type: string
          description: Logo URL
          nullable: true
        addons:
          type: array
          items:
            $ref: '#/components/schemas/ShippingAddon'
          description: Available addons for this option
          nullable: true
        fields:
          type: array
          items:
            $ref: '#/components/schemas/ShippingField'
          description: Fields for this option
          nullable: true
        deliveryTime:
          allOf:
            - $ref: '#/components/schemas/ShippingDeliveryTime'
          description: Delivery time information
          nullable: true
        pickupPoints:
          type: array
          items:
            $ref: '#/components/schemas/ShippingPickupPoint'
          description: Available pickup points
          nullable: true
        timeSlots:
          type: array
          items:
            $ref: '#/components/schemas/ShippingTimeSlot'
          description: Available time slots
          nullable: true
        externalSystemExtra:
          type: object
          additionalProperties:
            nullable: true
          description: External system extra data
          nullable: true
        noDefaultPickupPoint:
          type: boolean
          description: Whether to not use default pickup point
        additionalValues:
          type: object
          additionalProperties:
            nullable: true
          description: Additional values
          nullable: true
        tags:
          type: array
          items:
            type: string
          description: Tags for the option
          nullable: true
        additionalMerchantInfo:
          type: string
          description: Additional merchant info
          nullable: true
      additionalProperties: false
    ShippingOptionsData:
      type: object
      properties:
        options:
          type: array
          items:
            $ref: '#/components/schemas/ShippingOption'
          description: Available shipping options
          nullable: true
        addons:
          type: array
          items:
            $ref: '#/components/schemas/ShippingAddon'
          description: Global addons available for all options
          nullable: true
        fields:
          type: array
          items:
            $ref: '#/components/schemas/ShippingField'
          description: Global fields for all options
          nullable: true
        categories:
          type: array
          items:
            $ref: '#/components/schemas/ShippingCategory'
          description: Categories for grouping shipping options
          nullable: true
      additionalProperties: false
    ShippingPickupPoint:
      type: object
      properties:
        id:
          type: string
          description: Pickup point identifier
          nullable: true
        name:
          type: string
          description: Pickup point name
          nullable: true
        address1:
          type: string
          description: Address line 1
          nullable: true
        address2:
          type: string
          description: Address line 2
          nullable: true
        postalCode:
          type: string
          description: Postal code
          nullable: true
        city:
          type: string
          description: City
          nullable: true
        country:
          type: string
          description: Country
          nullable: true
        distance:
          type: number
          description: Distance from delivery address in meters
          format: double
          nullable: true
        openingHours:
          type: string
          description: Opening hours description
          nullable: true
        latitude:
          type: number
          description: Latitude coordinate
          format: double
          nullable: true
        longitude:
          type: number
          description: Longitude coordinate
          format: double
          nullable: true
      additionalProperties: false
    ShippingState:
      enum:
        - intent
        - removed
        - processing
        - failed
        - confirmed
      type: string
    ShippingTimeSlot:
      type: object
      properties:
        id:
          type: string
          description: Time slot identifier
          nullable: true
        date:
          type: string
          description: Delivery date
          nullable: true
        startTime:
          type: string
          description: Start time of the slot
          nullable: true
        endTime:
          type: string
          description: End time of the slot
          nullable: true
        price:
          type: number
          description: Additional price for this time slot
          format: double
          nullable: true
        description:
          type: string
          description: Time slot description
          nullable: true
      additionalProperties: false
    State:
      type: object
      properties:
        currentStatus:
          allOf:
            - $ref: '#/components/schemas/OrderStatus'
        transitions:
          type: array
          items:
            $ref: '#/components/schemas/Transition'
          nullable: true
      additionalProperties: false
    ThemeOverride:
      type: object
      properties:
        showLogos:
          type: boolean
          description: If set to false, no carrier logos will be shown in the widget.
          nullable: true
        showMap:
          type: boolean
          description: >-
            If set to false, no map will be shown when selecting pickup points
            in the widget.
          nullable: true
        showPickupPointInfo:
          type: boolean
          description: >-
            If set to false, no additional information for pickup points will be
            shown.
          nullable: true
        showCategories:
          type: boolean
          description: If set to false, no category headers will be shown in the widget.
          nullable: true
        showOriginalPrices:
          type: boolean
          description: >-
            If set to false, no original prices will be shown next to the normal
            price in the widget.
          nullable: true
        showDeliveryTime:
          type: boolean
          description: >-
            If set to false, no delivery times will be shown in the dedicated
            delivery time fields of the widget.
          nullable: true
        selectFirstAvailableOption:
          type: boolean
          description: >-
            If set to false, the first option is no longer automatically
            selected.
          nullable: true
        numberOfAlwaysVisibleTextLines:
          type: integer
          description: >-
            Set a value between 1-4 to display text fields 1-4 without an option
            being selected.
          format: int32
          nullable: true
        numberOfInitiallyVisibleOptions:
          type: integer
          description: >-
            Any options after this number will initially be hidden. If not set,
            all options will always be shown.
          format: int32
          nullable: true
      additionalProperties: false
    Transition:
      type: object
      properties:
        status:
          allOf:
            - $ref: '#/components/schemas/OrderStatus'
        timeStamp:
          type: string
          format: date-time
      additionalProperties: false
    WidgetSettings:
      type: object
      properties:
        widgetVersion:
          type: string
          description: Widget version. Must currently always be "2".
          nullable: true
        theme:
          type: string
          description: >-
            The name of the styling theme. The only valid theme right now is
            "nshift-theme1".
          nullable: true
        themeOverride:
          allOf:
            - $ref: '#/components/schemas/ThemeOverride'
          description: Object containing changes to the selected theme.
          nullable: true
        mode:
          type: string
          description: >-
            Set to "standard" for the normal widget, or to "product" for the
            read-only product page widget.
          nullable: true
        widthBreakpoints:
          allOf:
            - $ref: '#/components/schemas/WidthBreakpoints'
          description: Object for width breakpoints used for responsive styling.
          nullable: true
      additionalProperties: false
    WidthBreakpoints:
      type: object
      properties:
        narrow:
          type: integer
          description: Width threshold for narrow breakpoint.
          format: int32
          nullable: true
        ultraNarrow:
          type: integer
          description: Width threshold for ultra-narrow breakpoint.
          format: int32
          nullable: true
      additionalProperties: false
  securitySchemes:
    Bearer:
      type: apiKey
      description: >-
        Authorization header using the bearer scheme. Example: 'Bearer
        a3bcdABCaB12abc3AbCDAB5AbcABCaBcABC5ab3c5A0='
      name: Authorization
      in: header
