---
info:
  version: 2025-3
  contact: {}
  description: API for managing carts, products, and items.
  title: Cart Service API
paths:
  "/2025-3/cart-items":
    get:
      description: Retrieves all items in a specified cart, including their details
        and configurations.
      operationId: GetCartItems
      parameters:
      - explode: true
        in: query
        name: filter
        required: true
        schema:
          "$ref": "#/components/schemas/GetCartItemsQueryFilterDTO"
        style: deepObject
      responses:
        '200':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/GetCartItemsResponseDTO"
          description: A list of cart items with their details and configurations.
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:cart-items:read:all
      - oauth2:
        - cart:cart-items:read:authenticated
      summary: Get all cart items for a specific cart
      tags:
      - Cart Items
      x-beta: true
    post:
      description: Adds a new item to the specified cart, allowing the user to configure
        and check out a product.
      operationId: CreateCartItem
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/CreateCartItemBodyDTO"
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/CreateCartItemResponseDTO"
          description: The cart item has been successfully created.
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '404':
          description: The specified cart or product was not found.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:cart-items:create:one
      - oauth2:
        - cart:cart-items:create:authenticated
      summary: Create a new cart item
      tags:
      - Cart Items
      x-beta: true
  "/2025-3/cart-items/{cartItemId}":
    get:
      description: Retrieves a specific item in a specified cart, including its details
        and configurations.
      operationId: GetCartItem
      parameters:
      - description: The unique identifier of the cart item to retrieve.
        in: path
        name: cartItemId
        required: true
        schema:
          example: 8576a377-5a1b-4d04-8051-36cb996e9f6e
          format: uuid
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/GetCartItemResponseDTO"
          description: The cart item with for the specified cart.
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '404':
          description: The specified cart item was not found.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:cart-items:read:all
      - oauth2:
        - cart:cart-items:read:one
      - oauth2:
        - cart:cart-items:read:authenticated
      summary: Get a cart item
      tags:
      - Cart Items
      x-beta: true
  "/2025-3/cart-items/{cartItemId}/cancel":
    post:
      description: Cancels a specific item in the cart, marking it as no longer needed.
      operationId: CancelCartItem
      parameters:
      - description: The unique identifier of the cart item to cancel.
        in: path
        name: cartItemId
        required: true
        schema:
          example: 8576a377-5a1b-4d04-8051-36cb996e9f6e
          format: uuid
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/CancelCartItemResponseDTO"
          description: The cart item has been successfully cancelled.
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '404':
          description: The specified cart item was not found.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:cart-items:cancel:one
      - oauth2:
        - cart:cart-items:cancel:authenticated
      summary: Cancel a cart item
      tags:
      - Cart Items
      x-beta: true
  "/2025-3/cart-items/{cartItemId}/configure":
    post:
      description: Configure a specific item in the cart, submitting the user provided
        configuration value.
      operationId: ConfigureCartItem
      parameters:
      - description: The unique identifier of the cart item to configure.
        in: path
        name: cartItemId
        required: true
        schema:
          example: 8576a377-5a1b-4d04-8051-36cb996e9f6e
          format: uuid
          type: string
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/ConfigureCartItemBodyDTO"
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/ConfigureCartItemResponseDTO"
          description: The cart item has been successfully configured.
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '404':
          description: The specified cart item was not found.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:cart-items:configure:one
      - oauth2:
        - cart:cart-items:configure:authenticated
      summary: Configure a cart item
      tags:
      - Cart Items
      x-beta: true
  "/2025-3/cart-payment-methods":
    get:
      description: Retrieves all available payment methods for the specified cart,
        including details about each cart item.
      operationId: GetCartPaymentMethods
      parameters:
      - description: Filter for the cart payment methods.
        explode: true
        in: query
        name: filter
        required: true
        schema:
          "$ref": "#/components/schemas/GetCartPaymentMethodsQueryFilterDTO"
        style: deepObject
      responses:
        '200':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/GetCartPaymentMethodsResponseDTO"
          description: Successfully retrieved payment methods for the cart.
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '404':
          description: The specified cart was not found.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:cart-payment-methods:read:all
      - oauth2:
        - cart:cart-payment-methods:read:authenticated
      summary: Get all payment methods for a specific cart
      tags:
      - Cart Payment Methods
      x-beta: true
  "/2025-3/cart-products":
    get:
      description: Returns a list of all available products for the specified cart.
      operationId: GetCartProducts
      parameters:
      - description: Filter for the products for the specified cart.
        explode: true
        in: query
        name: filter
        required: true
        schema:
          "$ref": "#/components/schemas/GetCartProductsQueryFilterDTO"
        style: deepObject
      responses:
        '200':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/GetCartProductsResponseDTO"
          description: The list of available products for the specified cart.
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:cart-products:read:all
      - oauth2:
        - cart:cart-products:read:authenticated
      summary: Get all available products for a cart.
      tags:
      - Cart Products
      x-beta: true
  "/2025-3/carts":
    get:
      description: Returns a paginated list of carts.
      operationId: PaginateCarts
      parameters:
      - description: Filter for the carts.
        explode: true
        in: query
        name: filter
        required: false
        schema:
          "$ref": "#/components/schemas/PaginateCartsQueryFilterDTO"
        style: deepObject
      - description: The pagination details for the list of carts.
        explode: true
        in: query
        name: page
        required: false
        schema:
          "$ref": "#/components/schemas/PaginateCartsQueryPageDTO"
        style: deepObject
      responses:
        '200':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/PaginateCartsResponseDTO"
          description: Successfully retrieved the list of carts.
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:carts:read:all
      - oauth2:
        - cart:carts:read:authenticated
      summary: Returns a paginated list of carts.
      tags:
      - Carts
      x-beta: true
    post:
      description: Creates a new cart for a user and client.
      operationId: CreateCart
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/CreateCartBodyDTO"
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/CreateCartResponseDTO"
          description: Successfully created a new cart
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:carts:create:one
      - oauth2:
        - cart:carts:create:authenticated
      summary: Create a new cart.
      tags:
      - Carts
      x-beta: true
  "/2025-3/carts/{cartId}/checkout":
    post:
      description: Checks out all items in the specific cart.
      operationId: CheckoutCart
      parameters:
      - description: The unique identifier of the cart to checkout.
        in: path
        name: cartId
        required: true
        schema:
          example: 9239a6a6-de5b-4ccc-ba58-40ede174a5a0
          format: uuid
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/CheckoutCartResponseDTO"
          description: The checkout process has either been completed or has failed.
        '202':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/CheckoutCartResponseDTO"
          description: The checkout process has been initiated and is being processed.
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '404':
          description: The specified cart was not found.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:carts:checkout:authenticated
      summary: Checkout a cart.
      tags:
      - Carts
      x-beta: true
  "/2025-3/carts/{cartId}/payment-method":
    post:
      description: Sets a payment method for a cart.
      operationId: SetPaymentMethod
      parameters:
      - description: The unique identifier of the cart to set the payment method for.
        in: path
        name: cartId
        required: true
        schema:
          example: 9239a6a6-de5b-4ccc-ba58-40ede174a5a0
          format: uuid
          type: string
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/SetPaymentMethodBodyDTO"
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/SetPaymentMethodResponseDTO"
          description: The payment method was successfully set for the cart.
        '401':
          description: Client authentication failed.
        '403':
          description: Missing one or more required scopes.
        '404':
          description: The specified cart was not found.
        '500':
          description: An unexpected error occurred.
      security:
      - oauth2:
        - cart:carts:update:one
      - oauth2:
        - cart:carts:update:authenticated
      summary: Set a payment method for a cart.
      tags:
      - Carts
      x-beta: true
