openapi: 3.1.0
info:
  title: Storefront Carts
  version: 1.0.0
paths:
  /carts:
    get:
      operationId: getCart
      summary: Get Cart
      description: |-
        Returns a *Cart*.

        > #### Note
        > * Substitute your storefront domain for `yourstore.example.com`. 
        > * The Send a Test Request feature is not currently supported for this endpoint.  
      tags:
        - cart
      parameters:
        - name: include
          in: query
          description: >-
            To return product options add one of the following include:


            `lineItems.physicalItems.options`: The Cart returns an abbreviated result. Use this to return physical items
            product options. Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options`:  The Cart returns an abbreviated result. Use this to return digital items
            product options.  Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options,lineItems.physicalItems.options`:  The Cart returns an abbreviated result.
            Use this to return digital and physical options. Can also be used in a /POST to have the extended Cart
            object return.
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CartsGetParametersIncludeSchemaItems'
        - name: Accept
          in: header
          description: >-
            The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the response
            body.
          required: true
          schema:
            type: string
            default: application/json
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/responseCart'
    post:
      operationId: createCart
      summary: Create Cart
      description: |-
        Creates a *Cart*.

        > #### Note
        > * Substitute your storefront domain for `yourstore.example.com`. 
        > * The Send a Test Request feature is not currently supported for this endpoint.  
      tags:
        - cart
      parameters:
        - name: include
          in: query
          description: >-
            To return product options add one of the following include:


            `lineItems.physicalItems.options`: The Cart returns an abbreviated result. Use this to return physical items
            product options. Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options`:  The Cart returns an abbreviated result. Use this to return digital items
            product options.  Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options,lineItems.physicalItems.options`:  The Cart returns an abbreviated result.
            Use this to return digital and physical options. Can also be used in a /POST to have the extended Cart
            object return.
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CartsPostParametersIncludeSchemaItems'
        - name: Accept
          in: header
          description: >-
            The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the response
            body.
          required: true
          schema:
            type: string
            default: application/json
      responses:
        '200':
          description: Post Carts Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responseCart'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/requestCart'
  /carts/{cartId}:
    delete:
      operationId: deleteCart
      summary: Delete Cart
      description: |-
        Deletes a *Cart*. Once a *Cart* has been deleted it can not be recovered.


        > #### Note
        > * Substitute your storefront domain for `yourstore.example.com`. 
        > * The Send a Test Request feature is not currently supported for this endpoint.  
      tags:
        - cart
      parameters:
        - name: cartId
          in: path
          description: This cartʼs unique ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: Accept
          in: header
          description: >-
            The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the response
            body.
          required: true
          schema:
            type: string
            default: application/json
      responses:
        '204':
          description: No Content
          content:
            application/json:
              schema:
                type: object
                properties: {}
  /carts/{cartId}/currency:
    post:
      operationId: updateCartCurrency
      summary: Update Cart Currency
      description: |-
        Update currency of the *Cart*. 
        Promotions and gift certificates that don't apply to the new currency will be removed from your cart.
        You cannot update the cart currency if the draft order cart or the cart contains a manual discount.

        > #### Note
        > * Substitute your storefront domain for `yourstore.example.com`. 
        > * The Send a Test Request feature is not currently supported for this endpoint.  
      tags:
        - cartCurrency
      parameters:
        - name: cartId
          in: path
          description: This cartʼs unique ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: include
          in: query
          description: >-
            To return product options add one of the following include:


            `lineItems.physicalItems.options`: The Cart returns an abbreviated result. Use this to return physical items
            product options. Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options`:  The Cart returns an abbreviated result. Use this to return digital items
            product options.  Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options,lineItems.physicalItems.options`:  The Cart returns an abbreviated result.
            Use this to return digital and physical options. Can also be used in a /POST to have the extended Cart
            object return.
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CartsCartIdCurrencyPostParametersIncludeSchemaItems'
        - name: Accept
          in: header
          description: >-
            The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the response
            body.
          required: true
          schema:
            type: string
            default: application/json
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/responseCart'
        '400':
          description: Bad request. Authentication Required.
          content:
            application/json:
              schema:
                description: Any type
        '404':
          description: Currency not found
          content:
            application/json:
              schema:
                description: Any type
        '422':
          description: Missing or invalid data
          content:
            application/json:
              schema:
                description: Any type
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              type: object
              properties:
                currencyCode:
                  type: string
                  description: currency code
              required:
                - currencyCode
  /carts/{cartId}/items:
    post:
      operationId: addCartLineItem
      summary: Add Cart Line Items
      description: >-
        Adds a line items to the *Cart*.


        > #### Notes

        > * Substitute your storefront domain for `yourstore.example.com`. 

        > * The Send a Test Request feature is not currently supported for this endpoint.  

        > * To prevent lost updates due to concurrent requests overriding changes made by others, it is recommended to
        enable optimistic concurrency control by including the `version` field in the request payload. If the provided
        version does not match the version on the server, a conflict error will be returned, which the client can handle
        accordingly.
      tags:
        - cartItems
      parameters:
        - name: cartId
          in: path
          description: This cartʼs unique ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: include
          in: query
          description: >-
            To return product options add one of the following include:


            `lineItems.physicalItems.options`: The Cart returns an abbreviated result. Use this to return physical items
            product options. Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options`:  The Cart returns an abbreviated result. Use this to return digital items
            product options.  Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options,lineItems.physicalItems.options`:  The Cart returns an abbreviated result.
            Use this to return digital and physical options. Can also be used in a /POST to have the extended Cart
            object return.
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CartsCartIdItemsPostParametersIncludeSchemaItems'
        - name: Accept
          in: header
          description: >-
            The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the response
            body.
          required: true
          schema:
            type: string
            default: application/json
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responseCart'
        '409':
          description: Cart conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddCartLineItemRequestConflictError'
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LineItemsRequest'
  /carts/{cartId}/items/{itemId}:
    put:
      operationId: updateCartLineItem
      summary: Update Cart Line Item
      description: >-
        Updates a *Cart* line item. Updates an existing, single line item quantity and the price of custom items in a
        cart.


        If a modified product or variant needs to be changed or updated, you can remove and re-add the product to the
        cart with the correct variants using the [Delete Cart Line
        Item](/developer/api-reference/rest/storefront/carts/cart-items/delete-cart-line-item) and the [Add Cart Line
        Items](/developer/api-reference/rest/storefront/carts/cart-items/add-cart-line-item) endpoints. You can also use
        carts mutations that are part of the [GraphQL Storefront
        API](/developer/docs/storefront/guides/graphql-storefront-api/overview).



        > #### Notes

        > * Substitute your storefront domain for `yourstore.example.com`. 

        > * The Send a Test Request feature is not currently supported for this endpoint. 

        > * To prevent lost updates due to concurrent requests overriding changes made by others, it is recommended to
        enable optimistic concurrency control by including the `version` field in the request payload. If the provided
        version does not match the version on the server, a conflict error will be returned, which the client can handle
        accordingly.
      tags:
        - cartItems
      parameters:
        - name: cartId
          in: path
          description: This cartʼs unique ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: itemId
          in: path
          description: The ID of the subject item.
          required: true
          schema:
            type: string
            format: number
        - name: include
          in: query
          description: >-
            To return product options add one of the following include:


            `lineItems.physicalItems.options`: The Cart returns an abbreviated result. Use this to return physical items
            product options. Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options`:  The Cart returns an abbreviated result. Use this to return digital items
            product options.  Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options,lineItems.physicalItems.options`:  The Cart returns an abbreviated result.
            Use this to return digital and physical options. Can also be used in a /POST to have the extended Cart
            object return.
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CartsCartIdItemsItemIdPutParametersIncludeSchemaItems'
        - name: Accept
          in: header
          description: >-
            The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the response
            body.
          required: true
          schema:
            type: string
            default: application/json
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responseCart'
        '409':
          description: Cart conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateCartLineItemRequestConflictError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/requestLineItemPut'
    delete:
      operationId: deleteCartLineItem
      summary: Delete Cart Line Item
      description: >-
        Deletes a *Cart* line item.


        Removing the last `line_item` in the *Cart* deletes the *Cart*.


        > #### Note

        > * Substitute your storefront domain for `yourstore.example.com`. 

        > * The Send a Test Request feature is not currently supported for this endpoint.  

        > * To prevent lost updates due to concurrent requests overriding changes made by others, it is recommended to
        enable optimistic concurrency control by including the `version` field in the request payload. If the provided
        version does not match the version on the server, a conflict error will be returned, which the client can handle
        accordingly.
      tags:
        - cartItems
      parameters:
        - name: cartId
          in: path
          description: This cartʼs unique ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: itemId
          in: path
          description: The ID of the subject item.
          required: true
          schema:
            type: string
            format: number
        - name: include
          in: query
          description: >-
            To return product options add one of the following include:


            `lineItems.physicalItems.options`: The Cart returns an abbreviated result. Use this to return physical items
            product options. Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options`:  The Cart returns an abbreviated result. Use this to return digital items
            product options.  Can also be used in a /POST to have the extended Cart object return.


            `lineItems.digitalItems.options,lineItems.physicalItems.options`:  The Cart returns an abbreviated result.
            Use this to return digital and physical options. Can also be used in a /POST to have the extended Cart
            object return.
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/CartsCartIdItemsItemIdDeleteParametersIncludeSchemaItems'
        - name: Accept
          in: header
          description: >-
            The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the response
            body.
          required: true
          schema:
            type: string
            default: application/json
      responses:
        '200':
          description: >-
            NOTE: Discounted line items are re-evaluated on cart actions and may be automatically added back to your
            cart with a new line item ID to satisfy promotional requirements.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responseCart'
        '409':
          description: Cart conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteCartLineItemRequestConflictError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/requestLineItemDelete'
servers:
  - url: https://your_store.example.com/api/storefront
    description: https://{store_domain}/api/storefront
components:
  schemas:
    CartsGetParametersIncludeSchemaItems:
      type: string
      enum:
        - lineItems.physicalItems.options
        - lineItems.digitalItems.options
      title: CartsGetParametersIncludeSchemaItems
    responseCartCurrency:
      type: object
      properties:
        code:
          type: string
          format: ISO-4217
          description: 'ISO-4217 currency code. (See: https://www.iso.org/iso-4217-currency-codes.html.)'
        decimalPlaces:
          type: integer
          description: The number of decimal places that prices have when you use the currency.
        name:
          type: string
          description: The name for the currency that the merchant entered in the control panel.
        symbol:
          type: string
          description: The currency symbol displayed on the storefront.
      description: This will always be the same between cart and checkout.
      title: responseCartCurrency
    ResponseCartCouponsItems:
      type: object
      properties:
        code:
          type: string
          description: The coupon code.
        couponType:
          type: integer
          description: |-
            |Type `int`|Type Name|
            |-|-|
            |`0`|`per_item_discount`|
            |`1`|`percentage_discount`|
            |`2`|`per_total_discount`|
            |`3`|`shipping_discount`|
            |`4`|`free_shipping`|
            |`5`|`promotion`|
        discountedAmount:
          type: string
          title: float
          description: The discounted amount applied within a given context.
        displayName:
          type: string
          description: The coupon name displayed on the storefront.
        id:
          type: string
          description: The coupon ID.
      required:
        - code
      title: ResponseCartCouponsItems
    responseCartCoupons:
      type: array
      items:
        $ref: '#/components/schemas/ResponseCartCouponsItems'
      title: responseCartCoupons
    ResponseCartDiscountsItems:
      type: object
      properties:
        discountedAmount:
          type: string
          title: float
          description: The discounted amount applied within a given context.
        id:
          type: string
          description: ID of the applied discount.
      title: ResponseCartDiscountsItems
    responseCartDiscounts:
      type: array
      items:
        $ref: '#/components/schemas/ResponseCartDiscountsItems'
      title: responseCartDiscounts
    responseCartLineItemsCustomItems:
      type: object
      properties:
        extendedListPrice:
          type: integer
        id:
          type: string
          description: ID of the custom item
        listPrice:
          type: integer
          description: Price of the item. With or without tax depending on your stores set up.
        name:
          type: string
          description: Name of the custom item.
        quantity:
          type: integer
        sku:
          type: string
          description: SKU of the custom item.
      description: >-
        **Read Only**


        This will return in the Cart Response if the Cart was created using the [REST Management
        API](/developer/api-reference/rest/admin/management/carts). A custom item can only be added to a cart using the
        REST Management API.
      title: responseCartLineItemsCustomItems
    responseCartLineItemsDigitalItemsAllOf0OptionsItems:
      type: object
      properties:
        name:
          type: string
          description: The product option name. For example, Color or Size
        nameId:
          type: number
          format: double
          description: 'The product option identifier. It is the same as the `optionId` used in the request. '
        value:
          type: string
          description: The product option value. For example, Red or Medium
        valueId:
          type: number
          format: double
          description: The product option value identifier. It is the same as the `optionValue` used in the request.
      title: responseCartLineItemsDigitalItemsAllOf0OptionsItems
    responseCartLineItemsDigitalItemsAllOf0DiscountsItems:
      type: object
      properties:
        discountedAmount:
          type: string
          title: float
          description: The discounted amount applied within a given context.
        id:
          type: number
          format: double
          description: ID of the applied discount.
      title: responseCartLineItemsDigitalItemsAllOf0DiscountsItems
    ResponseCartLineItemsDigitalItemsAllOf0Type:
      type: string
      enum:
        - digital
      description: The type of line item.
      title: ResponseCartLineItemsDigitalItemsAllOf0Type
    responseCartLineItemsDigitalItems:
      type: object
      properties:
        options:
          type: array
          items:
            $ref: '#/components/schemas/responseCartLineItemsDigitalItemsAllOf0OptionsItems'
          description: The list of selected options for this product.
        brand:
          type: string
          description: The products brand
        couponAmount:
          type: number
          format: double
          description: The total value of all coupons applied to this item.
        discountAmount:
          type: string
          title: float
          description: The total value of all discounts applied to this item (excluding coupon).
        discounts:
          type: array
          items:
            $ref: '#/components/schemas/responseCartLineItemsDigitalItemsAllOf0DiscountsItems'
          description: List of discounts applied to this item, as an array of AppliedDiscount objects.
        extendedListPrice:
          type: number
          format: double
          description: Item's list price multiplied by the quantity.
        extendedSalePrice:
          type: number
          format: double
          description: Item's sale price multiplied by the quantity.
        id:
          type: string
          description: The line-item ID.
        imageUrl:
          type: string
          format: uri
          description: URL of an image of this item, accessible on the internet.
        isMutable:
          type: boolean
          description: >-
            Whether or not you can change or remove the item from the cart. Items that are immutable include those added
            automatically by promotions.
        isTaxable:
          type: boolean
          description: Whether the item is taxable.
        listPrice:
          type: number
          format: double
          description: >-
            The net item price before discounts and coupons. BigCommerce derives an item’s list price from the product
            default price or, if applicable, the sale price configured in the admin panel.
        originalPrice:
          type: number
          format: double
          description: An item’s original price is the same as the product default price in the admin panel.
        name:
          type: string
          description: The item's product name.
        parentId:
          type: string
          description: >-
            The product is part of a bundle such as a product pick list, then the parentId or the main product id will
            populate.
        productId:
          type: number
          format: double
          description: ID of the product.
        quantity:
          type: number
          format: double
          description: Quantity of this item.
        salePrice:
          type: number
          format: double
          description: Item's price after all discounts are applied. (The final price before tax calculation.)
        sku:
          type: string
          description: SKU of the variant.
        type:
          $ref: '#/components/schemas/ResponseCartLineItemsDigitalItemsAllOf0Type'
          description: The type of line item.
        url:
          type: string
          format: uri
          description: The product URL.
        variantId:
          type: number
          format: double
          description: ID of the variant.
      required:
        - quantity
      title: responseCartLineItemsDigitalItems
    responseCartLineItemsGiftCertificatesRecipient:
      type: object
      properties:
        email:
          type: string
          format: email
          description: Contact's email address.
        name:
          type: string
          description: Contact's name.
      title: responseCartLineItemsGiftCertificatesRecipient
    responseCartLineItemsGiftCertificatesSender:
      type: object
      properties:
        email:
          type: string
          format: email
          description: Contact's email address.
        name:
          type: string
          description: Contact's name.
      title: responseCartLineItemsGiftCertificatesSender
    ResponseCartLineItemsGiftCertificatesType:
      type: string
      enum:
        - giftCertificate
      description: The type of line item.
      title: ResponseCartLineItemsGiftCertificatesType
    responseCartLineItemsGiftCertificates:
      type: object
      properties:
        amount:
          type: number
          format: double
          description: Value must be between 1.00 and 1,000.00 in the storeʼs default currency.
        id:
          type: string
          description: ID of this gift certificate.
        taxable:
          type: boolean
          description: Whether or not the gift certificate is taxable.
        message:
          type: string
          description: Message that will be sent to the gift certificate's recipient. Limited to 200 characters.
        name:
          type: string
          description: Name provided for the gift certificate that appears in the control panel.
        recipient:
          $ref: '#/components/schemas/responseCartLineItemsGiftCertificatesRecipient'
        sender:
          $ref: '#/components/schemas/responseCartLineItemsGiftCertificatesSender'
        theme:
          type: string
          description: Currently supports `Birthday`, `Boy`, `Celebration`, `Christmas`, `General`, and `Girl`.
        type:
          $ref: '#/components/schemas/ResponseCartLineItemsGiftCertificatesType'
          description: The type of line item.
      required:
        - amount
        - recipient
        - sender
        - theme
      title: responseCartLineItemsGiftCertificates
    responseCartLineItemsItemsPhysicalItemsItemsAllOf0OptionsItems:
      type: object
      properties:
        name:
          type: string
          description: The product option name. For example, Color or Size
        nameId:
          type: number
          format: double
          description: The product option identifier. It is the same as the `optionId` used in the request.
        value:
          type: string
          description: The product option value. For example, Red or Medium
        valueId:
          type: number
          format: double
          description: The product option value identifier. It is the same as the `optionValue` used in the request.
      title: responseCartLineItemsItemsPhysicalItemsItemsAllOf0OptionsItems
    ResponseCartBaseItemType:
      type: string
      enum:
        - physical
      description: The type of line item.
      title: ResponseCartBaseItemType
    responseCartLineItemsPhysicalItemGiftWrapping:
      type: object
      properties:
        amount:
          type: string
          title: float
          description: Gift-wrapping price per product.
        message:
          type: string
        name:
          type: string
          description: Name of the gift-wrapping option.
      title: responseCartLineItemsPhysicalItemGiftWrapping
    responseCartLineItemsItemsPhysicalItemsItems:
      type: object
      properties:
        options:
          type: array
          items:
            $ref: '#/components/schemas/responseCartLineItemsItemsPhysicalItemsItemsAllOf0OptionsItems'
          description: The list of selected options for this product.
        brand:
          type: string
          description: The products brand
        couponAmount:
          type: number
          format: double
          description: The total value of all coupons applied to this item.
        discountAmount:
          type: string
          title: float
          description: The total value of all discounts applied to this item (excluding coupon).
        discounts:
          $ref: '#/components/schemas/responseCartDiscounts'
        extendedListPrice:
          type: number
          format: double
          description: Item's list price multiplied by the quantity.
        extendedSalePrice:
          type: number
          format: double
          description: Item's sale price multiplied by the quantity.
        id:
          type: string
          description: The line-item ID.
        imageUrl:
          type: string
          format: uri
          description: URL of an image of this item, accessible on the internet.
        isMutable:
          type: boolean
          description: >-
            Whether or not you can change or remove the item from the cart. Items that are immutable include those added
            automatically by promotions.
        isTaxable:
          type: boolean
          description: Whether the item is taxable.
        listPrice:
          type: number
          format: double
          description: >-
            The net item price before discounts and coupons. BigCommerce derives an item’s list price from the product
            default price or, if applicable, the sale price configured in the admin panel.
        originalPrice:
          type: number
          format: double
          description: An item’s original price is the same as the product default price in the admin panel.
        name:
          type: string
          description: The item's product name.
        parentId:
          type: number
          format: double
          description: >-
            The product is part of a bundle such as a product pick list, then the parentId or the main product id will
            populate.
        productId:
          type: number
          format: double
          description: ID of the product.
        quantity:
          type: number
          format: double
          description: Quantity of this item.
        salePrice:
          type: number
          format: double
          description: Item's price after all discounts are applied. (The final price before tax calculation.)
        sku:
          type: string
          description: SKU of the variant.
        type:
          $ref: '#/components/schemas/ResponseCartBaseItemType'
          description: The type of line item.
        url:
          type: string
          format: uri
          description: The product URL.
        variantId:
          type: number
          format: double
          description: ID of the variant.
        giftWrapping:
          $ref: '#/components/schemas/responseCartLineItemsPhysicalItemGiftWrapping'
        isShippingRequired:
          type: boolean
          description: Whether this item requires shipping to a physical address.
      required:
        - quantity
      title: responseCartLineItemsItemsPhysicalItemsItems
    responseCartLineItems:
      type: object
      properties:
        customItems:
          type: array
          items:
            $ref: '#/components/schemas/responseCartLineItemsCustomItems'
        digitalItems:
          type: array
          items:
            $ref: '#/components/schemas/responseCartLineItemsDigitalItems'
          description: Array of `ItemDigital` objects.
        giftCertificates:
          type: array
          items:
            $ref: '#/components/schemas/responseCartLineItemsGiftCertificates'
          description: Array of `ItemGiftCertificate` objects.
        physicalItems:
          type: array
          items:
            $ref: '#/components/schemas/responseCartLineItemsItemsPhysicalItemsItems'
          description: Array of `ItemPhysical` objects.
      title: responseCartLineItems
    responseCart:
      type: object
      properties:
        id:
          type: string
          format: UUID
          description: Cart ID, provided after creating a cart with a POST.
        customerId:
          type: integer
          description: ID of the customer to which the cart belongs.
        email:
          type: string
          description: The cart's email. This is the same email that is used in the billing address
        currency:
          $ref: '#/components/schemas/responseCartCurrency'
        isTaxIncluded:
          type: boolean
          description: Whether this item is taxable.
        baseAmount:
          type: number
          format: double
          description: Cost of cart’s contents, before applying discounts.
        discountAmount:
          type: string
          title: float
          description: Order based discounted amount only - Coupon discounts and product based discounts are excluded.
        cartAmount:
          type: number
          format: double
          description: >-
            Sum of line-items amounts, minus cart-level discounts and coupons. This amount includes taxes (where
            applicable).
        coupons:
          $ref: '#/components/schemas/responseCartCoupons'
        discounts:
          $ref: '#/components/schemas/responseCartDiscounts'
        lineItems:
          $ref: '#/components/schemas/responseCartLineItems'
        createdTime:
          type: string
          format: ISO-8601
          description: Time when the cart was created.
        updatedTime:
          type: string
          format: ISO-8601
          description: Time when the cart was last updated.
        locale:
          type: string
          description: Locale of the cart.
        version:
          type: integer
          description: >-
            The current version of the cart increments with each successful update. You can use it to enable optimistic
            concurrency control for subsequent updates.
      description: Cart object used in REST Storefront API cart responses.
      title: responseCart
    CartsPostParametersIncludeSchemaItems:
      type: string
      enum:
        - lineItems.physicalItems.options
        - lineItems.digitalItems.options
      title: CartsPostParametersIncludeSchemaItems
    RequestCartPostLineItemOneOf0OptionSelectionsItemsOptionValue:
      oneOf:
        - type: string
        - type: integer
      description: Modifier option value.
      title: RequestCartPostLineItemOneOf0OptionSelectionsItemsOptionValue
    RequestCartPostLineItemOneOf0OptionSelectionsItems:
      type: object
      properties:
        optionId:
          type: integer
          description: Modifier option ID.
        optionValue:
          $ref: '#/components/schemas/RequestCartPostLineItemOneOf0OptionSelectionsItemsOptionValue'
          description: Modifier option value.
      title: RequestCartPostLineItemOneOf0OptionSelectionsItems
    RequestPostOrPutGiftWrappingWrapDetailsItems:
      type: object
      properties:
        id:
          type: integer
          description: Identifier of the gift wrapping option selected.
        message:
          type: string
          description: Custom gift message.
      required:
        - id
      title: RequestPostOrPutGiftWrappingWrapDetailsItems
    requestPostOrPutGiftWrapping:
      type: object
      properties:
        wrapTogether:
          type: boolean
          description: Boolean value that specifies whether items whether items should be wrapped together or wrapped individually.
        wrapDetails:
          type: array
          items:
            $ref: '#/components/schemas/RequestPostOrPutGiftWrappingWrapDetailsItems'
          description: >-
            Details for the gift wrapping option selected. This can be specified for each line item or together based on
            wrapTogether value.

            If wrapTogether is false, each element in the wrapDetails array determines each item's specific wrapping. 

            (e.g if this line item has 6 quantity, you can pass at maximum 6 elements for the array to spefified each
            one's wrapping)  

            If wrapTogether is true, we will only use 1st element in the wrapDetails array to determine what to be
            wrapped
      required:
        - wrapTogether
        - wrapDetails
      description: if passing null, it will remove the current gift wrapping for the item
      title: requestPostOrPutGiftWrapping
    RequestCartPostLineItem0:
      type: object
      properties:
        productId:
          type: number
          format: double
          description: ID of the product.
        optionSelections:
          type: array
          items:
            $ref: '#/components/schemas/RequestCartPostLineItemOneOf0OptionSelectionsItems'
        quantity:
          type: number
          format: double
          description: Quantity of this item.
        giftWrapping:
          $ref: '#/components/schemas/requestPostOrPutGiftWrapping'
      required:
        - productId
        - quantity
      title: RequestCartPostLineItem0
    RequestCartPostLineItemOneOf1OptionSelectionsItemsOptionValue:
      oneOf:
        - type: string
        - type: integer
      description: Modifier option value.
      title: RequestCartPostLineItemOneOf1OptionSelectionsItemsOptionValue
    RequestCartPostLineItemOneOf1OptionSelectionsItems:
      type: object
      properties:
        optionId:
          type: integer
          description: Modifier option ID.
        optionValue:
          $ref: '#/components/schemas/RequestCartPostLineItemOneOf1OptionSelectionsItemsOptionValue'
          description: Modifier option value.
      title: RequestCartPostLineItemOneOf1OptionSelectionsItems
    RequestCartPostLineItem1:
      type: object
      properties:
        productId:
          type: number
          format: double
          description: ID of the product.
        quantity:
          type: number
          format: double
          description: Quantity of this item.
        variantId:
          type: number
          format: double
          description: ID of the variant.
        optionSelections:
          type: array
          items:
            $ref: '#/components/schemas/RequestCartPostLineItemOneOf1OptionSelectionsItems'
        giftWrapping:
          $ref: '#/components/schemas/requestPostOrPutGiftWrapping'
      required:
        - productId
        - quantity
      title: RequestCartPostLineItem1
    requestCartPostLineItem:
      oneOf:
        - $ref: '#/components/schemas/RequestCartPostLineItem0'
        - $ref: '#/components/schemas/RequestCartPostLineItem1'
      title: requestCartPostLineItem
    RequestCart0:
      type: object
      properties:
        lineItems:
          type: array
          items:
            $ref: '#/components/schemas/requestCartPostLineItem'
        locale:
          type: string
      required:
        - lineItems
      title: RequestCart0
    requestLineItemGiftCertificateRecipient:
      type: object
      properties:
        email:
          type: string
          format: email
          description: Contact's email address.
        name:
          type: string
          description: Contact's name.
      title: requestLineItemGiftCertificateRecipient
    requestLineItemGiftCertificateSender:
      type: object
      properties:
        email:
          type: string
          format: email
          description: Contact's email address.
        name:
          type: string
          description: Contact's name.
      title: requestLineItemGiftCertificateSender
    requestLineItemGiftCertificate:
      type: object
      properties:
        amount:
          type: number
          format: double
          description: Gift-certificate amount.
        message:
          type: string
          description: Message shown to recipient, as provided by sender.
        name:
          type: string
          description: Name assigned to this gift-certificate line item.
        quantity:
          type: integer
          description: Quantity of this item.
        recipient:
          $ref: '#/components/schemas/requestLineItemGiftCertificateRecipient'
        sender:
          $ref: '#/components/schemas/requestLineItemGiftCertificateSender'
        theme:
          type: string
          description: Currently supports `Birthday`, `Boy`, `Celebration`, `Christmas`, `General`, and `Girl`.
      required:
        - amount
        - name
        - quantity
        - recipient
        - sender
        - theme
      title: requestLineItemGiftCertificate
    RequestCart1:
      type: object
      properties:
        giftCertificates:
          type: array
          items:
            $ref: '#/components/schemas/requestLineItemGiftCertificate'
        locale:
          type: string
      required:
        - giftCertificates
      title: RequestCart1
    RequestCart2:
      type: object
      properties:
        lineItems:
          type: array
          items:
            $ref: '#/components/schemas/requestCartPostLineItem'
        giftCertificates:
          type: array
          items:
            $ref: '#/components/schemas/requestLineItemGiftCertificate'
        locale:
          type: string
      required:
        - lineItems
        - giftCertificates
      title: RequestCart2
    requestCart:
      oneOf:
        - $ref: '#/components/schemas/RequestCart0'
        - $ref: '#/components/schemas/RequestCart1'
        - $ref: '#/components/schemas/RequestCart2'
      description: Cart object used in create cart requests.
      title: requestCart
    CartsCartIdCurrencyPostParametersIncludeSchemaItems:
      type: string
      enum:
        - lineItems.physicalItems.options
        - lineItems.digitalItems.options
      title: CartsCartIdCurrencyPostParametersIncludeSchemaItems
    CartsCartIdItemsPostParametersIncludeSchemaItems:
      type: string
      enum:
        - lineItems.physicalItems.options
        - lineItems.digitalItems.options
      title: CartsCartIdItemsPostParametersIncludeSchemaItems
    LineItemsRequest0:
      type: object
      properties:
        lineItems:
          type: array
          items:
            $ref: '#/components/schemas/requestCartPostLineItem'
        version:
          type: integer
          description: >-
            The cart version that you expect to apply the updates. If the provided version doesn't match the current
            cart version, you will receive a conflict error. This field is optional; if not provided, optimistic
            concurrency control will not apply.
      required:
        - lineItems
      title: LineItemsRequest0
    LineItemsRequest1:
      type: object
      properties:
        giftCertificates:
          type: array
          items:
            $ref: '#/components/schemas/requestLineItemGiftCertificate'
        version:
          type: integer
          description: >-
            The cart version that you expect to apply the updates. If the provided version doesn't match the current
            cart version, you will receive a conflict error. This field is optional; if not provided, optimistic
            concurrency control will not apply.
      required:
        - giftCertificates
      title: LineItemsRequest1
    LineItemsRequest2:
      type: object
      properties:
        lineItems:
          type: array
          items:
            $ref: '#/components/schemas/requestCartPostLineItem'
        giftCertificates:
          type: array
          items:
            $ref: '#/components/schemas/requestLineItemGiftCertificate'
        version:
          type: integer
          description: >-
            The cart version that you expect to apply the updates. If the provided version doesn't match the current
            cart version, you will receive a conflict error. This field is optional; if not provided, optimistic
            concurrency control will not apply.
      required:
        - lineItems
        - giftCertificates
      title: LineItemsRequest2
    LineItemsRequest:
      oneOf:
        - $ref: '#/components/schemas/LineItemsRequest0'
        - $ref: '#/components/schemas/LineItemsRequest1'
        - $ref: '#/components/schemas/LineItemsRequest2'
      description: Cart object used in add items requests.
      title: LineItemsRequest
    AddCartLineItemRequestConflictError:
      type: object
      properties:
        status:
          type: integer
        title:
          type: string
        type:
          type: string
      title: AddCartLineItemRequestConflictError
    CartsCartIdItemsItemIdPutParametersIncludeSchemaItems:
      type: string
      enum:
        - lineItems.physicalItems.options
        - lineItems.digitalItems.options
      title: CartsCartIdItemsItemIdPutParametersIncludeSchemaItems
    RequestLineItemPut0:
      type: object
      properties:
        lineItem:
          $ref: '#/components/schemas/requestCartPostLineItem'
        version:
          type: integer
          description: >-
            The cart version that you expect to apply the updates. If the provided version doesn't match the current
            cart version, you will receive a conflict error. This field is optional; if not provided, optimistic
            concurrency control will not apply.
      required:
        - lineItem
      title: RequestLineItemPut0
    RequestLineItemPut1:
      type: object
      properties:
        giftCertificate:
          $ref: '#/components/schemas/requestLineItemGiftCertificate'
        version:
          type: integer
          description: >-
            The cart version that you expect to apply the updates. If the provided version doesn't match the current
            cart version, you will receive a conflict error. This field is optional; if not provided, optimistic
            concurrency control will not apply.
      title: RequestLineItemPut1
    RequestLineItemPut2:
      type: object
      properties:
        lineItem:
          $ref: '#/components/schemas/requestCartPostLineItem'
        giftCertificate:
          $ref: '#/components/schemas/requestLineItemGiftCertificate'
        version:
          type: integer
          description: >-
            The cart version that you expect to apply the updates. If the provided version doesn't match the current
            cart version, you will receive a conflict error. This field is optional; if not provided, optimistic
            concurrency control will not apply.
      required:
        - lineItem
      title: RequestLineItemPut2
    requestLineItemPut:
      oneOf:
        - $ref: '#/components/schemas/RequestLineItemPut0'
        - $ref: '#/components/schemas/RequestLineItemPut1'
        - $ref: '#/components/schemas/RequestLineItemPut2'
      title: requestLineItemPut
    UpdateCartLineItemRequestConflictError:
      type: object
      properties:
        status:
          type: integer
        title:
          type: string
        type:
          type: string
      title: UpdateCartLineItemRequestConflictError
    CartsCartIdItemsItemIdDeleteParametersIncludeSchemaItems:
      type: string
      enum:
        - lineItems.physicalItems.options
        - lineItems.digitalItems.options
      title: CartsCartIdItemsItemIdDeleteParametersIncludeSchemaItems
    requestLineItemDelete:
      type: object
      properties:
        version:
          type: integer
          description: >-
            The cart version that you expect to apply the updates. If the provided version doesn't match the current
            cart version, you will receive a conflict error. This field is optional; if not provided, optimistic
            concurrency control will not apply.
      title: requestLineItemDelete
    DeleteCartLineItemRequestConflictError:
      type: object
      properties:
        status:
          type: integer
        title:
          type: string
        type:
          type: string
      title: DeleteCartLineItemRequestConflictError