components:
  schemas:
    CancelCartItemResponseDTO:
      properties:
        data:
          allOf:
          - "$ref": "#/components/schemas/CartItemDTO"
          description: The cart item that has been cancelled.
          nullable: false
      required:
      - data
      type: object
    CartDTO:
      properties:
        cancelledAt:
          description: The timestamp when the cart was cancelled.
          example: '2023-05-15T14:30:00.000Z'
          format: date-time
          nullable: true
          type: string
        clientId:
          description: The unique identifier of the client through which this cart
            was created.
          example: 0feb6be6-7314-469b-83ac-5b9b7e4b4a4e
          format: uuid
          nullable: false
          type: string
        completedAt:
          description: The timestamp when the cart checkout was completed.
          example: '2023-05-15T15:00:00.000Z'
          format: date-time
          nullable: true
          type: string
        createdAt:
          description: The timestamp when the cart was created.
          example: '2023-05-15T14:00:00.000Z'
          format: date-time
          nullable: false
          type: string
        expiresAt:
          description: The timestamp when the cart will expire.
          example: '2023-05-16T14:30:00.000Z'
          format: date-time
          nullable: true
          type: string
        id:
          description: The unique identifier for the cart.
          example: ae1b58ef-ba5c-4240-b130-51fcf067d40d
          format: uuid
          nullable: false
          type: string
        paymentMethodId:
          description: The unique identifier of the selected payment method for this
            cart.
          example: ecbec75f-7ca4-4017-a485-6a4836de5d25
          format: uuid
          nullable: true
          type: string
        poiId:
          description: The unique identifier of the Point of interest associated with
            this cart.
          example: 96a939ea-28d4-4228-b45c-192904ba91d7
          format: uuid
          nullable: false
          type: string
        status:
          description: The current status of the cart.
          enum:
          - PENDING
          - CANCELLED
          - CHECKOUT_PROCESSING
          - CHECKOUT_FAILED
          - CHECKOUT_COMPLETED
          - CHECKOUT_CANCELLED
          example: PENDING
          nullable: false
          type: string
        updatedAt:
          description: The timestamp when the cart was last updated.
          example: '2023-05-15T14:15:00.000Z'
          format: date-time
          nullable: false
          type: string
        userId:
          description: The unique identifier of the user who owns this cart.
          example: e9166a60-1f92-4a5d-a192-c2f6b662e9d9
          format: uuid
          nullable: false
          type: string
      required:
      - id
      - poiId
      - userId
      - clientId
      - paymentMethodId
      - status
      - completedAt
      - cancelledAt
      - expiresAt
      - createdAt
      - updatedAt
      type: object
    CartItemAuthorizationDTO:
      properties:
        amount:
          description: The amount to be authorized. Either provided by the user or
            the server.
          example: '120'
          format: decimal
          nullable: false
          type: string
        currency:
          description: The currency of the authorization.
          example: EUR
          nullable: false
          type: string
      required:
      - amount
      - currency
      type: object
    CartItemCheckoutDTO:
      properties:
        currency:
          description: The currency of the checkout.
          example: EUR
          nullable: false
          type: string
        priceExcludingVAT:
          description: The total price of the cart item, excluding VAT.
          example: '61.26'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
        priceIncludingVAT:
          description: The total price of the cart item, including VAT.
          example: '72.90'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
        pricePerUnitExcludingVAT:
          description: The price per unit of the cart item, Excluding VAT.
          example: '1.419'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
        pricePerUnitIncludingVAT:
          description: The price per unit of the cart item, including VAT.
          example: '1.689'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
        quantity:
          description: The consumed quantity of the cart item.
          example: '43.17'
          format: decimal
          nullable: false
          type: string
        status:
          description: The status of the cart item regarding the checkout process.
          enum:
          - PENDING
          - PROCESSING
          - COMPLETED
          - FAILED
          - CANCELLED
          example: PENDING
          nullable: false
          type: string
        unit:
          description: The unit of measurement for the cart item quantity.
          example: LITER
          nullable: false
          type: string
        vatAmount:
          description: The total amount of VAT applied to the cart item.
          example: '8.23'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
        vatRate:
          description: The vat rate applied to the cart item.
          example: '0.19'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
      required:
      - status
      - currency
      - quantity
      - unit
      - pricePerUnitExcludingVAT
      - pricePerUnitIncludingVAT
      - priceExcludingVAT
      - priceIncludingVAT
      - vatRate
      - vatAmount
      type: object
    CartItemConfigurationInputTypeDTO:
      properties:
        label:
          description: The localized label for the configuration item.
          example: Pump Number
          nullable: false
          type: string
        name:
          description: The name of the configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        type:
          description: The type of the configuration item.
          example: INPUT
          nullable: false
          type: string
        value:
          description: The value for this configuration.
          example: '100'
          nullable: false
          type: string
      required:
      - type
      - name
      - label
      - value
      type: object
    CartItemConfigurationLocationTypeDTO:
      properties:
        label:
          description: The localized label for the configuration item.
          example: Pump Number
          nullable: false
          type: string
        latitude:
          description: The latitude for the location.
          example: '37.7749'
          format: decimal
          nullable: false
          type: string
        longitude:
          description: The longitude for the location.
          example: "-122.4194"
          format: decimal
          nullable: false
          type: string
        name:
          description: The name of the configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        type:
          description: The type of the configuration item.
          example: LOCATION
          nullable: false
          type: string
      required:
      - type
      - name
      - label
      - latitude
      - longitude
      type: object
    CartItemConfigurationMultiSelectTypeDTO:
      properties:
        label:
          description: The localized label for the configuration item.
          example: Pump Number
          nullable: false
          type: string
        name:
          description: The name of the configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        options:
          description: The selected option for this configuration.
          items:
            oneOf:
            - "$ref": "#/components/schemas/CartItemConfigurationSelectOptionSimpleDTO"
            - "$ref": "#/components/schemas/CartItemConfigurationSelectOptionPricedDTO"
          nullable: false
          type: array
        type:
          description: The type of the configuration item.
          example: MULTI_SELECT
          nullable: false
          type: string
      required:
      - type
      - name
      - label
      - options
      type: object
    CartItemConfigurationSelectOptionPricedDTO:
      properties:
        currency:
          description: The currency in which the configuration option is priced.
          example: EUR
          nullable: false
          type: string
        description:
          description: An optional description for the configuration option.
          example: This is a sample configuration option.
          nullable: true
          type: string
        label:
          description: The localized label for the configuration option.
          example: '1'
          nullable: false
          type: string
        pricePerUnitExcludingVAT:
          description: The price per unit of the configuration option excluding VAT.
          example: '1.529'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
        pricePerUnitIncludingVAT:
          description: The price per unit of the configuration option including VAT.
          example: '1.819'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
        type:
          description: The type of the configuration option.
          example: PRICED
          nullable: false
          type: string
        unit:
          description: The unit of measurement for the configuration option.
          example: LITER
          nullable: false
          type: string
        value:
          description: The technical identifier for the configuration option.
          example: '081482d5-f3fd-4971-b6c6-dc49d0832df9'
          nullable: false
          type: string
        vatRate:
          description: The VAT rate applied to the configuration option.
          example: '0.19'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
      required:
      - type
      - label
      - value
      - description
      - currency
      - unit
      - pricePerUnitIncludingVAT
      - pricePerUnitExcludingVAT
      - vatRate
      type: object
    CartItemConfigurationSelectOptionSimpleDTO:
      properties:
        description:
          description: An optional description for the configuration option.
          example: This is a sample configuration option.
          nullable: true
          type: string
        label:
          description: The localized label for the configuration option.
          example: '1'
          nullable: false
          type: string
        type:
          description: The type of the configuration option.
          example: SIMPLE
          nullable: false
          type: string
        value:
          description: The technical identifier for the configuration option.
          example: '081482d5-f3fd-4971-b6c6-dc49d0832df9'
          nullable: false
          type: string
      required:
      - type
      - label
      - value
      - description
      type: object
    CartItemConfigurationSingleSelectTypeDTO:
      properties:
        label:
          description: The localized label for the configuration item.
          example: Pump Number
          nullable: false
          type: string
        name:
          description: The name of the configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        option:
          description: The selected option for this configuration.
          nullable: false
          oneOf:
          - "$ref": "#/components/schemas/CartItemConfigurationSelectOptionSimpleDTO"
          - "$ref": "#/components/schemas/CartItemConfigurationSelectOptionPricedDTO"
        type:
          description: The type of the configuration item.
          example: SINGLE_SELECT
          nullable: false
          type: string
      required:
      - type
      - name
      - label
      - option
      type: object
    CartItemDTO:
      properties:
        authorization:
          allOf:
          - "$ref": "#/components/schemas/CartItemAuthorizationDTO"
          description: The authorization details for the cart item.
          nullable: true
        cancelledAt:
          description: The date and time when the cart item was cancelled.
          example: '2025-03-15T12:00:00.000Z'
          format: date-time
          nullable: true
          type: string
        cartId:
          description: The unique identifier for the cart to which this item belongs.
          example: 71597ea2-e7e7-4eb5-b5c5-01eec9c1d81b
          format: uuid
          nullable: false
          type: string
        checkout:
          allOf:
          - "$ref": "#/components/schemas/CartItemCheckoutDTO"
          description: The checkout details for the cart item.
          nullable: true
        configurations:
          description: The configurations applied to the cart item.
          items:
            oneOf:
            - "$ref": "#/components/schemas/CartItemConfigurationInputTypeDTO"
            - "$ref": "#/components/schemas/CartItemConfigurationSingleSelectTypeDTO"
            - "$ref": "#/components/schemas/CartItemConfigurationMultiSelectTypeDTO"
            - "$ref": "#/components/schemas/CartItemConfigurationLocationTypeDTO"
          nullable: false
          type: array
        configuredAt:
          description: The date and time when the cart item was configured.
          example: '2025-03-15T12:00:00.000Z'
          format: date-time
          nullable: true
          type: string
        createdAt:
          description: The date and time when the cart item was created.
          example: '2025-03-15T12:00:00.000Z'
          format: date-time
          nullable: false
          type: string
        id:
          description: The unique identifier for the cart item.
          example: c7b3d2af-4046-4711-8fbf-36ce1b5f31d3
          format: uuid
          nullable: false
          type: string
        metadata:
          additionalProperties: true
          description: Optional metadata associated with the cart item. This may vary
            depending on the product and provider.
          nullable: false
          type: object
        next:
          description: The next configuration that needs to be applied to the cart
            item.
          nullable: true
          oneOf:
          - "$ref": "#/components/schemas/CartItemNextConfigurationInputTypeDTO"
          - "$ref": "#/components/schemas/CartItemNextConfigurationSingleSelectTypeDTO"
          - "$ref": "#/components/schemas/CartItemNextConfigurationMultiSelectTypeDTO"
          - "$ref": "#/components/schemas/CartItemNextConfigurationLocationTypeDTO"
        product:
          allOf:
          - "$ref": "#/components/schemas/CartProductDTO"
          description: The product details associated with the cart item.
          nullable: false
        status:
          description: The current status of the cart item.
          enum:
          - CONFIGURING
          - CONFIGURED
          - CANCELLED
          example: CONFIGURING
          nullable: false
          type: string
        updatedAt:
          description: The date and time when the cart item was last updated.
          example: '2025-03-16T12:00:00.000Z'
          format: date-time
          nullable: false
          type: string
      required:
      - id
      - cartId
      - status
      - product
      - authorization
      - checkout
      - configurations
      - next
      - configuredAt
      - cancelledAt
      - createdAt
      - updatedAt
      type: object
    CartItemNextConfigurationInputTypeDTO:
      properties:
        label:
          description: The localized label for the next configuration item.
          example: Pump Number
          nullable: false
          type: string
        name:
          description: The unique identifier of the next configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        pattern:
          description: An optional regular expression pattern that the input must
            match.
          nullable: true
          type: string
        type:
          example: INPUT
          nullable: false
          type: string
      required:
      - name
      - label
      - type
      - pattern
      type: object
    CartItemNextConfigurationLocationTypeDTO:
      properties:
        label:
          description: The localized label for the next configuration item.
          example: Pump Number
          nullable: false
          type: string
        name:
          description: The unique identifier of the next configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        type:
          example: LOCATION
          nullable: false
          type: string
      required:
      - name
      - label
      - type
      type: object
    CartItemNextConfigurationMultiSelectTypeDTO:
      properties:
        label:
          description: The localized label for the next configuration item.
          example: Pump Number
          nullable: false
          type: string
        name:
          description: The unique identifier of the next configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        options:
          description: The available options for the next configuration item.
          items:
            oneOf:
            - "$ref": "#/components/schemas/CartItemNextConfigurationSelectOptionSimpleDTO"
            - "$ref": "#/components/schemas/CartItemNextConfigurationSelectOptionPricedDTO"
          nullable: false
          type: array
        type:
          example: MULTI_SELECT
          nullable: false
          type: string
      required:
      - name
      - label
      - type
      - options
      type: object
    CartItemNextConfigurationSelectOptionPricedDTO:
      properties:
        currency:
          description: The currency in which the configuration option is priced.
          example: EUR
          nullable: false
          type: string
        description:
          description: An optional description for the configuration option.
          example: This is a sample configuration option.
          nullable: true
          type: string
        disabled:
          description: Indicates whether the configuration option is disabled for
            selection.
          example: false
          nullable: false
          type: boolean
        label:
          description: The localized label for the configuration option.
          example: '1'
          nullable: false
          type: string
        pricePerUnitExcludingVAT:
          description: The price per unit of the configuration option excluding VAT.
          example: '1.529'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
        pricePerUnitIncludingVAT:
          description: The price per unit of the configuration option including VAT.
          example: '1.819'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
        type:
          description: The type of the configuration option.
          example: PRICED
          nullable: false
          type: string
        unit:
          description: The unit of measurement for the configuration option.
          example: LITER
          nullable: false
          type: string
        value:
          description: The technical identifier for the configuration option.
          example: '081482d5-f3fd-4971-b6c6-dc49d0832df9'
          nullable: false
          type: string
        vatRate:
          description: The VAT rate applied to the configuration option.
          example: '0.19'
          exclusiveMinimum: false
          format: decimal
          minimum: 0
          nullable: false
          type: string
      required:
      - type
      - label
      - value
      - description
      - currency
      - unit
      - pricePerUnitIncludingVAT
      - pricePerUnitExcludingVAT
      - vatRate
      - disabled
      type: object
    CartItemNextConfigurationSelectOptionSimpleDTO:
      properties:
        description:
          description: An optional description for the configuration option.
          example: This is a sample configuration option.
          nullable: true
          type: string
        disabled:
          description: Indicates whether the configuration option is disabled for
            selection.
          example: false
          nullable: false
          type: boolean
        label:
          description: The localized label for the configuration option.
          example: '1'
          nullable: false
          type: string
        type:
          description: The type of the configuration option.
          example: SIMPLE
          nullable: false
          type: string
        value:
          description: The technical identifier for the configuration option.
          example: '081482d5-f3fd-4971-b6c6-dc49d0832df9'
          nullable: false
          type: string
      required:
      - type
      - label
      - value
      - description
      - disabled
      type: object
    CartItemNextConfigurationSingleSelectTypeDTO:
      properties:
        label:
          description: The localized label for the next configuration item.
          example: Pump Number
          nullable: false
          type: string
        name:
          description: The unique identifier of the next configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        options:
          description: The available options for the next configuration item.
          items:
            oneOf:
            - "$ref": "#/components/schemas/CartItemNextConfigurationSelectOptionSimpleDTO"
            - "$ref": "#/components/schemas/CartItemNextConfigurationSelectOptionPricedDTO"
          nullable: false
          type: array
        type:
          example: SINGLE_SELECT
          nullable: false
          type: string
      required:
      - name
      - label
      - type
      - options
      type: object
    CartPaymentMethodDTO:
      properties:
        alias:
          description: An optional user provided alias for the payment method.
          example: My Payment Method
          nullable: true
          type: string
        createdAt:
          description: The date and time when the user payment method was created.
          example: '2023-10-01T12:00:00.000Z'
          format: date-time
          nullable: false
          type: string
        expiresAt:
          description: The date and time when the user payment method will expire.
          example: '2025-12-31T23:59:59.999Z'
          format: date-time
          nullable: true
          type: string
        icons:
          allOf:
          - "$ref": "#/components/schemas/CartPaymentMethodIconsDTO"
          description: The icons associated with the user payment method.
          nullable: false
        id:
          description: The unique identifier of the user payment method.
          example: 86192f0f-9359-415d-b465-3cfadf0130a3
          format: uuid
          nullable: false
          type: string
        implicit:
          description: Determines whether the user payment method has been onboarded.
          example: true
          nullable: false
          type: boolean
        items:
          description: The payment method item info for each cart item.
          items:
            "$ref": "#/components/schemas/CartPaymentMethodItemDTO"
          nullable: false
          type: array
        kind:
          description: The payment method kind of the user payment method.
          example: FUEL_CARD_PROVIDER
          nullable: false
          type: string
        metadata:
          additionalProperties: true
          description: Optional metadata associated with the user payment method.
          nullable: true
          type: object
        name:
          description: The name of the user payment method.
          example: "(MASTERCARD) ... 0640"
          nullable: false
          type: string
        shared:
          description: Determines whether the user payment method is shared by another
            user.
          example: false
          nullable: false
          type: boolean
        updatedAt:
          description: The date and time when the user payment method was last updated.
          example: '2023-10-01T12:00:00.000Z'
          format: date-time
          nullable: false
          type: string
        usable:
          description: Determines whether the user payment method can be used to checkout
            the cart.
          example: true
          nullable: false
          type: boolean
      required:
      - id
      - kind
      - name
      - alias
      - implicit
      - shared
      - metadata
      - icons
      - usable
      - items
      - expiresAt
      - createdAt
      - updatedAt
      type: object
    CartPaymentMethodIconsDTO:
      properties:
        dark:
          description: The URL to the dark theme icon for the payment method.
          example: https://example.com/icons/light.png
          format: uri
          nullable: true
          type: string
        default:
          description: The URL to the default icon for the payment method.
          example: https://example.com/icons/default.png
          format: uri
          nullable: false
          type: string
      required:
      - default
      - dark
      type: object
    CartPaymentMethodItemDTO:
      properties:
        id:
          description: The unique identifier of the cart item.
          example: 0c81b3e0-0495-45ce-8df7-6f764c0ef3c5
          format: uuid
          nullable: false
          type: string
        purchaseable:
          description: Determines if the payment method can be used to purchase this
            cart item.
          example: true
          nullable: false
          type: boolean
      required:
      - id
      - purchaseable
      type: object
    CartProductDTO:
      properties:
        id:
          description: The unique identifier for the cart product.
          example: 88dd01e3-c300-44af-83e6-86b362c8fa39
          format: uuid
          nullable: false
          type: string
        label:
          description: A human-readable label for the cart product.
          example: PACE Connected Fueling
          nullable: false
          type: string
        type:
          description: The type of the cart product.
          example: FUELING
          nullable: false
          type: string
      required:
      - id
      - type
      - label
      type: object
    CheckoutCartResponseDTO:
      properties:
        data:
          allOf:
          - "$ref": "#/components/schemas/CartDTO"
          description: The cart that has been checked out.
          nullable: false
      required:
      - data
      type: object
    ConfigureCartItemBodyDTO:
      properties:
        configuration:
          nullable: false
          oneOf:
          - "$ref": "#/components/schemas/ConfigureCartItemBodyInputTypeDTO"
          - "$ref": "#/components/schemas/ConfigureCartItemBodySingleSelectTypeDTO"
          - "$ref": "#/components/schemas/ConfigureCartItemBodyMultiSelectTypeDTO"
          - "$ref": "#/components/schemas/ConfigureCartItemBodyLocationTypeDTO"
      required:
      - configuration
      type: object
    ConfigureCartItemBodyInputTypeDTO:
      properties:
        name:
          description: The unique identifier of the configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        type:
          description: The type of configuration item.
          nullable: false
          type: string
        value:
          description: The input value from the user for this configuration.
          example: '100'
          nullable: false
          type: string
      required:
      - type
      - name
      - value
      type: object
    ConfigureCartItemBodyLocationTypeDTO:
      properties:
        latitude:
          description: The user provided latitude for the location.
          example: '37.7749'
          exclusiveMaximum: false
          exclusiveMinimum: false
          format: decimal
          maximum: 90
          minimum: -90
          nullable: false
          type: string
        longitude:
          description: The user provided longitude for the location.
          example: "-122.4194"
          exclusiveMaximum: false
          exclusiveMinimum: false
          format: decimal
          maximum: 180
          minimum: -180
          nullable: false
          type: string
        name:
          description: The unique identifier of the configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        type:
          description: The type of configuration item.
          nullable: false
          type: string
      required:
      - type
      - name
      - latitude
      - longitude
      type: object
    ConfigureCartItemBodyMultiSelectTypeDTO:
      properties:
        name:
          description: The unique identifier of the configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        options:
          description: The selected configuration options.
          items:
            "$ref": "#/components/schemas/ConfigureCartItemBodySelectOptionDTO"
          minItems: 1
          nullable: false
          type: array
        type:
          description: The type of configuration item.
          nullable: false
          type: string
      required:
      - type
      - name
      - options
      type: object
    ConfigureCartItemBodySelectOptionDTO:
      properties:
        value:
          description: The value of the selected configuration option.
          example: cb4c8180-2a0b-4a57-a2ba-a996792e5095
          nullable: false
          type: string
      required:
      - value
      type: object
    ConfigureCartItemBodySingleSelectTypeDTO:
      properties:
        name:
          description: The unique identifier of the configuration item.
          example: PUMP_NUMBER
          nullable: false
          type: string
        option:
          allOf:
          - "$ref": "#/components/schemas/ConfigureCartItemBodySelectOptionDTO"
          description: The selected configuration option.
          nullable: false
        type:
          description: The type of configuration item.
          nullable: false
          type: string
      required:
      - type
      - name
      - option
      type: object
    ConfigureCartItemResponseDTO:
      properties:
        data:
          allOf:
          - "$ref": "#/components/schemas/CartItemDTO"
          description: The cart item that has been configured.
          nullable: false
      required:
      - data
      type: object
    CreateCartBodyDTO:
      properties:
        clientId:
          description: The client for which the cart should be created.
          example: pace-drive-app
          nullable: false
          type: string
        poiId:
          description: The poi for which the cart should be created.
          example: 7bf0687b-221d-49a2-a04a-4ec5614aff20
          format: uuid
          nullable: false
          type: string
        userId:
          description: The user for which the cart should be created.
          example: 8fc3698e-84ed-4fb9-8898-0992d5fa703b
          format: uuid
          nullable: false
          type: string
      required:
      - poiId
      type: object
    CreateCartItemBodyDTO:
      properties:
        cartId:
          description: The unique identifier of the cart to add the item to.
          example: 3682ea8c-4ca4-45d2-bc1e-e6e4dc597ffb
          format: uuid
          nullable: false
          type: string
        productId:
          description: The unique identifier of the product to be added to the cart.
          example: 439436d5-3079-47b5-8803-f781c61dbad8
          format: uuid
          nullable: false
          type: string
      required:
      - cartId
      - productId
      type: object
    CreateCartItemResponseDTO:
      properties:
        data:
          allOf:
          - "$ref": "#/components/schemas/CartItemDTO"
          description: The cart item that has been created.
          nullable: false
      required:
      - data
      type: object
    CreateCartResponseDTO:
      properties:
        data:
          allOf:
          - "$ref": "#/components/schemas/CartDTO"
          description: The cart that has been created.
          nullable: false
      required:
      - data
      type: object
    GetCartItemResponseDTO:
      properties:
        data:
          allOf:
          - "$ref": "#/components/schemas/CartItemDTO"
          description: The cart item with for the specified cart.
          nullable: false
      required:
      - data
      type: object
    GetCartItemsQueryFilterCartIdDTO:
      properties:
        eq:
          example: 25b85035-d83f-44fa-bde9-9a7d5dab990c
          format: uuid
          nullable: false
          type: string
      required:
      - eq
      type: object
    GetCartItemsQueryFilterDTO:
      properties:
        cartId:
          allOf:
          - "$ref": "#/components/schemas/GetCartItemsQueryFilterCartIdDTO"
          nullable: false
      required:
      - cartId
      type: object
    GetCartItemsResponseDTO:
      properties:
        data:
          description: The list of all cart items for a specific cart.
          items:
            "$ref": "#/components/schemas/CartItemDTO"
          nullable: false
          type: array
      required:
      - data
      type: object
    GetCartPaymentMethodsQueryFilterCartIdDTO:
      properties:
        eq:
          description: Filter for the cart payment methods by a specific cart ID.
          example: 2ea2c446-0cef-4dc2-bf87-65c3b4ecb702
          format: uuid
          nullable: false
          type: string
      required:
      - eq
      type: object
    GetCartPaymentMethodsQueryFilterDTO:
      properties:
        cartId:
          allOf:
          - "$ref": "#/components/schemas/GetCartPaymentMethodsQueryFilterCartIdDTO"
          description: Filter for the cart payment methods by cart ID.
          nullable: false
      required:
      - cartId
      type: object
    GetCartPaymentMethodsResponseDTO:
      properties:
        data:
          description: The user payment methods based on a cart, including details
            for each cart item.
          items:
            "$ref": "#/components/schemas/CartPaymentMethodDTO"
          nullable: false
          type: array
      required:
      - data
      type: object
    GetCartProductsQueryFilterCartIdDTO:
      properties:
        eq:
          example: c450f432-d078-475e-a1b4-a6e3aec21dcb
          format: uuid
          nullable: false
          type: string
      required:
      - eq
      type: object
    GetCartProductsQueryFilterDTO:
      properties:
        cartId:
          allOf:
          - "$ref": "#/components/schemas/GetCartProductsQueryFilterCartIdDTO"
          description: Filter for the cart ID.
          nullable: false
        type:
          allOf:
          - "$ref": "#/components/schemas/GetCartProductsQueryFilterTypeDTO"
          description: Filter for the type of products in the cart.
          nullable: false
      required:
      - cartId
      - type
      type: object
    GetCartProductsQueryFilterTypeDTO:
      properties:
        in:
          example:
          - FUELING
          - WASHING
          items:
            type: string
          nullable: false
          type: array
          uniqueItems: true
      required:
      - in
      type: object
    GetCartProductsResponseDTO:
      properties:
        data:
          description: The list of available products for the specified cart.
          items:
            "$ref": "#/components/schemas/CartProductDTO"
          nullable: false
          type: array
      required:
      - data
      type: object
    PaginateCartsQueryFilterClientIdDTO:
      properties:
        eq:
          example: pace-drive-app
          nullable: false
          type: string
      type: object
    PaginateCartsQueryFilterDTO:
      properties:
        clientId:
          allOf:
          - "$ref": "#/components/schemas/PaginateCartsQueryFilterClientIdDTO"
          description: Filter for the client ID.
          nullable: false
        poiId:
          allOf:
          - "$ref": "#/components/schemas/PaginateCartsQueryFilterPoiIdDTO"
          description: Filter for the POI ID.
          nullable: false
        status:
          allOf:
          - "$ref": "#/components/schemas/PaginateCartsQueryFilterStatusDTO"
          description: Filter for the status.
          nullable: false
        userId:
          allOf:
          - "$ref": "#/components/schemas/PaginateCartsQueryFilterUserIdDTO"
          description: Filter for the user ID.
          nullable: false
      type: object
    PaginateCartsQueryFilterPoiIdDTO:
      properties:
        eq:
          example: f31d0350-6b99-40ee-b7cc-4cdc7a79a905
          format: uuid
          nullable: false
          type: string
      type: object
    PaginateCartsQueryFilterStatusDTO:
      properties:
        eq:
          enum:
          - PENDING
          - CANCELLED
          - CHECKOUT_PROCESSING
          - CHECKOUT_FAILED
          - CHECKOUT_COMPLETED
          - CHECKOUT_CANCELLED
          example: PENDING
          nullable: false
          type: string
        in:
          example:
          - CHECKOUT_COMPLETED
          - CHECKOUT_FAILED
          - CHECKOUT_CANCELLED
          items:
            enum:
            - PENDING
            - CANCELLED
            - CHECKOUT_PROCESSING
            - CHECKOUT_FAILED
            - CHECKOUT_COMPLETED
            - CHECKOUT_CANCELLED
            type: string
          nullable: false
          type: array
          uniqueItems: true
      type: object
    PaginateCartsQueryFilterUserIdDTO:
      properties:
        eq:
          example: 877e8dc9-2838-4f6f-a4a6-76b4c4cf0f2c
          format: uuid
          nullable: false
          type: string
      type: object
    PaginateCartsQueryPageDTO:
      properties:
        number:
          default: 0
          description: The page number to return.
          example: 0
          minimum: 0
          type: integer
        size:
          default: 10
          description: Number of items to return per page.
          example: 10
          minimum: 1
          type: integer
      type: object
    PaginateCartsResponseDTO:
      properties:
        data:
          description: The list of carts for the current page.
          items:
            "$ref": "#/components/schemas/CartDTO"
          nullable: false
          type: array
        page:
          allOf:
          - "$ref": "#/components/schemas/PaginateCartsResponsePageDTO"
          description: The pagination details for the list of carts.
          nullable: false
      required:
      - data
      - page
      type: object
    PaginateCartsResponsePageDTO:
      properties:
        count:
          description: Number of items on the current page.
          example: 7
          type: integer
        number:
          description: Current page number.
          example: 0
          type: integer
        size:
          description: Number of items per page.
          example: 10
          type: integer
        total:
          description: Total number of items across all pages.
          example: 13
          type: integer
      required:
      - number
      - size
      - count
      - total
      type: object
    SetPaymentMethodBodyDTO:
      properties:
        paymentMethodId:
          description: The unique identifier of the payment method to set for the
            cart.
          example: f90731f2-3628-4194-a628-6a36b7058405
          format: uuid
          nullable: false
          type: string
      required:
      - paymentMethodId
      type: object
    SetPaymentMethodResponseDTO:
      properties:
        data:
          allOf:
          - "$ref": "#/components/schemas/CartDTO"
          description: The cart that has been updated.
          nullable: false
      required:
      - data
      type: object
  securitySchemes:
    oauth2:
      flows:
        authorizationCode:
          authorizationUrl: https://id.pace.cloud/auth/realms/pace/protocol/openid-connect/auth
          refreshUrl: https://id.pace.cloud/auth/realms/pace/protocol/openid-connect/token
          scopes:
            cart:cart-items:cancel:authenticated: Allows cancelling cart items for
              the authenticated user.
            cart:cart-items:cancel:one: Allows cancelling a cart item.
            cart:cart-items:configure:authenticated: Allows configuring a cart item
              for the authenticated user.
            cart:cart-items:configure:one: Allows configuring a cart item.
            cart:cart-items:create:authenticated: Allows creating a cart item for
              the authenticated user.
            cart:cart-items:create:one: Allows creating a cart item.
            cart:cart-items:read:all: Allows reading all cart items.
            cart:cart-items:read:authenticated: Allows reading cart items for the
              authenticated user.
            cart:cart-items:read:one: Allows reading a cart item.
            cart:cart-payment-methods:read:all: Allows reading all cart payment methods.
            cart:cart-payment-methods:read:authenticated: Allows reading cart payment
              methods for the authenticated user.
            cart:cart-payment-methods:select:authenticated: Allows selecting a cart
              payment method for the authenticated user.
            cart:cart-payment-methods:select:one: Allows selecting a cart payment
              method.
            cart:cart-products:read:all: Allows reading all available cart products.
            cart:cart-products:read:authenticated: Allows reading available cart products
              for the authenticated user.
            cart:carts:checkout:authenticated: Allows checking out carts for the authenticated
              user.
            cart:carts:create:authenticated: Allows creating a cart for the authenticated
              user.
            cart:carts:create:one: Allows creating a cart.
            cart:carts:read:all: Allows reading all carts.
            cart:carts:read:authenticated: Allows reading carts for the authenticated
              user.
            cart:carts:update:authenticated: Allows updating a cart for the authenticated
              user.
            cart:carts:update:one: Allows updating a cart.
          tokenUrl: https://id.pace.cloud/auth/realms/pace/protocol/openid-connect/token
      type: oauth2
openapi: 3.0.0
servers:
- description: PACE Development API
  url: https://api.dev.pace.cloud/cart
- description: PACE Sandbox API
  url: https://api.sandbox.pace.cloud/cart
- description: PACE Production API
  url: https://api.pace.cloud/cart
tags:
- description: Endpoints for creating, reading, and managing carts.
  name: Carts
- description: Endpoints for checking available products for a specific cart.
  name: Cart Products
- description: Endpoints for creating, configuring, and managing items within a specific
    cart.
  name: Cart Items
- description: Endpoints for retrieving user payment methods for a specific cart.
  name: Cart Payment Methods
