openapi: 3.0.0
info:
  version: 1.0.0
  title: Medusa Storefront API
  license:
    name: MIT
    url: https://github.com/medusajs/medusa/blob/master/LICENSE
servers:
  - url: http://localhost:9000
  - url: https://api.medusa-commerce.com
tags:
  - name: Auth
    description: |
      Authentication API Routes allow you to manage a customer's session, such as login or log out.
      You can send authenticated requests for a customer either using the Cookie header or using the JWT Token.
    externalDocs:
      description: How to implement customer profiles in your storefront
      url: https://docs.medusajs.com/modules/customers/storefront/implement-customer-profiles
  - name: Carts
    description: |
      A cart is a virtual shopping bag that customers can use to add items they want to purchase.
      A cart is then used to checkout and place an order.
    externalDocs:
      description: How to implement cart functionality in your storefront
      url: https://docs.medusajs.com/modules/carts-and-checkout/storefront/implement-cart
  - name: Customers
    description: |
      A customer can register and manage their information such as addresses, orders, payment methods, and more.
    externalDocs:
      description: How to implement customer profiles in your storefront
      url: https://docs.medusajs.com/modules/customers/storefront/implement-customer-profiles
  - name: Gift Cards
    description: |
      Customers can use gift cards during checkout to deduct the gift card's balance from the checkout total.
      The Gift Card API Routes allow retrieving a gift card's details by its code. A gift card can be applied to a cart using the Carts API Routes.
    externalDocs:
      description: How to use gift cards in a storefront
      url: https://docs.medusajs.com/modules/gift-cards/storefront/use-gift-cards
  - name: Orders
    description: |
      Orders are purchases made by customers, typically through a storefront.
      Orders are placed and created using the Carts API Routes. The Orders API Routes allow retrieving and claiming orders.
    externalDocs:
      description: How to retrieve order details in a storefront
      url: https://docs.medusajs.com/modules/orders/storefront/retrieve-order-details
  - name: Order Edits
    description: |
      Order edits are changes made to items in an order such as adding, updating their quantity, or deleting them. Order edits are created by the admin.
      A customer can review order edit requests created by an admin and confirm or decline them.
    externalDocs:
      description: How to handle order edits in a storefront
      url: https://docs.medusajs.com/modules/orders/storefront/handle-order-edits
  - name: Payment Collections
    description: |
      A payment collection is useful for managing additional payments, such as for Order Edits, or installment payments.
  - name: Products
    description: |
      Products are saleable items in a store. This also includes [saleable gift cards](https://docs.medusajs.com/modules/gift-cards/storefront/use-gift-cards) in a store.
      Using these API Routes, you can filter products by categories, collections, sales channels, and more.
    externalDocs:
      description: How to show products in a storefront
      url: https://docs.medusajs.com/modules/products/storefront/show-products
  - name: Product Variants
    description: |
      Product variants are the actual salable item in your store. Each variant is a combination of the different option values available on the product.
  - name: Product Categories
    description: |
      Products can be categoriezed into categories. A product can be associated more than one category.
      Using these API Routes, you can list or retrieve a category's details and products.
    externalDocs:
      description: How to use product categories in a storefront
      url: https://docs.medusajs.com/modules/products/storefront/use-categories
  - name: Product Collections
    description: |
      A product collection is used to organize products for different purposes such as marketing or discount purposes. For example, you can create a Summer Collection.
      Using these API Routes, you can list or retrieve a collection's details and products.
  - name: Product Tags
    description: |
      Product tags are string values that can be used to filter products by.
      Products can have more than one tag, and products can share tags.
  - name: Product Types
    description: |
      Product types are string values that can be used to filter products by.
      Products can have more than one tag, and products can share types.
  - name: Regions
    description: |
      Regions are different countries or geographical regions that the commerce store serves customers in.
      Customers can choose what region they're in, which can be used to change the prices shown based on the region and its currency.
    externalDocs:
      description: How to use regions in a storefront
      url: https://docs.medusajs.com/modules/regions-and-currencies/storefront/use-regions
  - name: Returns
    description: |
      A return can be created by a customer to return items in an order.
    externalDocs:
      description: How to create a return in a storefront
      url: https://docs.medusajs.com/modules/orders/storefront/create-return
  - name: Return Reasons
    description: |
      Return reasons are key-value pairs that are used to specify why an order return is being created.
  - name: Shipping Options
    description: |
      A shipping option is used to define the available shipping methods during checkout or when creating a return.
    externalDocs:
      description: Shipping Option architecture
      url: https://docs.medusajs.com/modules/carts-and-checkout/shipping#shipping-option
  - name: Swaps
    description: |
      A swap is created by a customer or an admin to exchange an item with a new one.
      Creating a swap implicitely includes creating a return for the item being exchanged.
    externalDocs:
      description: How to create a swap in a storefront
      url: https://docs.medusajs.com/modules/orders/storefront/create-swap
paths:
  /store/auth:
    get:
      operationId: GetAuth
      summary: Get Current Customer
      description: Retrieve the currently logged in Customer's details.
      x-authenticated: true
      x-codegen:
        method: getSession
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged
            medusa.auth.getSession()
            .then(({ customer }) => {
              console.log(customer.id);
            })
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/auth' \
            -H 'Authorization: Bearer {access_token}'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Auth
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreAuthRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
    post:
      operationId: PostAuth
      summary: Customer Login
      description: Log a customer in and includes the Cookie session in the response header. The cookie session can be used in subsequent requests to authenticate the customer. When using Medusa's JS or Medusa React clients, the cookie is automatically attached to subsequent requests.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostAuthReq'
      x-codegen:
        method: authenticate
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.auth.authenticate({
              email: "user@example.com",
              password: "user@example.com"
            })
            .then(({ customer }) => {
              console.log(customer.id);
            })
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/auth' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "email": "user@example.com",
                "password": "supersecret"
            }'
      tags:
        - Auth
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreAuthRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/incorrect_credentials'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
    delete:
      operationId: DeleteAuth
      summary: Customer Log out
      description: Delete the current session for the logged in customer.
      x-authenticated: true
      x-codegen:
        method: deleteSession
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.auth.deleteSession()
            .then(() => {
              // customer logged out successfully
            })
        - lang: Shell
          label: cURL
          source: |
            curl -X DELETE '{backend_url}/store/auth' \
            -H 'Authorization: Bearer {access_token}'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Auth
      responses:
        '200':
          description: OK
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/auth/token:
    post:
      operationId: PostToken
      summary: Customer Login (JWT)
      x-authenticated: false
      description: After a successful login, a JWT token is returned, which can be used to send authenticated requests.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostAuthReq'
      x-codegen:
        method: getToken
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.auth.getToken({
              email: 'user@example.com',
              password: 'supersecret'
            })
            .then(({ access_token }) => {
              console.log(access_token);
            })
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/auth/token' \
            -H 'Content-Type: application/json' \
            --data-raw '{
              "email": "user@example.com",
              "password": "supersecret"
            }'
      tags:
        - Auth
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreBearerAuthRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/incorrect_credentials'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/auth/{email}:
    get:
      operationId: GetAuthEmail
      summary: Check if Email Exists
      description: Check if there's a customer already registered with the provided email.
      parameters:
        - in: path
          name: email
          schema:
            type: string
            format: email
          required: true
          description: The email to check.
      x-codegen:
        method: exists
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.auth.exists("user@example.com")
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/auth/user@example.com'
      tags:
        - Auth
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreGetAuthEmailRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts:
    post:
      operationId: PostCart
      summary: Create a Cart
      description: |
        Create a Cart. Although optional, specifying the cart's region and sales channel can affect the cart's pricing and
        the products that can be added to the cart respectively. So, make sure to set those early on and change them if necessary, such as when the customer changes their region.

        If a customer is logged in, make sure to pass its ID or email within the cart's details so that the cart is attached to the customer.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCartReq'
      x-codegen:
        method: create
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.create()
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCreateCart } from "medusa-react"

            type Props = {
              regionId: string
            }

            const Cart = ({ regionId }: Props) => {
              const createCart = useCreateCart()

              const handleCreate = () => {
                createCart.mutate({
                  region_id: regionId
                  // creates an empty cart
                }, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.items)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts'
      tags:
        - Carts
      responses:
        '200':
          description: Successfully created a new Cart
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}:
    get:
      operationId: GetCartsCart
      summary: Get a Cart
      description: Retrieve a Cart's details. This includes recalculating its totals.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
      x-codegen:
        method: retrieve
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.retrieve(cartId)
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useGetCart } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const { cart, isLoading } = useGetCart(cartId)

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {cart && cart.items.length === 0 && (
                    <span>Cart is empty</span>
                  )}
                  {cart && cart.items.length > 0 && (
                    <ul>
                      {cart.items.map((item) => (
                        <li key={item.id}>{item.title}</li>
                      ))}
                    </ul>
                  )}
                </div>
              )
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/carts/{id}'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
    post:
      operationId: PostCartsCart
      summary: Update a Cart
      description: Update a Cart's details. If the cart has payment sessions and the region was not changed, the payment sessions are updated. The cart's totals are also recalculated.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCartsCartReq'
      x-codegen:
        method: update
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.update(cartId, {
              email: "user@example.com"
            })
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useUpdateCart } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const updateCart = useUpdateCart(cartId)

              const handleUpdate = (
                email: string
              ) => {
                updateCart.mutate({
                  email
                }, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.email)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts/{id}' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "email": "user@example.com"
            }'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}/complete:
    post:
      summary: Complete a Cart
      operationId: PostCartsCartComplete
      description: |
        Complete a cart and place an order or create a swap, based on the cart's type. This includes attempting to authorize the cart's payment.
        If authorizing the payment requires more action, the cart will not be completed and the order will not be placed or the swap will not be created.

        An idempotency key will be generated if none is provided in the header `Idempotency-Key` and added to
        the response. If an error occurs during cart completion or the request is interrupted for any reason, the cart completion can be retried by passing the idempotency
        key in the `Idempotency-Key` header.
      externalDocs:
        description: Cart completion overview
        url: https://docs.medusajs.com/modules/carts-and-checkout/cart#cart-completion
      parameters:
        - in: path
          name: id
          required: true
          description: The Cart ID.
          schema:
            type: string
      x-codegen:
        method: complete
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.complete(cartId)
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCompleteCart } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const completeCart = useCompleteCart(cartId)

              const handleComplete = () => {
                completeCart.mutate(void 0, {
                  onSuccess: ({ data, type }) => {
                    console.log(data.id, type)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts/{id}/complete'
      tags:
        - Carts
      responses:
        '200':
          description: If the payment of the cart was successfully authorized, but requires further action from the customer, the response body will contain the cart with an updated payment session. Otherwise, if the payment was authorized and the cart was successfully completed, the response body will contain either the newly created order or swap, depending on what the cart was created for.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCompleteCartRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}/discounts/{code}:
    delete:
      operationId: DeleteCartsCartDiscountsDiscount
      summary: Remove Discount
      description: Remove a Discount from a Cart. This only removes the application of the discount, and not completely deletes it. The totals will be re-calculated and the payment sessions will be refreshed after the removal.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
        - in: path
          name: code
          required: true
          description: The unique discount code.
          schema:
            type: string
      x-codegen:
        method: deleteDiscount
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.deleteDiscount(cartId, code)
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: Shell
          label: cURL
          source: |
            curl -X DELETE '{backend_url}/store/carts/{id}/discounts/{code}'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}/line-items:
    post:
      operationId: PostCartsCartLineItems
      summary: Add a Line Item
      description: Generates a Line Item with a given Product Variant and adds it to the Cart
      parameters:
        - in: path
          name: id
          required: true
          description: The id of the Cart to add the Line Item to.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCartsCartLineItemsReq'
      x-codegen:
        method: createLineItem
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.lineItems.create(cart_id, {
              variant_id,
              quantity: 1
            })
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCreateLineItem } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const createLineItem = useCreateLineItem(cartId)

              const handleAddItem = (
                variantId: string,
                quantity: number
              ) => {
                createLineItem.mutate({
                  variant_id: variantId,
                  quantity,
                }, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.items)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts/{id}/line-items' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "variant_id": "{variant_id}",
                "quantity": 1
            }'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}/line-items/{line_id}:
    post:
      operationId: PostCartsCartLineItemsItem
      summary: Update a Line Item
      description: Update a line item's quantity.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
        - in: path
          name: line_id
          required: true
          description: The ID of the Line Item.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCartsCartLineItemsItemReq'
      x-codegen:
        method: updateLineItem
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.lineItems.update(cartId, lineId, {
              quantity: 1
            })
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useUpdateLineItem } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const updateLineItem = useUpdateLineItem(cartId)

              const handleUpdateItem = (
                lineItemId: string,
                quantity: number
              ) => {
                updateLineItem.mutate({
                  lineId: lineItemId,
                  quantity,
                }, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.items)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts/{id}/line-items/{line_id}' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "quantity": 1
            }'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
    delete:
      operationId: DeleteCartsCartLineItemsItem
      summary: Delete a Line Item
      description: Delete a Line Item from a Cart. The payment sessions will be updated and the totals will be recalculated.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
        - in: path
          name: line_id
          required: true
          description: The ID of the Line Item.
          schema:
            type: string
      x-codegen:
        method: deleteLineItem
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.lineItems.delete(cartId, lineId)
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useDeleteLineItem } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const deleteLineItem = useDeleteLineItem(cartId)

              const handleDeleteItem = (
                lineItemId: string
              ) => {
                deleteLineItem.mutate({
                  lineId: lineItemId,
                }, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.items)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X DELETE '{backend_url}/store/carts/{id}/line-items/{line_id}'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}/payment-session:
    post:
      operationId: PostCartsCartPaymentSession
      summary: Select a Payment Session
      description: Select the Payment Session that will be used to complete the cart. This is typically used when the customer chooses their preferred payment method during checkout. The totals of the cart will be recalculated.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCartsCartPaymentSessionReq'
      x-codegen:
        method: setPaymentSession
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.setPaymentSession(cartId, {
              provider_id: "manual"
            })
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useSetPaymentSession } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const setPaymentSession = useSetPaymentSession(cartId)

              const handleSetPaymentSession = (
                providerId: string
              ) => {
                setPaymentSession.mutate({
                  provider_id: providerId,
                }, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.payment_session)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts/{id}/payment-sessions' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "provider_id": "manual"
            }'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}/payment-sessions:
    post:
      operationId: PostCartsCartPaymentSessions
      summary: Create Payment Sessions
      description: Create Payment Sessions for each of the available Payment Providers in the Cart's Region. If there's only one payment session created, it will be selected by default. The creation of the payment session uses the payment provider and may require sending requests to third-party services.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
      x-codegen:
        method: createPaymentSessions
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.createPaymentSessions(cartId)
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCreatePaymentSession } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const createPaymentSession = useCreatePaymentSession(cartId)

              const handleComplete = () => {
                createPaymentSession.mutate(void 0, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.payment_sessions)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts/{id}/payment-sessions'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}/payment-sessions/{provider_id}:
    post:
      operationId: PostCartsCartPaymentSessionUpdate
      summary: Update a Payment Session
      description: Update a Payment Session with additional data. This can be useful depending on the payment provider used. All payment sessions are updated and cart totals are recalculated afterwards.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
        - in: path
          name: provider_id
          required: true
          description: The ID of the payment provider.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCartsCartPaymentSessionUpdateReq'
      x-codegen:
        method: updatePaymentSession
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.updatePaymentSession(cartId, "manual", {
              data: {

              }
            })
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useUpdatePaymentSession } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const updatePaymentSession = useUpdatePaymentSession(cartId)

              const handleUpdate = (
                providerId: string,
                data: Record<string, unknown>
              ) => {
                updatePaymentSession.mutate({
                  provider_id: providerId,
                  data
                }, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.payment_session)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts/{id}/payment-sessions/manual' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "data": {}
            }'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
    delete:
      operationId: DeleteCartsCartPaymentSessionsSession
      summary: Delete a Payment Session
      description: Delete a Payment Session in a Cart. May be useful if a payment has failed. The totals will be recalculated.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
        - in: path
          name: provider_id
          required: true
          description: The ID of the Payment Provider used to create the Payment Session to be deleted.
          schema:
            type: string
      x-codegen:
        method: deletePaymentSession
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.deletePaymentSession(cartId, "manual")
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useDeletePaymentSession } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const deletePaymentSession = useDeletePaymentSession(cartId)

              const handleDeletePaymentSession = (
                providerId: string
              ) => {
                deletePaymentSession.mutate({
                  provider_id: providerId,
                }, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.payment_sessions)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X DELETE '{backend_url}/store/carts/{id}/payment-sessions/{provider_id}'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}/payment-sessions/{provider_id}/refresh:
    post:
      operationId: PostCartsCartPaymentSessionsSession
      summary: Refresh a Payment Session
      description: Refresh a Payment Session to ensure that it is in sync with the Cart. This is usually not necessary, but is provided for edge cases.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
        - in: path
          name: provider_id
          required: true
          description: The ID of the Payment Provider that created the Payment Session to be refreshed.
          schema:
            type: string
      x-codegen:
        method: refreshPaymentSession
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.refreshPaymentSession(cartId, "manual")
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useRefreshPaymentSession } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const refreshPaymentSession = useRefreshPaymentSession(cartId)

              const handleRefresh = (
                providerId: string
              ) => {
                refreshPaymentSession.mutate({
                  provider_id: providerId,
                }, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.payment_sessions)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts/{id}/payment-sessions/{provider_id}/refresh'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}/shipping-methods:
    post:
      operationId: PostCartsCartShippingMethod
      summary: Add Shipping Method
      description: Add a Shipping Method to the Cart. The validation of the `data` field is handled by the fulfillment provider of the chosen shipping option.
      parameters:
        - in: path
          name: id
          required: true
          description: The cart ID.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCartsCartShippingMethodReq'
      x-codegen:
        method: addShippingMethod
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.carts.addShippingMethod(cartId, {
              option_id
            })
            .then(({ cart }) => {
              console.log(cart.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useAddShippingMethodToCart } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Cart = ({ cartId }: Props) => {
              const addShippingMethod = useAddShippingMethodToCart(cartId)

              const handleAddShippingMethod = (
                optionId: string
              ) => {
                addShippingMethod.mutate({
                  option_id: optionId,
                }, {
                  onSuccess: ({ cart }) => {
                    console.log(cart.shipping_methods)
                  }
                })
              }

              // ...
            }

            export default Cart
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts/{id}/shipping-methods' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "option_id": "{option_id}",
            }'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/carts/{id}/taxes:
    post:
      operationId: PostCartsCartTaxes
      summary: Calculate Cart Taxes
      description: Calculate the taxes for a cart. This is useful if the `automatic_taxes` field of the cart's region is set to `false`. If the cart's region uses a tax provider other than Medusa's system provider, this may lead to sending requests to third-party services.
      externalDocs:
        description: How to calculate taxes manually during checkout
        url: https://docs.medusajs.com/modules/taxes/storefront/manual-calculation
      parameters:
        - in: path
          name: id
          required: true
          description: The Cart ID.
          schema:
            type: string
      x-codegen:
        method: calculateTaxes
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/carts/{id}/taxes'
      tags:
        - Carts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/collections:
    get:
      operationId: GetCollections
      summary: List Collections
      description: Retrieve a list of product collections. The product collections can be filtered by fields such as `handle` or `created_at`. The product collections can also be paginated.
      parameters:
        - in: query
          name: offset
          description: The number of product collections to skip when retrieving the product collections.
          schema:
            type: integer
            default: 0
        - in: query
          name: limit
          description: Limit the number of product collections returned.
          schema:
            type: integer
            default: 10
        - in: query
          name: handle
          style: form
          explode: false
          description: Filter by handles
          schema:
            type: array
            items:
              type: string
        - in: query
          name: created_at
          description: Filter by a creation date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
        - in: query
          name: updated_at
          description: Filter by an update date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
      x-codegen:
        method: list
        queryParams: StoreGetCollectionsParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.collections.list()
            .then(({ collections, limit, offset, count }) => {
              console.log(collections.length);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCollections } from "medusa-react"

            const ProductCollections = () => {
              const { collections, isLoading } = useCollections()

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {collections && collections.length === 0 && (
                    <span>No Product Collections</span>
                  )}
                  {collections && collections.length > 0 && (
                    <ul>
                      {collections.map((collection) => (
                        <li key={collection.id}>{collection.title}</li>
                      ))}
                    </ul>
                  )}
                </div>
              )
            }

            export default ProductCollections
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/collections'
      tags:
        - Product Collections
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCollectionsListRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/collections/{id}:
    get:
      operationId: GetCollectionsCollection
      summary: Get a Collection
      description: Retrieve a Product Collection's details.
      parameters:
        - in: path
          name: id
          required: true
          description: The id of the Product Collection
          schema:
            type: string
      x-codegen:
        method: retrieve
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.collections.retrieve(collectionId)
            .then(({ collection }) => {
              console.log(collection.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCollection } from "medusa-react"

            type Props = {
              collectionId: string
            }

            const ProductCollection = ({ collectionId }: Props) => {
              const { collection, isLoading } = useCollection(collectionId)

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {collection && <span>{collection.title}</span>}
                </div>
              )
            }

            export default ProductCollection
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/collections/{id}'
      tags:
        - Product Collections
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCollectionsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/customers:
    post:
      operationId: PostCustomers
      summary: Create a Customer
      description: Register a new customer. This will also automatically authenticate the customer and set their login session in the response Cookie header. The cookie session can be used in subsequent requests to authenticate the customer. When using Medusa's JS or Medusa React clients, the cookie is automatically attached to subsequent requests.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCustomersReq'
      x-codegen:
        method: create
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.customers.create({
              first_name: "Alec",
              last_name: "Reynolds",
              email: "user@example.com",
              password: "supersecret"
            })
            .then(({ customer }) => {
              console.log(customer.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCreateCustomer } from "medusa-react"

            const RegisterCustomer = () => {
              const createCustomer = useCreateCustomer()
              // ...

              const handleCreate = (
                customerData: {
                  first_name: string
                  last_name: string
                  email: string
                  password: string
                }
              ) => {
                // ...
                createCustomer.mutate(customerData, {
                  onSuccess: ({ customer }) => {
                    console.log(customer.id)
                  }
                })
              }

              // ...
            }

            export default RegisterCustomer
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/customers' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "first_name": "Alec",
                "last_name": "Reynolds",
                "email": "user@example.com",
                "password": "supersecret"
            }'
      tags:
        - Customers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCustomersRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          description: A customer with the same email exists
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: string
                    description: The error code
                  type:
                    type: string
                    description: The type of error
                  message:
                    type: string
                    description: Human-readable message with details about the error
              example:
                code: invalid_request_error
                type: duplicate_error
                message: A customer with the given email already has an account. Log in instead
        '500':
          $ref: '#/components/responses/500_error'
  /store/customers/me:
    get:
      operationId: GetCustomersCustomer
      summary: Get a Customer
      description: Retrieve the logged-in Customer's details.
      x-authenticated: true
      x-codegen:
        method: retrieve
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged
            medusa.customers.retrieve()
            .then(({ customer }) => {
              console.log(customer.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useMeCustomer } from "medusa-react"

            const Customer = () => {
              const { customer, isLoading } = useMeCustomer()

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {customer && (
                    <span>{customer.first_name} {customer.last_name}</span>
                  )}
                </div>
              )
            }

            export default Customer
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/customers/me' \
            -H 'Authorization: Bearer {access_token}'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Customers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCustomersRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
    post:
      operationId: PostCustomersCustomer
      summary: Update Customer
      description: Update the logged-in customer's details.
      x-authenticated: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCustomersCustomerReq'
      x-codegen:
        method: update
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged
            medusa.customers.update({
              first_name: "Laury"
            })
            .then(({ customer }) => {
              console.log(customer.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useUpdateMe } from "medusa-react"

            type Props = {
              customerId: string
            }

            const Customer = ({ customerId }: Props) => {
              const updateCustomer = useUpdateMe()
              // ...

              const handleUpdate = (
                firstName: string
              ) => {
                // ...
                updateCustomer.mutate({
                  id: customerId,
                  first_name: firstName,
                }, {
                  onSuccess: ({ customer }) => {
                    console.log(customer.first_name)
                  }
                })
              }

              // ...
            }

            export default Customer
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/customers/me' \
            -H 'Authorization: Bearer {access_token}' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "first_name": "Laury"
            }'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Customers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCustomersRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/customers/me/addresses:
    post:
      operationId: PostCustomersCustomerAddresses
      summary: Add a Shipping Address
      description: Add a Shipping Address to a Customer's saved addresses.
      x-authenticated: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCustomersCustomerAddressesReq'
      x-codegen:
        method: addAddress
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged
            medusa.customers.addresses.addAddress({
              address: {
                first_name: "Celia",
                last_name: "Schumm",
                address_1: "225 Bednar Curve",
                city: "Danielville",
                country_code: "US",
                postal_code: "85137",
                phone: "981-596-6748 x90188",
                company: "Wyman LLC",
                province: "Georgia",
              }
            })
            .then(({ customer }) => {
              console.log(customer.id);
            })
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/customers/me/addresses' \
            -H 'Authorization: Bearer {access_token}' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "address": {
                  "first_name": "Celia",
                  "last_name": "Schumm",
                  "address_1": "225 Bednar Curve",
                  "city": "Danielville",
                  "country_code": "US",
                  "postal_code": "85137"
                }
            }'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Customers
      responses:
        '200':
          description: A successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCustomersRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/customers/me/addresses/{address_id}:
    post:
      operationId: PostCustomersCustomerAddressesAddress
      summary: Update a Shipping Address
      description: Update the logged-in customer's saved Shipping Address's details.
      x-authenticated: true
      parameters:
        - in: path
          name: address_id
          required: true
          description: The ID of the Address.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCustomersCustomerAddressesAddressReq'
      x-codegen:
        method: updateAddress
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged
            medusa.customers.addresses.updateAddress(addressId, {
              first_name: "Gina"
            })
            .then(({ customer }) => {
              console.log(customer.id);
            })
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/customers/me/addresses/{address_id}' \
            -H 'Authorization: Bearer {access_token}' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "first_name": "Gina"
            }'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Customers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCustomersRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
    delete:
      operationId: DeleteCustomersCustomerAddressesAddress
      summary: Delete an Address
      description: Delete an Address from the Customer's saved addresses.
      x-authenticated: true
      parameters:
        - in: path
          name: address_id
          required: true
          description: The id of the Address to remove.
          schema:
            type: string
      x-codegen:
        method: deleteAddress
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged
            medusa.customers.addresses.deleteAddress(addressId)
            .then(({ customer }) => {
              console.log(customer.id);
            })
        - lang: Shell
          label: cURL
          source: |
            curl -X DELETE '{backend_url}/store/customers/me/addresses/{address_id}' \
            -H 'Authorization: Bearer {access_token}'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Customers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCustomersRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/customers/me/orders:
    get:
      operationId: GetCustomersCustomerOrders
      summary: List Orders
      description: Retrieve a list of the logged-in Customer's Orders. The orders can be filtered by fields such as `status` or `fulfillment_status`. The orders can also be paginated.
      x-authenticated: true
      parameters:
        - in: query
          name: q
          description: term to search orders' display ID, email, shipping address's first name, customer's first name, customer's last name, and customer's phone number.
          schema:
            type: string
        - in: query
          name: id
          description: Filter by ID.
          schema:
            type: string
        - in: query
          name: status
          style: form
          explode: false
          description: Filter by status.
          schema:
            type: array
            items:
              type: string
              enum:
                - pending
                - completed
                - archived
                - canceled
                - requires_action
        - in: query
          name: fulfillment_status
          style: form
          explode: false
          description: Fulfillment status to search for.
          schema:
            type: array
            items:
              type: string
              enum:
                - not_fulfilled
                - partially_fulfilled
                - fulfilled
                - partially_shipped
                - shipped
                - partially_returned
                - returned
                - canceled
                - requires_action
        - in: query
          name: payment_status
          style: form
          explode: false
          description: Payment status to search for.
          schema:
            type: array
            items:
              type: string
              enum:
                - not_paid
                - awaiting
                - captured
                - partially_refunded
                - refunded
                - canceled
                - requires_action
        - in: query
          name: display_id
          description: Filter by display ID.
          schema:
            type: string
        - in: query
          name: cart_id
          description: Filter by cart ID.
          schema:
            type: string
        - in: query
          name: email
          description: Filter by email.
          schema:
            type: string
        - in: query
          name: region_id
          description: Filter by region ID.
          schema:
            type: string
        - in: query
          name: currency_code
          style: form
          explode: false
          description: Filter by the 3 character ISO currency code of the order.
          schema:
            type: string
            externalDocs:
              url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
              description: See a list of codes.
        - in: query
          name: tax_rate
          description: Filter by tax rate.
          schema:
            type: string
        - in: query
          name: created_at
          description: Filter by a creation date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
        - in: query
          name: updated_at
          description: Filter by an update date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
        - in: query
          name: canceled_at
          description: Filter by a cancelation date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
        - in: query
          name: limit
          description: Limit the number of orders returned.
          schema:
            type: integer
            default: 10
        - in: query
          name: offset
          description: The number of orders to skip when retrieving the orders.
          schema:
            type: integer
            default: 0
        - in: query
          name: expand
          description: Comma-separated relations that should be expanded in the returned orders.
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated fields that should be included in the returned orders.
          schema:
            type: string
      x-codegen:
        method: listOrders
        queryParams: StoreGetCustomersCustomerOrdersParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged
            medusa.customers.listOrders()
            .then(({ orders, limit, offset, count }) => {
              console.log(orders);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCustomerOrders } from "medusa-react"

            const Orders = () => {
              // refetch a function that can be used to
              // re-retrieve orders after the customer logs in
              const { orders, isLoading } = useCustomerOrders()

              return (
                <div>
                  {isLoading && <span>Loading orders...</span>}
                  {orders?.length && (
                    <ul>
                      {orders.map((order) => (
                        <li key={order.id}>{order.display_id}</li>
                      ))}
                    </ul>
                  )}
                </div>
              )
            }

            export default Orders
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/customers/me/orders' \
            -H 'Authorization: Bearer {access_token}'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Customers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCustomersListOrdersRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/customers/me/payment-methods:
    get:
      operationId: GetCustomersCustomerPaymentMethods
      summary: Get Saved Payment Methods
      description: Retrieve the logged-in customer's saved payment methods. This API Route only works with payment providers created with the deprecated Payment Service interface. The payment methods are saved using the Payment Service's third-party service, and not on the Medusa backend. So, they're retrieved from the third-party service.
      x-authenticated: true
      deprecated: true
      x-codegen:
        method: listPaymentMethods
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged
            medusa.customers.paymentMethods.list()
            .then(({ payment_methods }) => {
              console.log(payment_methods.length);
            })
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/customers/me/payment-methods' \
            -H 'Authorization: Bearer {access_token}'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Customers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCustomersListPaymentMethodsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/customers/password-reset:
    post:
      operationId: PostCustomersResetPassword
      summary: Reset Password
      description: Reset a Customer's password using a password token created by a previous request to the Request Password Reset API Route. If the password token expired, you must create a new one.
      externalDocs:
        description: How to reset password
        url: https://docs.medusajs.com/modules/customers/storefront/implement-customer-profiles#reset-password
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCustomersResetPasswordReq'
      x-codegen:
        method: resetPassword
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.customers.resetPassword({
              email: "user@example.com",
              password: "supersecret",
              token: "supersecrettoken"
            })
            .then(({ customer }) => {
              console.log(customer.id);
            })
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/customers/password-reset' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "email": "user@example.com",
                "password": "supersecret",
                "token": "supersecrettoken"
            }'
      tags:
        - Customers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCustomersResetPasswordRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/customers/password-token:
    post:
      operationId: PostCustomersCustomerPasswordToken
      summary: Request Password Reset
      description: Create a reset password token to be used in a subsequent Reset Password API Route. This emits the event `customer.password_reset`. If a notification provider is installed in the Medusa backend and is configured to handle this event, a notification to the customer, such as an email, may be sent with reset instructions.
      externalDocs:
        description: How to reset password
        url: https://docs.medusajs.com/modules/customers/storefront/implement-customer-profiles#reset-password
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCustomersCustomerPasswordTokenReq'
      x-codegen:
        method: generatePasswordToken
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.customers.generatePasswordToken({
              email: "user@example.com"
            })
            .then(() => {
              // successful
            })
            .catch(() => {
              // failed
            })
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/customers/password-token' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "email": "user@example.com"
            }'
      tags:
        - Customers
      responses:
        '204':
          description: OK
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/gift-cards/{code}:
    get:
      operationId: GetGiftCardsCode
      summary: Get Gift Card by Code
      description: Retrieve a Gift Card's details by its associated unique code.
      parameters:
        - in: path
          name: code
          required: true
          description: The unique Gift Card code.
          schema:
            type: string
      x-codegen:
        method: retrieve
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.giftCards.retrieve(code)
            .then(({ gift_card }) => {
              console.log(gift_card.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useGiftCard } from "medusa-react"

            type Props = {
              giftCardCode: string
            }

            const GiftCard = ({ giftCardCode }: Props) => {
              const { gift_card, isLoading, isError } = useGiftCard(
                giftCardCode
              )

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {gift_card && <span>{gift_card.value}</span>}
                  {isError && <span>Gift Card does not exist</span>}
                </div>
              )
            }

            export default GiftCard
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/gift-cards/{code}'
      tags:
        - Gift Cards
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreGiftCardsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/order-edits/{id}:
    get:
      operationId: GetOrderEditsOrderEdit
      summary: Retrieve an Order Edit
      description: Retrieve an Order Edit's details.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the OrderEdit.
          schema:
            type: string
      x-codegen:
        method: retrieve
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.orderEdits.retrieve(orderEditId)
            .then(({ order_edit }) => {
              console.log(order_edit.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useOrderEdit } from "medusa-react"

            type Props = {
              orderEditId: string
            }

            const OrderEdit = ({ orderEditId }: Props) => {
              const { order_edit, isLoading } = useOrderEdit(orderEditId)

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {order_edit && (
                    <ul>
                      {order_edit.changes.map((change) => (
                        <li key={change.id}>{change.type}</li>
                      ))}
                    </ul>
                  )}
                </div>
              )
            }

            export default OrderEdit
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/order-edits/{id}'
      tags:
        - Order Edits
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreOrderEditsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/order-edits/{id}/complete:
    post:
      operationId: PostOrderEditsOrderEditComplete
      summary: Complete an Order Edit
      description: Complete an Order Edit and reflect its changes on the original order. Any additional payment required must be authorized first using the Payment Collection API Routes.
      externalDocs:
        description: How to handle order edits in a storefront
        url: https://docs.medusajs.com/modules/orders/storefront/handle-order-edits
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Order Edit.
          schema:
            type: string
      x-codegen:
        method: complete
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.orderEdits.complete(orderEditId)
            .then(({ order_edit }) => {
              console.log(order_edit.id)
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCompleteOrderEdit } from "medusa-react"

            type Props = {
              orderEditId: string
            }

            const OrderEdit = ({ orderEditId }: Props) => {
              const completeOrderEdit = useCompleteOrderEdit(
                orderEditId
              )
              // ...

              const handleCompleteOrderEdit = () => {
                completeOrderEdit.mutate(void 0, {
                  onSuccess: ({ order_edit }) => {
                    console.log(order_edit.confirmed_at)
                  }
                })
              }

              // ...
            }

            export default OrderEdit
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/order-edits/{id}/complete'
      tags:
        - Order Edits
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreOrderEditsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/order-edits/{id}/decline:
    post:
      operationId: PostOrderEditsOrderEditDecline
      summary: Decline an Order Edit
      description: Decline an Order Edit. The changes are not reflected on the original order.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the OrderEdit.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostOrderEditsOrderEditDecline'
      x-codegen:
        method: decline
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.orderEdits.decline(orderEditId)
            .then(({ order_edit }) => {
              console.log(order_edit.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useDeclineOrderEdit } from "medusa-react"

            type Props = {
              orderEditId: string
            }

            const OrderEdit = ({ orderEditId }: Props) => {
              const declineOrderEdit = useDeclineOrderEdit(orderEditId)
              // ...

              const handleDeclineOrderEdit = (
                declinedReason: string
              ) => {
                declineOrderEdit.mutate({
                  declined_reason: declinedReason,
                }, {
                  onSuccess: ({ order_edit }) => {
                    console.log(order_edit.declined_at)
                  }
                })
              }

              // ...
            }

            export default OrderEdit
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/order-edits/{id}/decline'
      tags:
        - Order Edits
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreOrderEditsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/orders:
    get:
      operationId: GetOrders
      summary: Look Up an Order
      description: Look up an order using filters. If the filters don't narrow down the results to a single order, a 404 response is returned with no orders.
      parameters:
        - in: query
          name: display_id
          required: true
          description: Filter by ID.
          schema:
            type: number
        - in: query
          name: fields
          description: Comma-separated fields that should be expanded in the returned order.
          schema:
            type: string
        - in: query
          name: expand
          description: Comma-separated relations that should be expanded in the returned order.
          schema:
            type: string
        - in: query
          name: email
          style: form
          explode: false
          description: Filter by email.
          required: true
          schema:
            type: string
            format: email
        - in: query
          name: shipping_address
          style: form
          explode: false
          description: Filter by the shipping address's postal code.
          schema:
            type: object
            properties:
              postal_code:
                type: string
                description: The postal code of the shipping address
      x-codegen:
        method: lookupOrder
        queryParams: StoreGetOrdersParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.orders.lookupOrder({
              display_id: 1,
              email: "user@example.com"
            })
            .then(({ order }) => {
              console.log(order.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useOrders } from "medusa-react"

            type Props = {
              displayId: number
              email: string
            }

            const Order = ({
              displayId,
              email
            }: Props) => {
              const {
                order,
                isLoading,
              } = useOrders({
                display_id: displayId,
                email,
              })

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {order && <span>{order.display_id}</span>}

                </div>
              )
            }

            export default Order
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/orders?display_id=1&email=user@example.com'
      tags:
        - Orders
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreOrdersRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/orders/batch/customer/token:
    post:
      operationId: PostOrdersCustomerOrderClaim
      summary: Claim Order
      description: Allow the logged-in customer to claim ownership of one or more orders. This generates a token that can be used later on to verify the claim using the Verify Order Claim API Route. This also emits the event `order-update-token.created`. So, if you have a notification provider installed that handles this event and sends the customer a notification, such as an email, the customer should receive instructions on how to finalize their claim ownership.
      externalDocs:
        description: How to implement claim-order flow in a storefront
        url: https://docs.medusajs.com/modules/orders/storefront/implement-claim-order
      x-authenticated: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCustomersCustomerOrderClaimReq'
      x-codegen:
        method: requestCustomerOrders
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token
            medusa.orders.requestCustomerOrders({
              order_ids,
            })
            .then(() => {
              // successful
            })
            .catch(() => {
              // an error occurred
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useRequestOrderAccess } from "medusa-react"

            const ClaimOrder = () => {
              const claimOrder = useRequestOrderAccess()

              const handleClaimOrder = (
                orderIds: string[]
              ) => {
                claimOrder.mutate({
                  order_ids: orderIds
                }, {
                  onSuccess: () => {
                    // successful
                  },
                  onError: () => {
                    // an error occurred.
                  }
                })
              }

              // ...
            }

            export default ClaimOrder
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/batch/customer/token' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "order_ids": ["id"],
            }'
      security:
        - api_token: []
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Orders
      responses:
        '200':
          description: OK
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/orders/cart/{cart_id}:
    get:
      operationId: GetOrdersOrderCartId
      summary: Get by Cart ID
      description: Retrieve an Order's details by the ID of the Cart that was used to create the Order.
      parameters:
        - in: path
          name: cart_id
          required: true
          description: The ID of Cart.
          schema:
            type: string
      x-codegen:
        method: retrieveByCartId
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.orders.retrieveByCartId(cartId)
            .then(({ order }) => {
              console.log(order.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCartOrder } from "medusa-react"

            type Props = {
              cartId: string
            }

            const Order = ({ cartId }: Props) => {
              const {
                order,
                isLoading,
              } = useCartOrder(cartId)

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {order && <span>{order.display_id}</span>}

                </div>
              )
            }

            export default Order
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/orders/cart/{cart_id}'
      tags:
        - Orders
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreOrdersRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/orders/customer/confirm:
    post:
      operationId: PostOrdersCustomerOrderClaimsCustomerOrderClaimAccept
      summary: Verify Order Claim
      description: Verify the claim order token provided to the customer when they request ownership of an order.
      externalDocs:
        description: How to implement claim-order flow in a storefront
        url: https://docs.medusajs.com/modules/orders/storefront/implement-claim-order
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostCustomersCustomerAcceptClaimReq'
      x-codegen:
        method: confirmRequest
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token
            medusa.orders.confirmRequest(
              token,
            )
            .then(() => {
              // successful
            })
            .catch(() => {
              // an error occurred
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useGrantOrderAccess } from "medusa-react"

            const ClaimOrder = () => {
              const confirmOrderRequest = useGrantOrderAccess()

              const handleOrderRequestConfirmation = (
                token: string
              ) => {
                confirmOrderRequest.mutate({
                  token
                }, {
                  onSuccess: () => {
                    // successful
                  },
                  onError: () => {
                    // an error occurred.
                  }
                })
              }

              // ...
            }

            export default ClaimOrder
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/orders/customer/confirm' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "token": "{token}",
            }'
      security:
        - api_token: []
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Orders
      responses:
        '200':
          description: OK
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/orders/{id}:
    get:
      operationId: GetOrdersOrder
      summary: Get an Order
      description: Retrieve an Order's details.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Order.
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated fields that should be expanded in the returned order.
          schema:
            type: string
        - in: query
          name: expand
          description: Comma-separated relations that should be included in the returned order.
          schema:
            type: string
      x-codegen:
        method: retrieve
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.orders.retrieve(orderId)
            .then(({ order }) => {
              console.log(order.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useOrder } from "medusa-react"

            type Props = {
              orderId: string
            }

            const Order = ({ orderId }: Props) => {
              const {
                order,
                isLoading,
              } = useOrder(orderId)

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {order && <span>{order.display_id}</span>}

                </div>
              )
            }

            export default Order
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/orders/{id}'
      tags:
        - Orders
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreOrdersRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/payment-collections/{id}:
    get:
      operationId: GetPaymentCollectionsPaymentCollection
      summary: Get a PaymentCollection
      description: Retrieve a Payment Collection's details.
      x-authenticated: false
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the PaymentCollection.
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated fields that should be expanded in the returned payment collection.
          schema:
            type: string
        - in: query
          name: expand
          description: Comma-separated relations that should be expanded in the returned payment collection.
          schema:
            type: string
      x-codegen:
        method: retrieve
        queryParams: StoreGetPaymentCollectionsParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token
            medusa.paymentCollections.retrieve(paymentCollectionId)
            .then(({ payment_collection }) => {
              console.log(payment_collection.id)
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { usePaymentCollection } from "medusa-react"

            type Props = {
              paymentCollectionId: string
            }

            const PaymentCollection = ({
              paymentCollectionId
            }: Props) => {
              const {
                payment_collection,
                isLoading
              } = usePaymentCollection(
                paymentCollectionId
              )

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {payment_collection && (
                    <span>{payment_collection.status}</span>
                  )}
                </div>
              )
            }

            export default PaymentCollection
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/payment-collections/{id}'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Payment Collections
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorePaymentCollectionsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/payment-collections/{id}/sessions:
    post:
      operationId: PostPaymentCollectionsSessions
      summary: Create a Payment Session
      description: Create a Payment Session for a payment provider in a Payment Collection.
      x-authenticated: false
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Payment Collection.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePaymentCollectionSessionsReq'
      x-codegen:
        method: managePaymentSession
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token
            medusa.paymentCollections.managePaymentSession(payment_id, { provider_id: "stripe" })
            .then(({ payment_collection }) => {
              console.log(payment_collection.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useManagePaymentSession } from "medusa-react"

            type Props = {
              paymentCollectionId: string
            }

            const PaymentCollection = ({
              paymentCollectionId
            }: Props) => {
              const managePaymentSession = useManagePaymentSession(
                paymentCollectionId
              )

              const handleManagePaymentSession = (
                providerId: string
              ) => {
                managePaymentSession.mutate({
                  provider_id: providerId
                }, {
                  onSuccess: ({ payment_collection }) => {
                    console.log(payment_collection.payment_sessions)
                  }
                })
              }

              // ...
            }

            export default PaymentCollection
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/payment-collections/{id}/sessions' \
            -H 'Content-Type: application/json' \
            --data-raw '{
              "provider_id": "stripe"
            }'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Payment Collections
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorePaymentCollectionsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/payment-collections/{id}/sessions/batch:
    post:
      operationId: PostPaymentCollectionsPaymentCollectionSessionsBatch
      summary: Manage Payment Sessions
      description: Create, update, or delete a list of payment sessions of a Payment Collections. If a payment session is not provided in the `sessions` array, it's deleted.
      x-authenticated: false
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Payment Collection.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostPaymentCollectionsBatchSessionsReq'
      x-codegen:
        method: managePaymentSessionsBatch
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token

            // Total amount = 10000

            // Example 1: Adding two new sessions
            medusa.paymentCollections.managePaymentSessionsBatch(paymentId, {
              sessions: [
                {
                  provider_id: "stripe",
                  amount: 5000,
                },
                {
                  provider_id: "manual",
                  amount: 5000,
                },
              ]
            })
            .then(({ payment_collection }) => {
              console.log(payment_collection.id);
            })

            // Example 2: Updating one session and removing the other
            medusa.paymentCollections.managePaymentSessionsBatch(paymentId, {
              sessions: [
                {
                  provider_id: "stripe",
                  amount: 10000,
                  session_id: "ps_123456"
                },
              ]
            })
            .then(({ payment_collection }) => {
              console.log(payment_collection.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useManageMultiplePaymentSessions } from "medusa-react"

            type Props = {
              paymentCollectionId: string
            }

            const PaymentCollection = ({
              paymentCollectionId
            }: Props) => {
              const managePaymentSessions = useManageMultiplePaymentSessions(
                paymentCollectionId
              )

              const handleManagePaymentSessions = () => {
                // Total amount = 10000

                // Example 1: Adding two new sessions
                managePaymentSessions.mutate({
                  sessions: [
                    {
                      provider_id: "stripe",
                      amount: 5000,
                    },
                    {
                      provider_id: "manual",
                      amount: 5000,
                    },
                  ]
                }, {
                  onSuccess: ({ payment_collection }) => {
                    console.log(payment_collection.payment_sessions)
                  }
                })

                // Example 2: Updating one session and removing the other
                managePaymentSessions.mutate({
                  sessions: [
                    {
                      provider_id: "stripe",
                      amount: 10000,
                      session_id: "ps_123456"
                    },
                  ]
                }, {
                  onSuccess: ({ payment_collection }) => {
                    console.log(payment_collection.payment_sessions)
                  }
                })
              }

              // ...
            }

            export default PaymentCollection
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/payment-collections/{id}/sessions/batch' \
            -H 'Content-Type: application/json' \
            --data-raw '{
              "sessions": [
                {
                  "provider_id": "stripe",
                  "amount": 5000
                },
                {
                  "provider_id": "manual",
                  "amount": 5000
                }
              ]
            }'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Payment Collections
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorePaymentCollectionsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/payment-collections/{id}/sessions/batch/authorize:
    post:
      operationId: PostPaymentCollectionsSessionsBatchAuthorize
      summary: Authorize Payment Sessions
      description: Authorize the Payment Sessions of a Payment Collection.
      x-authenticated: false
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Payment Collections.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostPaymentCollectionsBatchSessionsAuthorizeReq'
      x-codegen:
        method: authorizePaymentSessionsBatch
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token
            medusa.paymentCollections.authorize(paymentId)
            .then(({ payment_collection }) => {
              console.log(payment_collection.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useAuthorizePaymentSessionsBatch } from "medusa-react"

            type Props = {
              paymentCollectionId: string
            }

            const PaymentCollection = ({
              paymentCollectionId
            }: Props) => {
              const authorizePaymentSessions = useAuthorizePaymentSessionsBatch(
                paymentCollectionId
              )
              // ...

              const handleAuthorizePayments = (paymentSessionIds: string[]) => {
                authorizePaymentSessions.mutate({
                  session_ids: paymentSessionIds
                }, {
                  onSuccess: ({ payment_collection }) => {
                    console.log(payment_collection.payment_sessions)
                  }
                })
              }

              // ...
            }

            export default PaymentCollection
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/payment-collections/{id}/sessions/batch/authorize'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Payment Collections
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorePaymentCollectionsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/payment-collections/{id}/sessions/{session_id}:
    post:
      operationId: PostPaymentCollectionsPaymentCollectionPaymentSessionsSession
      summary: Refresh a Payment Session
      description: Refresh a Payment Session's data to ensure that it is in sync with the Payment Collection.
      x-authenticated: false
      parameters:
        - in: path
          name: id
          required: true
          description: The id of the PaymentCollection.
          schema:
            type: string
        - in: path
          name: session_id
          required: true
          description: The id of the Payment Session to be refreshed.
          schema:
            type: string
      x-codegen:
        method: refreshPaymentSession
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.paymentCollections.refreshPaymentSession(paymentCollectionId, sessionId)
            .then(({ payment_session }) => {
              console.log(payment_session.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { usePaymentCollectionRefreshPaymentSession } from "medusa-react"

            type Props = {
              paymentCollectionId: string
            }

            const PaymentCollection = ({
              paymentCollectionId
            }: Props) => {
              const refreshPaymentSession = usePaymentCollectionRefreshPaymentSession(
                paymentCollectionId
              )
              // ...

              const handleRefreshPaymentSession = (paymentSessionId: string) => {
                refreshPaymentSession.mutate(paymentSessionId, {
                  onSuccess: ({ payment_session }) => {
                    console.log(payment_session.status)
                  }
                })
              }

              // ...
            }

            export default PaymentCollection
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/payment-collections/{id}/sessions/{session_id}'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Payment Collections
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorePaymentCollectionsSessionRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/payment-collections/{id}/sessions/{session_id}/authorize:
    post:
      operationId: PostPaymentCollectionsSessionsSessionAuthorize
      summary: Authorize Payment Session
      description: Authorize a Payment Session of a Payment Collection.
      x-authenticated: false
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Payment Collection.
          schema:
            type: string
        - in: path
          name: session_id
          required: true
          description: The ID of the Payment Session.
          schema:
            type: string
      x-codegen:
        method: authorizePaymentSession
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token
            medusa.paymentCollections.authorize(paymentId, sessionId)
            .then(({ payment_collection }) => {
              console.log(payment_collection.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useAuthorizePaymentSession } from "medusa-react"

            type Props = {
              paymentCollectionId: string
            }

            const PaymentCollection = ({
              paymentCollectionId
            }: Props) => {
              const authorizePaymentSession = useAuthorizePaymentSession(
                paymentCollectionId
              )
              // ...

              const handleAuthorizePayment = (paymentSessionId: string) => {
                authorizePaymentSession.mutate(paymentSessionId, {
                  onSuccess: ({ payment_collection }) => {
                    console.log(payment_collection.payment_sessions)
                  }
                })
              }

              // ...
            }

            export default PaymentCollection
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/payment-collections/{id}/sessions/{session_id}/authorize'
      security:
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Payment Collections
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorePaymentCollectionsSessionRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/product-categories:
    get:
      operationId: GetProductCategories
      summary: List Product Categories
      description: Retrieve a list of product categories. The product categories can be filtered by fields such as `handle` or `q`. The product categories can also be paginated. This API Route can also be used to retrieve a product category by its handle.
      x-featureFlag: product_categories
      externalDocs:
        description: How to retrieve a product category by its handle
        url: https://docs.medusajs.com/modules/products/storefront/use-categories#get-a-category-by-its-handle
      parameters:
        - in: query
          name: q
          description: term used to search product category's names and handles.
          schema:
            type: string
        - in: query
          name: handle
          description: Filter by handle.
          schema:
            type: string
        - in: query
          name: parent_category_id
          description: Filter by the ID of a parent category. Only children of the provided parent category are retrieved.
          schema:
            type: string
        - in: query
          name: include_descendants_tree
          description: Whether all nested categories inside a category should be retrieved.
          schema:
            type: boolean
        - in: query
          name: offset
          description: The number of product categories to skip when retrieving the product categories.
          schema:
            type: integer
            default: 0
        - in: query
          name: limit
          description: Limit the number of product categories returned.
          schema:
            type: integer
            default: 100
        - in: query
          name: expand
          description: Comma-separated relations that should be expanded in the returned product categories.
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated fields that should be included in the returned product categories.
          schema:
            type: string
      x-codegen:
        method: list
        queryParams: StoreGetProductCategoriesParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.productCategories.list()
            .then(({ product_categories, limit, offset, count }) => {
              console.log(product_categories.length);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useProductCategories } from "medusa-react"

            function Categories() {
              const {
                product_categories,
                isLoading,
              } = useProductCategories()

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {product_categories && !product_categories.length && (
                    <span>No Categories</span>
                  )}
                  {product_categories && product_categories.length > 0 && (
                    <ul>
                      {product_categories.map(
                        (category) => (
                          <li key={category.id}>{category.name}</li>
                        )
                      )}
                    </ul>
                  )}
                </div>
              )
            }

            export default Categories
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/product-categories' \
            -H 'x-medusa-access-token: {api_token}'
      security:
        - api_token: []
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Product Categories
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreGetProductCategoriesRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/product-categories/{id}:
    get:
      operationId: GetProductCategoriesCategory
      summary: Get a Product Category
      description: Retrieve a Product Category's details.
      x-featureFlag: product_categories
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Product Category
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated fields that should be expanded in the returned product category.
          schema:
            type: string
        - in: query
          name: expand
          description: Comma-separated relations that should be expanded in the returned product category.
          schema:
            type: string
      x-codegen:
        method: retrieve
        queryParams: StoreGetProductCategoriesCategoryParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token
            medusa.productCategories.retrieve(productCategoryId)
            .then(({ product_category }) => {
              console.log(product_category.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useProductCategory } from "medusa-react"

            type Props = {
              categoryId: string
            }

            const Category = ({ categoryId }: Props) => {
              const { product_category, isLoading } = useProductCategory(
                categoryId
              )

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {product_category && <span>{product_category.name}</span>}
                </div>
              )
            }

            export default Category
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/product-categories/{id}' \
            -H 'x-medusa-access-token: {api_token}'
      security:
        - api_token: []
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Product Categories
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreGetProductCategoriesCategoryRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/product-tags:
    get:
      operationId: GetProductTags
      summary: List Product Tags
      description: Retrieve a list of product tags. The product tags can be filtered by fields such as `id` or `q`. The product tags can also be sorted or paginated.
      x-authenticated: true
      x-codegen:
        method: list
        queryParams: StoreGetProductTagsParams
      parameters:
        - in: query
          name: limit
          description: Limit the number of product tags returned.
          schema:
            type: integer
            default: 20
        - in: query
          name: offset
          description: The number of product tags to skip when retrieving the product tags.
          schema:
            type: integer
            default: 0
        - in: query
          name: order
          description: A product-tag field to sort-order the retrieved product tags by.
          schema:
            type: string
        - in: query
          name: discount_condition_id
          description: Filter by the ID of a discount condition. When provided, only tags that the discount condition applies for will be retrieved.
          schema:
            type: string
        - in: query
          name: value
          style: form
          explode: false
          description: Filter by tag values.
          schema:
            type: array
            items:
              type: string
        - in: query
          name: id
          style: form
          explode: false
          description: Filter by IDs.
          schema:
            type: array
            items:
              type: string
        - in: query
          name: q
          description: term to search product tag's value.
          schema:
            type: string
        - in: query
          name: created_at
          description: Filter by a creation date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
        - in: query
          name: updated_at
          description: Filter by an update date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.productTags.list()
            .then(({ product_tags }) => {
              console.log(product_tags.length);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useProductTags } from "medusa-react"

            function Tags() {
              const {
                product_tags,
                isLoading,
              } = useProductTags()

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {product_tags && !product_tags.length && (
                    <span>No Product Tags</span>
                  )}
                  {product_tags && product_tags.length > 0 && (
                    <ul>
                      {product_tags.map(
                        (tag) => (
                          <li key={tag.id}>{tag.value}</li>
                        )
                      )}
                    </ul>
                  )}
                </div>
              )
            }

            export default Tags
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/product-tags'
      tags:
        - Product Tags
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreProductTagsListRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/product-types:
    get:
      operationId: GetProductTypes
      summary: List Product Types
      description: Retrieve a list of product types. The product types can be filtered by fields such as `value` or `q`. The product types can also be sorted or paginated.
      x-authenticated: true
      parameters:
        - in: query
          name: limit
          description: Limit the number of product types returned.
          schema:
            type: integer
            default: 20
        - in: query
          name: offset
          description: The number of product types to skip when retrieving the product types.
          schema:
            type: integer
            default: 0
        - in: query
          name: order
          description: A product-type field to sort-order the retrieved product types by.
          schema:
            type: string
        - in: query
          name: discount_condition_id
          description: Filter by the ID of a discount condition. When provided, only types that the discount condition applies for will be retrieved.
          schema:
            type: string
        - in: query
          name: value
          style: form
          explode: false
          description: Filter by type values.
          schema:
            type: array
            items:
              type: string
        - in: query
          name: id
          style: form
          explode: false
          description: Filter by IDs.
          schema:
            type: array
            items:
              type: string
        - in: query
          name: q
          description: term to search product type's value.
          schema:
            type: string
        - in: query
          name: created_at
          description: Filter by a creation date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
        - in: query
          name: updated_at
          description: Filter by an update date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
      x-codegen:
        method: list
        queryParams: StoreGetProductTypesParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token
            medusa.productTypes.list()
            .then(({ product_types }) => {
              console.log(product_types.length);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useProductTypes } from "medusa-react"

            function Types() {
              const {
                product_types,
                isLoading,
              } = useProductTypes()

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {product_types && !product_types.length && (
                    <span>No Product Types</span>
                  )}
                  {product_types && product_types.length > 0 && (
                    <ul>
                      {product_types.map(
                        (type) => (
                          <li key={type.id}>{type.value}</li>
                        )
                      )}
                    </ul>
                  )}
                </div>
              )
            }

            export default Types
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/product-types'
      security:
        - api_token: []
        - cookie_auth: []
        - jwt_token: []
      tags:
        - Product Types
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreProductTypesListRes'
        '400':
          $ref: '#/components/responses/400_error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/products:
    get:
      operationId: GetProducts
      summary: List Products
      description: |
        Retrieves a list of products. The products can be filtered by fields such as `id` or `q`. The products can also be sorted or paginated.
        This API Route can also be used to retrieve a product by its handle.

        For accurate and correct pricing of the products based on the customer's context, it's highly recommended to pass fields such as
        `region_id`, `currency_code`, and `cart_id` when available.

        Passing `sales_channel_id` ensures retrieving only products available in the specified sales channel.
        You can alternatively use a publishable API key in the request header instead of passing a `sales_channel_id`.
      externalDocs:
        description: How to retrieve a product by its handle
        url: https://docs.medusajs.com/modules/products/storefront/show-products#retrieve-product-by-handle
      parameters:
        - in: query
          name: q
          description: term used to search products' title, description, variant's title, variant's sku, and collection's title.
          schema:
            type: string
        - in: query
          name: id
          style: form
          explode: false
          description: Filter by IDs.
          schema:
            oneOf:
              - type: string
              - type: array
                items:
                  type: string
        - in: query
          name: sales_channel_id
          style: form
          explode: false
          description: Filter by sales channel IDs. When provided, only products available in the selected sales channels are retrieved. Alternatively, you can pass a publishable API key in the request header and this will have the same effect.
          schema:
            type: array
            items:
              type: string
        - in: query
          name: collection_id
          style: form
          explode: false
          description: Filter by product collection IDs. When provided, only products that belong to the specified product collections are retrieved.
          schema:
            type: array
            items:
              type: string
        - in: query
          name: type_id
          style: form
          explode: false
          description: Filter by product type IDs. When provided, only products that belong to the specified product types are retrieved.
          schema:
            type: array
            items:
              type: string
        - in: query
          name: tags
          style: form
          explode: false
          description: Filter by product tag IDs. When provided, only products that belong to the specified product tags are retrieved.
          schema:
            type: array
            items:
              type: string
        - in: query
          name: title
          description: Filter by title.
          schema:
            type: string
        - in: query
          name: description
          description: Filter by description
          schema:
            type: string
        - in: query
          name: handle
          description: Filter by handle.
          schema:
            type: string
        - in: query
          name: is_giftcard
          description: Whether to retrieve regular products or gift-card products.
          schema:
            type: boolean
        - in: query
          name: created_at
          description: Filter by a creation date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
        - in: query
          name: updated_at
          description: Filter by an update date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
        - in: query
          name: category_id
          style: form
          explode: false
          description: Filter by product category IDs. When provided, only products that belong to the specified product categories are retrieved.
          schema:
            type: array
            x-featureFlag: product_categories
            items:
              type: string
        - in: query
          name: include_category_children
          style: form
          explode: false
          description: Whether to include child product categories when filtering using the `category_id` field.
          schema:
            type: boolean
            x-featureFlag: product_categories
        - in: query
          name: offset
          description: The number of products to skip when retrieving the products.
          schema:
            type: integer
            default: 0
        - in: query
          name: limit
          description: Limit the number of products returned.
          schema:
            type: integer
            default: 100
        - in: query
          name: expand
          description: Comma-separated relations that should be expanded in the returned products.
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated fields that should be included in the returned products.
          schema:
            type: string
        - in: query
          name: order
          description: A product field to sort-order the retrieved products by.
          schema:
            type: string
        - in: query
          name: cart_id
          description: The ID of the cart. This is useful for accurate pricing based on the cart's context.
          schema:
            type: string
        - in: query
          name: region_id
          description: The ID of the region. This is useful for accurate pricing based on the selected region.
          schema:
            type: string
        - in: query
          name: currency_code
          style: form
          explode: false
          description: A 3 character ISO currency code. This is useful for accurate pricing based on the selected currency.
          schema:
            type: string
            externalDocs:
              url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
              description: See a list of codes.
      x-codegen:
        method: list
        queryParams: StoreGetProductsParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.products.list()
            .then(({ products, limit, offset, count }) => {
              console.log(products.length);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useProducts } from "medusa-react"

            const Products = () => {
              const { products, isLoading } = useProducts()

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {products && !products.length && <span>No Products</span>}
                  {products && products.length > 0 && (
                    <ul>
                      {products.map((product) => (
                        <li key={product.id}>{product.title}</li>
                      ))}
                    </ul>
                  )}
                </div>
              )
            }

            export default Products
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/products'
      tags:
        - Products
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreProductsListRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/products/search:
    post:
      operationId: PostProductsSearch
      summary: Search Products
      description: Run a search query on products using the search service installed on the Medusa backend. The searching is handled through the search service, so the returned data's format depends on the search service you're using.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostSearchReq'
      x-codegen:
        method: search
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.products.search({
              q: "Shirt"
            })
            .then(({ hits }) => {
              console.log(hits.length);
            })
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/products/search' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "q": "Shirt"
            }'
      tags:
        - Products
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorePostSearchRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/products/{id}:
    get:
      operationId: GetProductsProduct
      summary: Get a Product
      description: |
        Retrieve a Product's details. For accurate and correct pricing of the product based on the customer's context, it's highly recommended to pass fields such as
        `region_id`, `currency_code`, and `cart_id` when available.

        Passing `sales_channel_id` ensures retrieving only products available in the current sales channel.
        You can alternatively use a publishable API key in the request header instead of passing a `sales_channel_id`.
      externalDocs:
        description: How to pass product pricing parameters
        url: https://docs.medusajs.com/modules/products/storefront/show-products#product-pricing-parameters
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Product.
          schema:
            type: string
        - in: query
          name: sales_channel_id
          description: The ID of the sales channel the customer is viewing the product from.
          schema:
            type: string
        - in: query
          name: cart_id
          description: The ID of the cart. This is useful for accurate pricing based on the cart's context.
          schema:
            type: string
        - in: query
          name: region_id
          description: The ID of the region. This is useful for accurate pricing based on the selected region.
          schema:
            type: string
        - in: query
          name: expand
          description: Comma-separated relations that should be expanded in the returned product.
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated fields that should be included in the returned product.
          schema:
            type: string
        - in: query
          name: currency_code
          style: form
          explode: false
          description: A 3 character ISO currency code. This is useful for accurate pricing based on the selected currency.
          schema:
            type: string
            externalDocs:
              url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
              description: See a list of codes.
      x-codegen:
        method: retrieve
        queryParams: StoreGetProductsProductParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.products.retrieve(productId)
            .then(({ product }) => {
              console.log(product.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useProduct } from "medusa-react"

            type Props = {
              productId: string
            }

            const Product = ({ productId }: Props) => {
              const { product, isLoading } = useProduct(productId)

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {product && <span>{product.title}</span>}
                </div>
              )
            }

            export default Product
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/products/{id}'
      tags:
        - Products
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreProductsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/regions:
    get:
      operationId: GetRegions
      summary: List Regions
      description: Retrieve a list of regions. The regions can be filtered by fields such as `created_at`. The regions can also be paginated. This API Route is useful to show the customer all available regions to choose from.
      externalDocs:
        description: How to use regions in a storefront
        url: https://docs.medusajs.com/modules/regions-and-currencies/storefront/use-regions
      parameters:
        - in: query
          name: offset
          description: The number of regions to skip when retrieving the regions.
          schema:
            type: integer
            default: 0
        - in: query
          name: limit
          description: Limit the number of regions returned.
          schema:
            type: integer
            default: 100
        - in: query
          name: created_at
          description: Filter by a creation date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
        - in: query
          name: updated_at
          description: Filter by an update date range.
          schema:
            type: object
            properties:
              lt:
                type: string
                description: filter by dates less than this date
                format: date
              gt:
                type: string
                description: filter by dates greater than this date
                format: date
              lte:
                type: string
                description: filter by dates less than or equal to this date
                format: date
              gte:
                type: string
                description: filter by dates greater than or equal to this date
                format: date
      x-codegen:
        method: list
        queryParams: StoreGetRegionsParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.regions.list()
            .then(({ regions, count, limit, offset }) => {
              console.log(regions.length);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useRegions } from "medusa-react"

            const Regions = () => {
              const { regions, isLoading } = useRegions()

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {regions?.length && (
                    <ul>
                      {regions.map((region) => (
                        <li key={region.id}>
                          {region.name}
                        </li>
                      ))}
                    </ul>
                  )}
                </div>
              )
            }

            export default Regions
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/regions'
      tags:
        - Regions
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreRegionsListRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/regions/{id}:
    get:
      operationId: GetRegionsRegion
      summary: Get a Region
      description: Retrieve a Region's details.
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Region.
          schema:
            type: string
      x-codegen:
        method: retrieve
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.regions.retrieve(regionId)
            .then(({ region }) => {
              console.log(region.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useRegion } from "medusa-react"

            type Props = {
              regionId: string
            }

            const Region = ({ regionId }: Props) => {
              const { region, isLoading } = useRegion(
                regionId
              )

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {region && <span>{region.name}</span>}
                </div>
              )
            }

            export default Region
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/regions/{id}'
      tags:
        - Regions
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreRegionsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/return-reasons:
    get:
      operationId: GetReturnReasons
      summary: List Return Reasons
      description: Retrieve a list of Return Reasons. This is useful when implementing a Create Return flow in the storefront.
      x-codegen:
        method: list
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.returnReasons.list()
            .then(({ return_reasons }) => {
              console.log(return_reasons.length);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useReturnReasons } from "medusa-react"

            const ReturnReasons = () => {
              const {
                return_reasons,
                isLoading
              } = useReturnReasons()

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {return_reasons?.length && (
                    <ul>
                      {return_reasons.map((returnReason) => (
                        <li key={returnReason.id}>
                          {returnReason.label}
                        </li>
                      ))}
                    </ul>
                  )}
                </div>
              )
            }

            export default ReturnReasons
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/return-reasons'
      tags:
        - Return Reasons
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreReturnReasonsListRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/return-reasons/{id}:
    get:
      operationId: GetReturnReasonsReason
      summary: Get a Return Reason
      description: Retrieve a Return Reason's details.
      parameters:
        - in: path
          name: id
          required: true
          description: The id of the Return Reason.
          schema:
            type: string
      x-codegen:
        method: retrieve
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.returnReasons.retrieve(reasonId)
            .then(({ return_reason }) => {
              console.log(return_reason.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useReturnReason } from "medusa-react"

            type Props = {
              returnReasonId: string
            }

            const ReturnReason = ({ returnReasonId }: Props) => {
              const {
                return_reason,
                isLoading
              } = useReturnReason(
                returnReasonId
              )

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {return_reason && <span>{return_reason.label}</span>}
                </div>
              )
            }

            export default ReturnReason
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/return-reasons/{id}'
      tags:
        - Return Reasons
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreReturnReasonsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/returns:
    post:
      operationId: PostReturns
      summary: Create Return
      description: Create a Return for an Order. If a return shipping method is specified, the return is automatically fulfilled.
      externalDocs:
        description: How to create a return in a storefront
        url: https://docs.medusajs.com/modules/orders/storefront/create-return
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostReturnsReq'
      x-codegen:
        method: create
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.returns.create({
              order_id,
              items: [
                {
                  item_id,
                  quantity: 1
                }
              ]
            })
            .then((data) => {
              console.log(data.return.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCreateReturn } from "medusa-react"

            type CreateReturnData = {
              items: {
                item_id: string,
                quantity: number
              }[]
              return_shipping: {
                option_id: string
              }
            }

            type Props = {
              orderId: string
            }

            const CreateReturn = ({ orderId }: Props) => {
              const createReturn = useCreateReturn()
              // ...

              const handleCreate = (data: CreateReturnData) => {
                createReturn.mutate({
                  ...data,
                  order_id: orderId
                }, {
                  onSuccess: ({ return: returnData }) => {
                    console.log(returnData.id)
                  }
                })
              }

              // ...
            }

            export default CreateReturn
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/returns' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "order_id": "asfasf",
                "items": [
                  {
                    "item_id": "assfasf",
                    "quantity": 1
                  }
                ]
            }'
      tags:
        - Returns
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreReturnsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/shipping-options:
    get:
      operationId: GetShippingOptions
      summary: Get Shipping Options
      description: Retrieve a list of Shipping Options.
      parameters:
        - in: query
          name: is_return
          description: Whether return shipping options should be included. By default, all shipping options are returned.
          schema:
            type: boolean
        - in: query
          name: product_ids
          description: '"Comma-separated list of Product IDs to filter Shipping Options by. If provided, only shipping options that can be used with the provided products are retrieved."'
          schema:
            type: string
        - in: query
          name: region_id
          description: '"The ID of the region that the shipping options belong to. If not provided, all shipping options are retrieved."'
          schema:
            type: string
      x-codegen:
        method: list
        queryParams: StoreGetShippingOptionsParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.shippingOptions.list()
            .then(({ shipping_options }) => {
              console.log(shipping_options.length);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useShippingOptions } from "medusa-react"

            const ShippingOptions = () => {
              const {
                shipping_options,
                isLoading,
              } = useShippingOptions()

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {shipping_options?.length &&
                    shipping_options?.length > 0 && (
                    <ul>
                      {shipping_options?.map((shipping_option) => (
                        <li key={shipping_option.id}>
                          {shipping_option.id}
                        </li>
                      ))}
                    </ul>
                  )}
                </div>
              )
            }

            export default ShippingOptions
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/shipping-options'
      tags:
        - Shipping Options
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreShippingOptionsListRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/shipping-options/{cart_id}:
    get:
      operationId: GetShippingOptionsCartId
      summary: List for Cart
      description: Retrieve a list of Shipping Options available for a cart.
      externalDocs:
        description: How to implement shipping step in checkout
        url: https://docs.medusajs.com/modules/carts-and-checkout/storefront/implement-checkout-flow#shipping-step
      parameters:
        - in: path
          name: cart_id
          required: true
          description: The ID of the Cart.
          schema:
            type: string
      x-codegen:
        method: listCartOptions
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.shippingOptions.listCartOptions(cartId)
            .then(({ shipping_options }) => {
              console.log(shipping_options.length);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCartShippingOptions } from "medusa-react"

            type Props = {
              cartId: string
            }

            const ShippingOptions = ({ cartId }: Props) => {
              const { shipping_options, isLoading } =
                useCartShippingOptions(cartId)

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {shipping_options && !shipping_options.length && (
                    <span>No shipping options</span>
                  )}
                  {shipping_options && (
                    <ul>
                      {shipping_options.map(
                        (shipping_option) => (
                          <li key={shipping_option.id}>
                            {shipping_option.name}
                          </li>
                        )
                      )}
                    </ul>
                  )}
                </div>
              )
            }

            export default ShippingOptions
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/shipping-options/{cart_id}'
      tags:
        - Shipping Options
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreCartShippingOptionsListRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/swaps:
    post:
      operationId: PostSwaps
      summary: Create a Swap
      description: |
        Create a Swap for an Order. This will also create a return and associate it with the swap. If a return shipping option is specified, the return will automatically be fulfilled.
        To complete the swap, you must use the Complete Cart API Route passing it the ID of the swap's cart.

        An idempotency key will be generated if none is provided in the header `Idempotency-Key` and added to
        the response. If an error occurs during swap creation or the request is interrupted for any reason, the swap creation can be retried by passing the idempotency
        key in the `Idempotency-Key` header.
      externalDocs:
        description: How to create a swap
        url: https://docs.medusajs.com/modules/orders/storefront/create-swap
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorePostSwapsReq'
      x-codegen:
        method: create
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.swaps.create({
              order_id,
              return_items: [
                {
                  item_id,
                  quantity: 1
                }
              ],
              additional_items: [
                {
                  variant_id,
                  quantity: 1
                }
              ]
            })
            .then(({ swap }) => {
              console.log(swap.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCreateSwap } from "medusa-react"

            type Props = {
              orderId: string
            }

            type CreateData = {
              return_items: {
                item_id: string
                quantity: number
              }[]
              additional_items: {
                variant_id: string
                quantity: number
              }[]
              return_shipping_option: string
            }

            const CreateSwap = ({
              orderId
            }: Props) => {
              const createSwap = useCreateSwap()
              // ...

              const handleCreate = (
                data: CreateData
              ) => {
                createSwap.mutate({
                  ...data,
                  order_id: orderId
                }, {
                  onSuccess: ({ swap }) => {
                    console.log(swap.id)
                  }
                })
              }

              // ...
            }

            export default CreateSwap
        - lang: Shell
          label: cURL
          source: |
            curl -X POST '{backend_url}/store/swaps' \
            -H 'Content-Type: application/json' \
            --data-raw '{
                "order_id": "{order_id}",
                "return_items": [
                  {
                    "item_id": "{item_id}",
                    "quantity": 1
                  }
                ],
                "additional_items": [
                  {
                    "variant_id": "{variant_id}",
                    "quantity": 1
                  }
                ]
            }'
      tags:
        - Swaps
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreSwapsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/swaps/{cart_id}:
    get:
      operationId: GetSwapsSwapCartId
      summary: Get by Cart ID
      description: Retrieve a Swap's details by the ID of its cart.
      parameters:
        - in: path
          name: cart_id
          required: true
          description: The id of the Cart
          schema:
            type: string
      x-codegen:
        method: retrieveByCartId
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            medusa.swaps.retrieveByCartId(cartId)
            .then(({ swap }) => {
              console.log(swap.id);
            })
        - lang: tsx
          label: Medusa React
          source: |
            import React from "react"
            import { useCartSwap } from "medusa-react"
            type Props = {
              cartId: string
            }

            const Swap = ({ cartId }: Props) => {
              const {
                swap,
                isLoading,
              } = useCartSwap(cartId)

              return (
                <div>
                  {isLoading && <span>Loading...</span>}
                  {swap && <span>{swap.id}</span>}

                </div>
              )
            }

            export default Swap
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/swaps/{cart_id}'
      tags:
        - Swaps
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreSwapsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/variants:
    get:
      operationId: GetVariants
      summary: Get Product Variants
      description: |
        Retrieves a list of product variants. The product variants can be filtered by fields such as `id` or `title`. The product variants can also be paginated.

        For accurate and correct pricing of the product variants based on the customer's context, it's highly recommended to pass fields such as
        `region_id`, `currency_code`, and `cart_id` when available.

        Passing `sales_channel_id` ensures retrieving only variants of products available in the specified sales channel.
        You can alternatively use a publishable API key in the request header instead of passing a `sales_channel_id`.
      externalDocs:
        description: How to pass product pricing parameters
        url: https://docs.medusajs.com/modules/products/storefront/show-products#product-pricing-parameters
      parameters:
        - in: query
          name: ids
          description: Filter by a comma-separated list of IDs. If supplied, it overrides the `id` parameter.
          schema:
            type: string
        - in: query
          name: id
          style: form
          explode: false
          description: Filter by one or more IDs. If `ids` is supplied, it's overrides the value of this parameter.
          schema:
            oneOf:
              - type: string
                description: Filter by an ID.
              - type: array
                description: Filter by IDs.
                items:
                  type: string
        - in: query
          name: sales_channel_id
          description: '"Filter by sales channel IDs. When provided, only products available in the selected sales channels are retrieved. Alternatively, you can pass a publishable API key in the request header and this will have the same effect."'
          schema:
            type: string
        - in: query
          name: expand
          description: Comma-separated relations that should be expanded in the returned product variants.
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated fields that should be included in the returned product variants.
          schema:
            type: string
        - in: query
          name: offset
          description: The number of products to skip when retrieving the product variants.
          schema:
            type: number
            default: '0'
        - in: query
          name: limit
          description: Limit the number of product variants returned.
          schema:
            type: number
            default: '100'
        - in: query
          name: cart_id
          description: The ID of the cart. This is useful for accurate pricing based on the cart's context.
          schema:
            type: string
        - in: query
          name: region_id
          description: The ID of the region. This is useful for accurate pricing based on the selected region.
          schema:
            type: string
        - in: query
          name: currency_code
          style: form
          explode: false
          description: A 3 character ISO currency code. This is useful for accurate pricing based on the selected currency.
          schema:
            type: string
            externalDocs:
              url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
              description: See a list of codes.
        - in: query
          name: title
          style: form
          explode: false
          description: Filter by title
          schema:
            oneOf:
              - type: string
                description: a single title to filter by
              - type: array
                description: multiple titles to filter by
                items:
                  type: string
        - in: query
          name: inventory_quantity
          description: Filter by available inventory quantity
          schema:
            oneOf:
              - type: number
                description: A specific number to filter by.
              - type: object
                description: Filter using less and greater than comparisons.
                properties:
                  lt:
                    type: number
                    description: Filter by inventory quantity less than this number
                  gt:
                    type: number
                    description: Filter by inventory quantity greater than this number
                  lte:
                    type: number
                    description: Filter by inventory quantity less than or equal to this number
                  gte:
                    type: number
                    description: Filter by inventory quantity greater than or equal to this number
      x-codegen:
        method: list
        queryParams: StoreGetVariantsParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token
            medusa.product.variants.list()
            .then(({ variants }) => {
              console.log(variants.length);
            })
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/variants'
      tags:
        - Product Variants
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreVariantsListRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
  /store/variants/{id}:
    get:
      operationId: GetVariantsVariant
      summary: Get a Product Variant
      description: |
        Retrieve a Product Variant's details. For accurate and correct pricing of the product variant based on the customer's context, it's highly recommended to pass fields such as
        `region_id`, `currency_code`, and `cart_id` when available.

        Passing `sales_channel_id` ensures retrieving only variants of products available in the current sales channel.
        You can alternatively use a publishable API key in the request header instead of passing a `sales_channel_id`.
      externalDocs:
        description: How to pass product pricing parameters
        url: https://docs.medusajs.com/modules/products/storefront/show-products#product-pricing-parameters
      parameters:
        - in: path
          name: id
          required: true
          description: The ID of the Product Variant.
          schema:
            type: string
        - in: query
          name: sales_channel_id
          description: The ID of the sales channel the customer is viewing the product variant from.
          schema:
            type: string
        - in: query
          name: cart_id
          description: The ID of the cart. This is useful for accurate pricing based on the cart's context.
          schema:
            type: string
        - in: query
          name: region_id
          description: The ID of the region. This is useful for accurate pricing based on the selected region.
          schema:
            type: string
        - in: query
          name: currency_code
          style: form
          explode: false
          description: A 3 character ISO currency code. This is useful for accurate pricing based on the selected currency.
          schema:
            type: string
            externalDocs:
              url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
              description: See a list of codes.
      x-codegen:
        method: retrieve
        queryParams: StoreGetVariantsVariantParams
      x-codeSamples:
        - lang: JavaScript
          label: JS Client
          source: |
            import Medusa from "@medusajs/medusa-js"
            const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
            // must be previously logged in or use api token
            medusa.product.variants.retrieve(productVariantId)
            .then(({ variant }) => {
              console.log(variant.id);
            })
        - lang: Shell
          label: cURL
          source: |
            curl '{backend_url}/store/variants/{id}'
      tags:
        - Product Variants
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreVariantsRes'
        '400':
          $ref: '#/components/responses/400_error'
        '404':
          $ref: '#/components/responses/not_found_error'
        '409':
          $ref: '#/components/responses/invalid_state_error'
        '422':
          $ref: '#/components/responses/invalid_request_error'
        '500':
          $ref: '#/components/responses/500_error'
components:
  responses:
    default_error:
      description: Default Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: unknown_error
            message: An unknown error occurred.
            type: unknown_error
    invalid_state_error:
      description: Invalid State Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: unknown_error
            message: The request conflicted with another request. You may retry the request with the provided Idempotency-Key.
            type: QueryRunnerAlreadyReleasedError
    invalid_request_error:
      description: Invalid Request Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: invalid_request_error
            message: Discount with code TEST already exists.
            type: duplicate_error
    not_found_error:
      description: Not Found Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Entity with id 1 was not found
            type: not_found
    400_error:
      description: Client Error or Multiple Errors
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/Error'
              - $ref: '#/components/schemas/MultipleErrors'
          examples:
            not_allowed:
              $ref: '#/components/examples/not_allowed_error'
            invalid_data:
              $ref: '#/components/examples/invalid_data_error'
            MultipleErrors:
              $ref: '#/components/examples/multiple_errors'
    500_error:
      description: Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            database:
              $ref: '#/components/examples/database_error'
            unexpected_state:
              $ref: '#/components/examples/unexpected_state_error'
            invalid_argument:
              $ref: '#/components/examples/invalid_argument_error'
            default_error:
              $ref: '#/components/examples/default_error'
    unauthorized:
      description: User is not authorized. Must log in first
      content:
        text/plain:
          schema:
            type: string
            default: Unauthorized
            example: Unauthorized
    incorrect_credentials:
      description: User does not exist or incorrect credentials
      content:
        text/plain:
          schema:
            type: string
            default: Unauthorized
            example: Unauthorized
  examples:
    not_allowed_error:
      summary: Not Allowed Error
      value:
        message: Discount must be set to dynamic
        type: not_allowed
    invalid_data_error:
      summary: Invalid Data Error
      value:
        message: first_name must be a string
        type: invalid_data
    multiple_errors:
      summary: Multiple Errors
      value:
        message: Provided request body contains errors. Please check the data and retry the request
        errors:
          - message: first_name must be a string
            type: invalid_data
          - message: Discount must be set to dynamic
            type: not_allowed
    database_error:
      summary: Database Error
      value:
        code: api_error
        message: An error occured while hashing password
        type: database_error
    unexpected_state_error:
      summary: Unexpected State Error
      value:
        message: cart.total must be defined
        type: unexpected_state
    invalid_argument_error:
      summary: Invalid Argument Error
      value:
        message: cart.total must be defined
        type: unexpected_state
    default_error:
      summary: Default Error
      value:
        code: unknown_error
        message: An unknown error occurred.
        type: unknown_error
  securitySchemes:
    jwt_token:
      type: http
      x-displayName: JWT Token
      scheme: bearer
    cookie_auth:
      type: apiKey
      x-displayName: Cookie Session ID
      in: cookie
      name: connect.sid
      description: |
        Use a cookie session to send authenticated requests.

        ### How to Obtain the Cookie Session

        If you're sending requests through a browser, using JS Client, or using tools like Postman, the cookie session should be automatically set when the customer is logged in.

        If you're sending requests using cURL, you must set the Session ID in the cookie manually.

        To do that, send a request to [authenticate the customer](#tag/Auth/operation/PostAuth) and pass the cURL option `-v`:

        ```bash
        curl -v --location --request POST 'https://medusa-url.com/store/auth' \
        --header 'Content-Type: application/json' \
        --data-raw '{
          "email": "user@example.com",
          "password": "supersecret"
        }'
        ```

        The headers will be logged in the terminal as well as the response. You should find in the headers a Cookie header similar to this:

        ```bash
        Set-Cookie: connect.sid=s%3A2Bu8BkaP9JUfHu9rG59G16Ma0QZf6Gj1.WT549XqX37PN8n0OecqnMCq798eLjZC5IT7yiDCBHPM;
        ```

        Copy the value after `connect.sid` (without the `;` at the end) and pass it as a cookie in subsequent requests as the following:

        ```bash
        curl --location --request GET 'https://medusa-url.com/store/customers/me/orders' \
        --header 'Cookie: connect.sid={sid}'
        ```

        Where `{sid}` is the value of `connect.sid` that you copied.
  schemas:
    Address:
      title: Address
      description: An address is used across the Medusa backend within other schemas and object types. For example, a customer's billing and shipping addresses both use the Address entity.
      type: object
      required:
        - address_1
        - address_2
        - city
        - company
        - country_code
        - created_at
        - customer_id
        - deleted_at
        - first_name
        - id
        - last_name
        - metadata
        - phone
        - postal_code
        - province
        - updated_at
      properties:
        id:
          type: string
          description: ID of the address
          example: addr_01G8ZC9VS1XVE149MGH2J7QSSH
        customer_id:
          description: ID of the customer this address belongs to
          nullable: true
          type: string
          example: cus_01G2SG30J8C85S4A5CHM2S1NS2
        customer:
          description: Available if the relation `customer` is expanded.
          nullable: true
          type: object
        company:
          description: Company name
          nullable: true
          type: string
          example: Acme
        first_name:
          description: First name
          nullable: true
          type: string
          example: Arno
        last_name:
          description: Last name
          nullable: true
          type: string
          example: Willms
        address_1:
          description: Address line 1
          nullable: true
          type: string
          example: 14433 Kemmer Court
        address_2:
          description: Address line 2
          nullable: true
          type: string
          example: Suite 369
        city:
          description: City
          nullable: true
          type: string
          example: South Geoffreyview
        country_code:
          description: The 2 character ISO code of the country in lower case
          nullable: true
          type: string
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
            description: See a list of codes.
          example: st
        country:
          description: A country object.
          x-expandable: country
          nullable: true
          $ref: '#/components/schemas/Country'
        province:
          description: Province
          nullable: true
          type: string
          example: Kentucky
        postal_code:
          description: Postal Code
          nullable: true
          type: string
          example: 72093
        phone:
          description: Phone Number
          nullable: true
          type: string
          example: 16128234334802
        created_at:
          type: string
          description: The date with timezone at which the resource was created.
          format: date-time
        updated_at:
          type: string
          description: The date with timezone at which the resource was updated.
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    AddressCreatePayload:
      type: object
      description: Address fields used when creating an address.
      required:
        - first_name
        - last_name
        - address_1
        - city
        - country_code
        - postal_code
      properties:
        first_name:
          description: First name
          type: string
          example: Arno
        last_name:
          description: Last name
          type: string
          example: Willms
        phone:
          type: string
          description: Phone Number
          example: 16128234334802
        company:
          type: string
        address_1:
          description: Address line 1
          type: string
          example: 14433 Kemmer Court
        address_2:
          description: Address line 2
          type: string
          example: Suite 369
        city:
          description: City
          type: string
          example: South Geoffreyview
        country_code:
          description: The 2 character ISO code of the country in lower case
          type: string
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
            description: See a list of codes.
          example: st
        province:
          description: Province
          type: string
          example: Kentucky
        postal_code:
          description: Postal Code
          type: string
          example: 72093
        metadata:
          type: object
          example:
            car: white
          description: An optional key-value map with additional details
    AddressPayload:
      type: object
      description: Address fields used when creating/updating an address.
      properties:
        first_name:
          description: First name
          type: string
          example: Arno
        last_name:
          description: Last name
          type: string
          example: Willms
        phone:
          type: string
          description: Phone Number
          example: 16128234334802
        company:
          type: string
          description: Company
        address_1:
          description: Address line 1
          type: string
          example: 14433 Kemmer Court
        address_2:
          description: Address line 2
          type: string
          example: Suite 369
        city:
          description: City
          type: string
          example: South Geoffreyview
        country_code:
          description: The 2 character ISO code of the country in lower case
          type: string
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
            description: See a list of codes.
          example: st
        province:
          description: Province
          type: string
          example: Kentucky
        postal_code:
          description: Postal Code
          type: string
          example: 72093
        metadata:
          type: object
          example:
            car: white
          description: An optional key-value map with additional details
    BatchJob:
      title: Batch Job
      description: A Batch Job indicates an asynchronus task stored in the Medusa backend. Its status determines whether it has been executed or not.
      type: object
      required:
        - canceled_at
        - completed_at
        - confirmed_at
        - context
        - created_at
        - created_by
        - deleted_at
        - dry_run
        - failed_at
        - id
        - pre_processed_at
        - processing_at
        - result
        - status
        - type
        - updated_at
      properties:
        id:
          description: The unique identifier for the batch job.
          type: string
          example: batch_01G8T782965PYFG0751G0Z38B4
        type:
          description: The type of batch job.
          type: string
          enum:
            - product-import
            - product-export
        status:
          description: The status of the batch job.
          type: string
          enum:
            - created
            - pre_processed
            - confirmed
            - processing
            - completed
            - canceled
            - failed
          default: created
        created_by:
          description: The unique identifier of the user that created the batch job.
          nullable: true
          type: string
          example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V
        created_by_user:
          description: The details of the user that created the batch job.
          x-expandable: created_by_user
          nullable: true
          $ref: '#/components/schemas/User'
        context:
          description: The context of the batch job, the type of the batch job determines what the context should contain.
          nullable: true
          type: object
          example:
            shape:
              prices:
                - region: null
                  currency_code: eur
              dynamicImageColumnCount: 4
              dynamicOptionColumnCount: 2
            list_config:
              skip: 0
              take: 50
              order:
                created_at: DESC
              relations:
                - variants
                - variant.prices
                - images
        dry_run:
          description: Specify if the job must apply the modifications or not.
          type: boolean
          default: false
        result:
          description: The result of the batch job.
          nullable: true
          allOf:
            - type: object
              example: {}
            - type: object
              properties:
                count:
                  type: number
                advancement_count:
                  type: number
                progress:
                  type: number
                errors:
                  type: object
                  properties:
                    message:
                      type: string
                    code:
                      oneOf:
                        - type: string
                        - type: number
                    err:
                      type: array
                stat_descriptors:
                  type: object
                  properties:
                    key:
                      type: string
                    name:
                      type: string
                    message:
                      type: string
                file_key:
                  type: string
                file_size:
                  type: number
          example:
            errors:
              - err: []
                code: unknown
                message: Method not implemented.
            stat_descriptors:
              - key: product-export-count
                name: Product count to export
                message: There will be 8 products exported by this action
        pre_processed_at:
          description: The date from which the job has been pre-processed.
          nullable: true
          type: string
          format: date-time
        processing_at:
          description: The date the job is processing at.
          nullable: true
          type: string
          format: date-time
        confirmed_at:
          description: The date when the confirmation has been done.
          nullable: true
          type: string
          format: date-time
        completed_at:
          description: The date of the completion.
          nullable: true
          type: string
          format: date-time
        canceled_at:
          description: The date of the concellation.
          nullable: true
          type: string
          format: date-time
        failed_at:
          description: The date when the job failed.
          nullable: true
          type: string
          format: date-time
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was last updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
    Cart:
      title: Cart
      description: A cart represents a virtual shopping bag. It can be used to complete an order, a swap, or a claim.
      type: object
      required:
        - billing_address_id
        - completed_at
        - context
        - created_at
        - customer_id
        - deleted_at
        - email
        - id
        - idempotency_key
        - metadata
        - payment_authorized_at
        - payment_id
        - payment_session
        - region_id
        - shipping_address_id
        - type
        - updated_at
      properties:
        id:
          description: The cart's ID
          type: string
          example: cart_01G8ZH853Y6TFXWPG5EYE81X63
        email:
          description: The email associated with the cart
          nullable: true
          type: string
          format: email
        billing_address_id:
          description: The billing address's ID
          nullable: true
          type: string
          example: addr_01G8ZH853YPY9B94857DY91YGW
        billing_address:
          description: The details of the billing address associated with the cart.
          x-expandable: billing_address
          nullable: true
          $ref: '#/components/schemas/Address'
        shipping_address_id:
          description: The shipping address's ID
          nullable: true
          type: string
          example: addr_01G8ZH853YPY9B94857DY91YGW
        shipping_address:
          description: The details of the shipping address associated with the cart.
          x-expandable: shipping_address
          nullable: true
          $ref: '#/components/schemas/Address'
        items:
          description: The line items added to the cart.
          type: array
          x-expandable: items
          items:
            $ref: '#/components/schemas/LineItem'
        region_id:
          description: The region's ID
          type: string
          example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G
        region:
          description: The details of the region associated with the cart.
          x-expandable: region
          nullable: true
          $ref: '#/components/schemas/Region'
        discounts:
          description: An array of details of all discounts applied to the cart.
          type: array
          x-expandable: discounts
          items:
            $ref: '#/components/schemas/Discount'
        gift_cards:
          description: An array of details of all gift cards applied to the cart.
          type: array
          x-expandable: gift_cards
          items:
            $ref: '#/components/schemas/GiftCard'
        customer_id:
          description: The customer's ID
          nullable: true
          type: string
          example: cus_01G2SG30J8C85S4A5CHM2S1NS2
        customer:
          description: The details of the customer the cart belongs to.
          x-expandable: customer
          nullable: true
          type: object
        payment_session:
          description: The details of the selected payment session in the cart.
          x-expandable: payment_session
          nullable: true
          type: object
        payment_sessions:
          description: The details of all payment sessions created on the cart.
          type: array
          x-expandable: payment_sessions
          items:
            type: object
        payment_id:
          description: The payment's ID if available
          nullable: true
          type: string
          example: pay_01G8ZCC5W42ZNY842124G7P5R9
        payment:
          description: The details of the payment associated with the cart.
          nullable: true
          x-expandable: payment
          type: object
        shipping_methods:
          description: The details of the shipping methods added to the cart.
          type: array
          x-expandable: shipping_methods
          items:
            $ref: '#/components/schemas/ShippingMethod'
        type:
          description: The cart's type.
          type: string
          enum:
            - default
            - swap
            - draft_order
            - payment_link
            - claim
          default: default
        completed_at:
          description: The date with timezone at which the cart was completed.
          nullable: true
          type: string
          format: date-time
        payment_authorized_at:
          description: The date with timezone at which the payment was authorized.
          nullable: true
          type: string
          format: date-time
        idempotency_key:
          description: Randomly generated key used to continue the completion of a cart in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        context:
          description: The context of the cart which can include info like IP or user agent.
          nullable: true
          type: object
          example:
            ip: '::1'
            user_agent: PostmanRuntime/7.29.2
        sales_channel_id:
          description: The sales channel ID the cart is associated with.
          nullable: true
          type: string
          example: null
        sales_channel:
          description: The details of the sales channel associated with the cart.
          nullable: true
          x-expandable: sales_channel
          $ref: '#/components/schemas/SalesChannel'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
        shipping_total:
          description: The total of shipping
          type: integer
          example: 1000
        discount_total:
          description: The total of discount rounded
          type: integer
          example: 800
        raw_discount_total:
          description: The total of discount
          type: integer
          example: 800
        item_tax_total:
          description: The total of items with taxes
          type: integer
          example: 8000
        shipping_tax_total:
          description: The total of shipping with taxes
          type: integer
          example: 1000
        tax_total:
          description: The total of tax
          type: integer
          example: 0
        refunded_total:
          description: The total amount refunded if the order associated with this cart is returned.
          type: integer
          example: 0
        total:
          description: The total amount of the cart
          type: integer
          example: 8200
        subtotal:
          description: The subtotal of the cart
          type: integer
          example: 8000
        refundable_amount:
          description: The amount that can be refunded
          type: integer
          example: 8200
        gift_card_total:
          description: The total of gift cards
          type: integer
          example: 0
        gift_card_tax_total:
          description: The total of gift cards with taxes
          type: integer
          example: 0
        sales_channels:
          description: The associated sales channels.
          type: array
          nullable: true
          x-expandable: sales_channels
          items:
            $ref: '#/components/schemas/SalesChannel'
    ClaimImage:
      title: Claim Image
      description: The details of an image attached to a claim.
      type: object
      required:
        - claim_item_id
        - created_at
        - deleted_at
        - id
        - metadata
        - updated_at
        - url
      properties:
        id:
          description: The claim image's ID
          type: string
          example: cimg_01G8ZH853Y6TFXWPG5EYE81X63
        claim_item_id:
          description: The ID of the claim item associated with the image
          type: string
        claim_item:
          description: The details of the claim item this image is associated with.
          nullable: true
          x-expandable: claim_item
          type: object
        url:
          description: The URL of the image
          type: string
          format: uri
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ClaimItem:
      title: Claim Item
      description: A claim item is an item created as part of a claim. It references an item in the order that should be exchanged or refunded.
      type: object
      required:
        - claim_order_id
        - created_at
        - deleted_at
        - id
        - item_id
        - metadata
        - note
        - quantity
        - reason
        - updated_at
        - variant_id
      properties:
        id:
          description: The claim item's ID
          type: string
          example: citm_01G8ZH853Y6TFXWPG5EYE81X63
        images:
          description: The claim images that are attached to the claim item.
          type: array
          x-expandable: images
          items:
            $ref: '#/components/schemas/ClaimImage'
        claim_order_id:
          description: The ID of the claim this item is associated with.
          type: string
        claim_order:
          description: The details of the claim this item belongs to.
          x-expandable: claim_order
          nullable: true
          type: object
        item_id:
          description: The ID of the line item that the claim item refers to.
          type: string
          example: item_01G8ZM25TN49YV9EQBE2NC27KC
        item:
          description: The details of the line item in the original order that this claim item refers to.
          x-expandable: item
          nullable: true
          $ref: '#/components/schemas/LineItem'
        variant_id:
          description: The ID of the product variant that is claimed.
          type: string
          example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6
        variant:
          description: The details of the product variant to potentially replace the item in the original order.
          x-expandable: variant
          nullable: true
          $ref: '#/components/schemas/ProductVariant'
        reason:
          description: The reason for the claim
          type: string
          enum:
            - missing_item
            - wrong_item
            - production_failure
            - other
        note:
          description: An optional note about the claim, for additional information
          nullable: true
          type: string
          example: I don't like it.
        quantity:
          description: The quantity of the item that is being claimed; must be less than or equal to the amount purchased in the original order.
          type: integer
          example: 1
        tags:
          description: User defined tags for easy filtering and grouping.
          type: array
          x-expandable: tags
          items:
            $ref: '#/components/schemas/ClaimTag'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ClaimOrder:
      title: Claim
      description: A Claim represents a group of faulty or missing items. It consists of claim items that refer to items in the original order that should be replaced or refunded. It also includes details related to shipping and fulfillment.
      type: object
      required:
        - canceled_at
        - created_at
        - deleted_at
        - fulfillment_status
        - id
        - idempotency_key
        - metadata
        - no_notification
        - order_id
        - payment_status
        - refund_amount
        - shipping_address_id
        - type
        - updated_at
      properties:
        id:
          description: The claim's ID
          type: string
          example: claim_01G8ZH853Y6TFXWPG5EYE81X63
        type:
          description: The claim's type
          type: string
          enum:
            - refund
            - replace
        payment_status:
          description: The status of the claim's payment
          type: string
          enum:
            - na
            - not_refunded
            - refunded
          default: na
        fulfillment_status:
          description: The claim's fulfillment status
          type: string
          enum:
            - not_fulfilled
            - partially_fulfilled
            - fulfilled
            - partially_shipped
            - shipped
            - partially_returned
            - returned
            - canceled
            - requires_action
          default: not_fulfilled
        claim_items:
          description: The details of the items that should be replaced or refunded.
          type: array
          x-expandable: claim_items
          items:
            $ref: '#/components/schemas/ClaimItem'
        additional_items:
          description: The details of the new items to be shipped when the claim's type is `replace`
          type: array
          x-expandable: additional_items
          items:
            $ref: '#/components/schemas/LineItem'
        order_id:
          description: The ID of the order that the claim comes from.
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order that this claim was created for.
          x-expandable: order
          nullable: true
          type: object
        return_order:
          description: The details of the return associated with the claim if the claim's type is `replace`.
          x-expandable: return_order
          nullable: true
          type: object
        shipping_address_id:
          description: The ID of the address that the new items should be shipped to
          nullable: true
          type: string
          example: addr_01G8ZH853YPY9B94857DY91YGW
        shipping_address:
          description: The details of the address that new items should be shipped to.
          x-expandable: shipping_address
          nullable: true
          $ref: '#/components/schemas/Address'
        shipping_methods:
          description: The details of the shipping methods that the claim order will be shipped with.
          type: array
          x-expandable: shipping_methods
          items:
            $ref: '#/components/schemas/ShippingMethod'
        fulfillments:
          description: The fulfillments of the new items to be shipped
          type: array
          x-expandable: fulfillments
          items:
            type: object
        refund_amount:
          description: The amount that will be refunded in conjunction with the claim
          nullable: true
          type: integer
          example: 1000
        canceled_at:
          description: The date with timezone at which the claim was canceled.
          nullable: true
          type: string
          format: date-time
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
        no_notification:
          description: Flag for describing whether or not notifications related to this should be send.
          nullable: true
          type: boolean
          example: false
        idempotency_key:
          description: Randomly generated key used to continue the completion of the cart associated with the claim in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
    ClaimTag:
      title: Claim Tag
      description: Claim Tags are user defined tags that can be assigned to claim items for easy filtering and grouping.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - metadata
        - updated_at
        - value
      properties:
        id:
          description: The claim tag's ID
          type: string
          example: ctag_01G8ZCC5Y63B95V6B5SHBZ91S4
        value:
          description: The value that the claim tag holds
          type: string
          example: Damaged
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    Country:
      title: Country
      description: Country details
      type: object
      required:
        - display_name
        - id
        - iso_2
        - iso_3
        - name
        - num_code
        - region_id
      properties:
        id:
          description: The country's ID
          type: string
          example: 109
        iso_2:
          description: The 2 character ISO code of the country in lower case
          type: string
          example: it
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
            description: See a list of codes.
        iso_3:
          description: The 2 character ISO code of the country in lower case
          type: string
          example: ita
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements
            description: See a list of codes.
        num_code:
          description: The numerical ISO code for the country.
          type: string
          example: 380
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_3166-1_numeric#Officially_assigned_code_elements
            description: See a list of codes.
        name:
          description: The normalized country name in upper case.
          type: string
          example: ITALY
        display_name:
          description: The country name appropriate for display.
          type: string
          example: Italy
        region_id:
          description: The region ID this country is associated with.
          nullable: true
          type: string
          example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G
        region:
          description: The details of the region the country is associated with.
          x-expandable: region
          nullable: true
          type: object
    CreateStockLocationInput:
      title: Create Stock Location Input
      description: Represents the Input to create a Stock Location
      type: object
      required:
        - name
      properties:
        name:
          type: string
          description: The stock location name
        address_id:
          type: string
          description: The Stock location address ID
        address:
          description: Stock location address object
          allOf:
            - $ref: '#/components/schemas/StockLocationAddressInput'
            - type: object
        metadata:
          type: object
          description: An optional key-value map with additional details
          example:
            car: white
    Currency:
      title: Currency
      description: Currency
      type: object
      required:
        - code
        - name
        - symbol
        - symbol_native
      properties:
        code:
          description: The 3 character ISO code for the currency.
          type: string
          example: usd
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
            description: See a list of codes.
        symbol:
          description: The symbol used to indicate the currency.
          type: string
          example: $
        symbol_native:
          description: The native symbol used to indicate the currency.
          type: string
          example: $
        name:
          description: The written name of the currency
          type: string
          example: US Dollar
        includes_tax:
          description: Whether the currency prices include tax
          type: boolean
          x-featureFlag: tax_inclusive_pricing
          default: false
    CustomShippingOption:
      title: Custom Shipping Option
      description: Custom Shipping Options are overridden Shipping Options. Admins can attach a Custom Shipping Option to a cart in order to set a custom price for a particular Shipping Option.
      type: object
      required:
        - cart_id
        - created_at
        - deleted_at
        - id
        - metadata
        - price
        - shipping_option_id
        - updated_at
      properties:
        id:
          description: The custom shipping option's ID
          type: string
          example: cso_01G8X99XNB77DMFBJFWX6DN9V9
        price:
          description: The custom price set that will override the shipping option's original price
          type: integer
          example: 1000
        shipping_option_id:
          description: The ID of the Shipping Option that the custom shipping option overrides
          type: string
          example: so_01G1G5V27GYX4QXNARRQCW1N8T
        shipping_option:
          description: The details of the overridden shipping options.
          x-expandable: shipping_option
          nullable: true
          $ref: '#/components/schemas/ShippingOption'
        cart_id:
          description: The ID of the Cart that the custom shipping option is attached to
          nullable: true
          type: string
          example: cart_01G8ZH853Y6TFXWPG5EYE81X63
        cart:
          description: The details of the cart this shipping option belongs to.
          x-expandable: cart
          nullable: true
          $ref: '#/components/schemas/Cart'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    Customer:
      title: Customer
      description: A customer can make purchases in your store and manage their profile.
      type: object
      required:
        - billing_address_id
        - created_at
        - deleted_at
        - email
        - first_name
        - has_account
        - id
        - last_name
        - metadata
        - phone
        - updated_at
      properties:
        id:
          description: The customer's ID
          type: string
          example: cus_01G2SG30J8C85S4A5CHM2S1NS2
        email:
          description: The customer's email
          type: string
          format: email
        first_name:
          description: The customer's first name
          nullable: true
          type: string
          example: Arno
        last_name:
          description: The customer's last name
          nullable: true
          type: string
          example: Willms
        billing_address_id:
          description: The customer's billing address ID
          nullable: true
          type: string
          example: addr_01G8ZH853YPY9B94857DY91YGW
        billing_address:
          description: The details of the billing address associated with the customer.
          x-expandable: billing_address
          nullable: true
          $ref: '#/components/schemas/Address'
        shipping_addresses:
          description: The details of the shipping addresses associated with the customer.
          type: array
          x-expandable: shipping_addresses
          items:
            $ref: '#/components/schemas/Address'
        phone:
          description: The customer's phone number
          nullable: true
          type: string
          example: 16128234334802
        has_account:
          description: Whether the customer has an account or not
          type: boolean
          default: false
        orders:
          description: The details of the orders this customer placed.
          type: array
          x-expandable: orders
          items:
            type: object
        groups:
          description: The customer groups the customer belongs to.
          type: array
          x-expandable: groups
          items:
            $ref: '#/components/schemas/CustomerGroup'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    CustomerGroup:
      title: Customer Group
      description: A customer group that can be used to organize customers into groups of similar traits.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - metadata
        - name
        - updated_at
      properties:
        id:
          description: The customer group's ID
          type: string
          example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63
        name:
          description: The name of the customer group
          type: string
          example: VIP
        customers:
          description: The details of the customers that belong to the customer group.
          type: array
          x-expandable: customers
          items:
            type: object
        price_lists:
          description: The price lists that are associated with the customer group.
          type: array
          x-expandable: price_lists
          items:
            type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    Discount:
      title: Discount
      description: A discount can be applied to a cart for promotional purposes.
      type: object
      required:
        - code
        - created_at
        - deleted_at
        - ends_at
        - id
        - is_disabled
        - is_dynamic
        - metadata
        - parent_discount_id
        - rule_id
        - starts_at
        - updated_at
        - usage_count
        - usage_limit
        - valid_duration
      properties:
        id:
          description: The discount's ID
          type: string
          example: disc_01F0YESMW10MGHWJKZSDDMN0VN
        code:
          description: A unique code for the discount - this will be used by the customer to apply the discount
          type: string
          example: 10DISC
        is_dynamic:
          description: A flag to indicate if multiple instances of the discount can be generated. I.e. for newsletter discounts
          type: boolean
          example: false
        rule_id:
          description: The ID of the discount rule that defines how the discount will be applied to a cart.
          nullable: true
          type: string
          example: dru_01F0YESMVK96HVX7N419E3CJ7C
        rule:
          description: The details of the discount rule that defines how the discount will be applied to a cart..
          x-expandable: rule
          nullable: true
          $ref: '#/components/schemas/DiscountRule'
        is_disabled:
          description: Whether the Discount has been disabled. Disabled discounts cannot be applied to carts
          type: boolean
          example: false
        parent_discount_id:
          description: The Discount that the discount was created from. This will always be a dynamic discount
          nullable: true
          type: string
          example: disc_01G8ZH853YPY9B94857DY91YGW
        parent_discount:
          description: The details of the parent discount that this discount was created from.
          x-expandable: parent_discount
          nullable: true
          type: object
        starts_at:
          description: The time at which the discount can be used.
          type: string
          format: date-time
        ends_at:
          description: The time at which the discount can no longer be used.
          nullable: true
          type: string
          format: date-time
        valid_duration:
          description: Duration the discount runs between
          nullable: true
          type: string
          example: P3Y6M4DT12H30M5S
        regions:
          description: The details of the regions in which the Discount can be used.
          type: array
          x-expandable: regions
          items:
            $ref: '#/components/schemas/Region'
        usage_limit:
          description: The maximum number of times that a discount can be used.
          nullable: true
          type: integer
          example: 100
        usage_count:
          description: The number of times a discount has been used.
          type: integer
          example: 50
          default: 0
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    DiscountCondition:
      title: Discount Condition
      description: Holds rule conditions for when a discount is applicable
      type: object
      required:
        - created_at
        - deleted_at
        - discount_rule_id
        - id
        - metadata
        - operator
        - type
        - updated_at
      properties:
        id:
          description: The discount condition's ID
          type: string
          example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A
        type:
          description: The type of the condition. The type affects the available resources associated with the condition. For example, if the type is `products`, that means the `products` relation will hold the products associated with this condition and other relations will be empty.
          type: string
          enum:
            - products
            - product_types
            - product_collections
            - product_tags
            - customer_groups
        operator:
          description: The operator of the condition. `in` indicates that discountable resources are within the specified resources. `not_in` indicates that discountable resources are everything but the specified resources.
          type: string
          enum:
            - in
            - not_in
        discount_rule_id:
          description: The ID of the discount rule associated with the condition
          type: string
          example: dru_01F0YESMVK96HVX7N419E3CJ7C
        discount_rule:
          description: The details of the discount rule associated with the condition.
          x-expandable: discount_rule
          nullable: true
          $ref: '#/components/schemas/DiscountRule'
        products:
          description: products associated with this condition if `type` is `products`.
          type: array
          x-expandable: products
          items:
            $ref: '#/components/schemas/Product'
        product_types:
          description: Product types associated with this condition if `type` is `product_types`.
          type: array
          x-expandable: product_types
          items:
            $ref: '#/components/schemas/ProductType'
        product_tags:
          description: Product tags associated with this condition if `type` is `product_tags`.
          type: array
          x-expandable: product_tags
          items:
            $ref: '#/components/schemas/ProductTag'
        product_collections:
          description: Product collections associated with this condition if `type` is `product_collections`.
          type: array
          x-expandable: product_collections
          items:
            $ref: '#/components/schemas/ProductCollection'
        customer_groups:
          description: Customer groups associated with this condition if `type` is `customer_groups`.
          type: array
          x-expandable: customer_groups
          items:
            $ref: '#/components/schemas/CustomerGroup'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    DiscountConditionCustomerGroup:
      title: Product Tag Discount Condition
      description: Associates a discount condition with a customer group
      type: object
      required:
        - condition_id
        - created_at
        - customer_group_id
        - metadata
        - updated_at
      properties:
        customer_group_id:
          description: The ID of the Product Tag
          type: string
          example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63
        condition_id:
          description: The ID of the Discount Condition
          type: string
          example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A
        customer_group:
          description: Available if the relation `customer_group` is expanded.
          nullable: true
          $ref: '#/components/schemas/CustomerGroup'
        discount_condition:
          description: Available if the relation `discount_condition` is expanded.
          nullable: true
          $ref: '#/components/schemas/DiscountCondition'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    DiscountConditionProduct:
      title: Product Discount Condition
      description: This represents the association between a discount condition and a product
      type: object
      required:
        - condition_id
        - created_at
        - metadata
        - product_id
        - updated_at
      properties:
        product_id:
          description: The ID of the Product Tag
          type: string
          example: prod_01G1G5V2MBA328390B5AXJ610F
        condition_id:
          description: The ID of the Discount Condition
          type: string
          example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A
        product:
          description: The details of the product.
          x-expandable: product
          nullable: true
          $ref: '#/components/schemas/Product'
        discount_condition:
          description: The details of the discount condition.
          x-expandable: discount_condition
          nullable: true
          $ref: '#/components/schemas/DiscountCondition'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    DiscountConditionProductCollection:
      title: Product Collection Discount Condition
      description: This represents the association between a discount condition and a product collection
      type: object
      required:
        - condition_id
        - created_at
        - metadata
        - product_collection_id
        - updated_at
      properties:
        product_collection_id:
          description: The ID of the Product Collection
          type: string
          example: pcol_01F0YESBFAZ0DV6V831JXWH0BG
        condition_id:
          description: The ID of the Discount Condition
          type: string
          example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A
        product_collection:
          description: The details of the product collection.
          x-expandable: product_collection
          nullable: true
          $ref: '#/components/schemas/ProductCollection'
        discount_condition:
          description: The details of the discount condition.
          x-expandable: discount_condition
          nullable: true
          $ref: '#/components/schemas/DiscountCondition'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    DiscountConditionProductTag:
      title: Product Tag Discount Condition
      description: This represents the association between a discount condition and a product tag
      type: object
      required:
        - condition_id
        - created_at
        - metadata
        - product_tag_id
        - updated_at
      properties:
        product_tag_id:
          description: The ID of the Product Tag
          type: string
          example: ptag_01F0YESHPZYY3H4SJ3A5918SBN
        condition_id:
          description: The ID of the Discount Condition
          type: string
          example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A
        product_tag:
          description: The details of the product tag.
          x-expandable: product_tag
          nullable: true
          $ref: '#/components/schemas/ProductTag'
        discount_condition:
          description: The details of the discount condition.
          x-expandable: discount_condition
          nullable: true
          $ref: '#/components/schemas/DiscountCondition'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    DiscountConditionProductType:
      title: Product Type Discount Condition
      description: This represents the association between a discount condition and a product type
      type: object
      required:
        - condition_id
        - created_at
        - metadata
        - product_type_id
        - updated_at
      properties:
        product_type_id:
          description: The ID of the Product Tag
          type: string
          example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A
        condition_id:
          description: The ID of the Discount Condition
          type: string
          example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A
        product_type:
          description: The details of the product type.
          x-expandable: product_type
          nullable: true
          $ref: '#/components/schemas/ProductType'
        discount_condition:
          description: The details of the discount condition.
          x-expandable: discount_condition
          nullable: true
          $ref: '#/components/schemas/DiscountCondition'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    DiscountRule:
      title: Discount Rule
      description: A discount rule defines how a Discount is calculated when applied to a Cart.
      type: object
      required:
        - allocation
        - created_at
        - deleted_at
        - description
        - id
        - metadata
        - type
        - updated_at
        - value
      properties:
        id:
          description: The discount rule's ID
          type: string
          example: dru_01F0YESMVK96HVX7N419E3CJ7C
        type:
          description: The type of the Discount, can be `fixed` for discounts that reduce the price by a fixed amount, `percentage` for percentage reductions or `free_shipping` for shipping vouchers.
          type: string
          enum:
            - fixed
            - percentage
            - free_shipping
          example: percentage
        description:
          description: A short description of the discount
          nullable: true
          type: string
          example: 10 Percent
        value:
          description: The value that the discount represents; this will depend on the type of the discount
          type: integer
          example: 10
        allocation:
          description: The scope that the discount should apply to.
          nullable: true
          type: string
          enum:
            - total
            - item
          example: total
        conditions:
          description: The details of the discount conditions associated with the rule. They can be used to limit when the discount can be used.
          type: array
          x-expandable: conditions
          items:
            type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    DraftOrder:
      title: DraftOrder
      description: A draft order is created by an admin without direct involvement of the customer. Once its payment is marked as captured, it is transformed into an order.
      type: object
      required:
        - canceled_at
        - cart_id
        - completed_at
        - created_at
        - display_id
        - id
        - idempotency_key
        - metadata
        - no_notification_order
        - order_id
        - status
        - updated_at
      properties:
        id:
          description: The draft order's ID
          type: string
          example: dorder_01G8TJFKBG38YYFQ035MSVG03C
        status:
          description: The status of the draft order. It's changed to `completed` when it's transformed to an order.
          type: string
          enum:
            - open
            - completed
          default: open
        display_id:
          description: The draft order's display ID
          type: string
          example: 2
        cart_id:
          description: The ID of the cart associated with the draft order.
          nullable: true
          type: string
          example: cart_01G8ZH853Y6TFXWPG5EYE81X63
        cart:
          description: The details of the cart associated with the draft order.
          x-expandable: cart
          nullable: true
          type: object
        order_id:
          description: The ID of the order created from the draft order when its payment is captured.
          nullable: true
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order created from the draft order when its payment is captured.
          x-expandable: order
          nullable: true
          type: object
        canceled_at:
          description: The date the draft order was canceled at.
          nullable: true
          type: string
          format: date-time
        completed_at:
          description: The date the draft order was completed at.
          nullable: true
          type: string
          format: date-time
        no_notification_order:
          description: Whether to send the customer notifications regarding order updates.
          nullable: true
          type: boolean
          example: false
        idempotency_key:
          description: Randomly generated key used to continue the completion of the cart associated with the draft order in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    Error:
      title: Response Error
      type: object
      properties:
        code:
          type: string
          description: A slug code to indicate the type of the error.
          enum:
            - invalid_state_error
            - invalid_request_error
            - api_error
            - unknown_error
        message:
          type: string
          description: Description of the error that occurred.
          example: first_name must be a string
        type:
          type: string
          description: A slug indicating the type of the error.
          enum:
            - QueryRunnerAlreadyReleasedError
            - TransactionAlreadyStartedError
            - TransactionNotStartedError
            - conflict
            - unauthorized
            - payment_authorization_error
            - duplicate_error
            - not_allowed
            - invalid_data
            - not_found
            - database_error
            - unexpected_state
            - invalid_argument
            - unknown_error
    ExtendedStoreDTO:
      allOf:
        - $ref: '#/components/schemas/Store'
        - type: object
          required:
            - payment_providers
            - fulfillment_providers
            - feature_flags
            - modules
          properties:
            payment_providers:
              description: The store's payment providers.
              $ref: '#/components/schemas/PaymentProvider'
            fulfillment_providers:
              description: The store's fulfillment providers.
              $ref: '#/components/schemas/FulfillmentProvider'
            feature_flags:
              description: The feature flags enabled in the store's backend.
              $ref: '#/components/schemas/FeatureFlagsResponse'
            modules:
              description: The modules installed in the store's backend.
              $ref: '#/components/schemas/ModulesResponse'
    FeatureFlagsResponse:
      type: array
      items:
        type: object
        required:
          - key
          - value
        properties:
          key:
            description: The key of the feature flag.
            type: string
          value:
            description: The value of the feature flag.
            type: boolean
    Fulfillment:
      title: Fulfillment
      description: A Fulfillment is created once an admin can prepare the purchased goods. Fulfillments will eventually be shipped and hold information about how to track shipments. Fulfillments are created through a fulfillment provider, which typically integrates a third-party shipping service. Fulfillments can be associated with orders, claims, swaps, and returns.
      type: object
      required:
        - canceled_at
        - claim_order_id
        - created_at
        - data
        - id
        - idempotency_key
        - location_id
        - metadata
        - no_notification
        - order_id
        - provider_id
        - shipped_at
        - swap_id
        - tracking_numbers
        - updated_at
      properties:
        id:
          description: The fulfillment's ID
          type: string
          example: ful_01G8ZRTMQCA76TXNAT81KPJZRF
        claim_order_id:
          description: The ID of the Claim that the Fulfillment belongs to.
          nullable: true
          type: string
          example: null
        claim_order:
          description: The details of the claim that the fulfillment may belong to.
          x-expandable: claim_order
          nullable: true
          type: object
        swap_id:
          description: The ID of the Swap that the Fulfillment belongs to.
          nullable: true
          type: string
          example: null
        swap:
          description: The details of the swap that the fulfillment may belong to.
          x-expandable: swap
          nullable: true
          type: object
        order_id:
          description: The ID of the Order that the Fulfillment belongs to.
          nullable: true
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order that the fulfillment may belong to.
          x-expandable: order
          nullable: true
          type: object
        provider_id:
          description: The ID of the Fulfillment Provider responsible for handling the fulfillment.
          type: string
          example: manual
        provider:
          description: The details of the fulfillment provider responsible for handling the fulfillment.
          x-expandable: provider
          nullable: true
          $ref: '#/components/schemas/FulfillmentProvider'
        location_id:
          description: The ID of the stock location the fulfillment will be shipped from
          nullable: true
          type: string
          example: sloc_01G8TJSYT9M6AVS5N4EMNFS1EK
        items:
          description: The Fulfillment Items in the Fulfillment. These hold information about how many of each Line Item has been fulfilled.
          type: array
          x-expandable: items
          items:
            $ref: '#/components/schemas/FulfillmentItem'
        tracking_links:
          description: The Tracking Links that can be used to track the status of the Fulfillment. These will usually be provided by the Fulfillment Provider.
          type: array
          x-expandable: tracking_links
          items:
            $ref: '#/components/schemas/TrackingLink'
        tracking_numbers:
          description: The tracking numbers that can be used to track the status of the fulfillment.
          deprecated: true
          type: array
          items:
            type: string
        data:
          description: This contains all the data necessary for the Fulfillment provider to handle the fulfillment.
          type: object
          example: {}
        shipped_at:
          description: The date with timezone at which the Fulfillment was shipped.
          nullable: true
          type: string
          format: date-time
        no_notification:
          description: Flag for describing whether or not notifications related to this should be sent.
          nullable: true
          type: boolean
          example: false
        canceled_at:
          description: The date with timezone at which the Fulfillment was canceled.
          nullable: true
          type: string
          format: date-time
        idempotency_key:
          description: Randomly generated key used to continue the completion of the fulfillment in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    FulfillmentItem:
      title: Fulfillment Item
      description: This represents the association between a Line Item and a Fulfillment.
      type: object
      required:
        - fulfillment_id
        - item_id
        - quantity
      properties:
        fulfillment_id:
          description: The ID of the Fulfillment that the Fulfillment Item belongs to.
          type: string
          example: ful_01G8ZRTMQCA76TXNAT81KPJZRF
        item_id:
          description: The ID of the Line Item that the Fulfillment Item references.
          type: string
          example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN
        fulfillment:
          description: The details of the fulfillment.
          x-expandable: fulfillment
          nullable: true
          type: object
        item:
          description: The details of the line item.
          x-expandable: item
          nullable: true
          $ref: '#/components/schemas/LineItem'
        quantity:
          description: The quantity of the Line Item that is included in the Fulfillment.
          type: integer
          example: 1
    FulfillmentProvider:
      title: Fulfillment Provider
      description: A fulfillment provider represents a fulfillment service installed in the Medusa backend, either through a plugin or backend customizations. It holds the fulfillment service's installation status.
      type: object
      required:
        - id
        - is_installed
      properties:
        id:
          description: The ID of the fulfillment provider as given by the fulfillment service.
          type: string
          example: manual
        is_installed:
          description: Whether the fulfillment service is installed in the current version. If a fulfillment service is no longer installed, the `is_installed` attribute is set to `false`.
          type: boolean
          default: true
    GiftCard:
      title: Gift Card
      description: Gift Cards are redeemable and represent a value that can be used towards the payment of an Order.
      type: object
      required:
        - balance
        - code
        - created_at
        - deleted_at
        - ends_at
        - id
        - is_disabled
        - metadata
        - order_id
        - region_id
        - tax_rate
        - updated_at
        - value
      properties:
        id:
          description: The gift card's ID
          type: string
          example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ
        code:
          description: The unique code that identifies the Gift Card. This is used by the Customer to redeem the value of the Gift Card.
          type: string
          example: 3RFT-MH2C-Y4YZ-XMN4
        value:
          description: The value that the Gift Card represents.
          type: integer
          example: 10
        balance:
          description: The remaining value on the Gift Card.
          type: integer
          example: 10
        region_id:
          description: The ID of the region this gift card is available in.
          type: string
          example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G
        region:
          description: The details of the region this gift card is available in.
          x-expandable: region
          nullable: true
          $ref: '#/components/schemas/Region'
        order_id:
          description: The ID of the order that the gift card was purchased in.
          nullable: true
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order that the gift card was purchased in.
          x-expandable: region
          nullable: true
          type: object
        is_disabled:
          description: Whether the Gift Card has been disabled. Disabled Gift Cards cannot be applied to carts.
          type: boolean
          default: false
        ends_at:
          description: The time at which the Gift Card can no longer be used.
          nullable: true
          type: string
          format: date-time
        tax_rate:
          description: The gift card's tax rate that will be applied on calculating totals
          nullable: true
          type: number
          example: 0
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    GiftCardTransaction:
      title: Gift Card Transaction
      description: Gift Card Transactions are created once a Customer uses a Gift Card to pay for their Order.
      type: object
      required:
        - amount
        - created_at
        - gift_card_id
        - id
        - is_taxable
        - order_id
        - tax_rate
      properties:
        id:
          description: The gift card transaction's ID
          type: string
          example: gct_01G8X9A7ESKAJXG2H0E6F1MW7A
        gift_card_id:
          description: The ID of the Gift Card that was used in the transaction.
          type: string
          example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ
        gift_card:
          description: The details of the gift card associated used in this transaction.
          x-expandable: gift_card
          nullable: true
          type: object
        order_id:
          description: The ID of the order that the gift card was used for payment.
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order that the gift card was used for payment.
          x-expandable: order
          nullable: true
          type: object
        amount:
          description: The amount that was used from the Gift Card.
          type: integer
          example: 10
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        is_taxable:
          description: Whether the transaction is taxable or not.
          nullable: true
          type: boolean
          example: false
        tax_rate:
          description: The tax rate of the transaction
          nullable: true
          type: number
          example: 0
    IdempotencyKey:
      title: Idempotency Key
      description: Idempotency Key is used to continue a process in case of any failure that might occur.
      type: object
      required:
        - created_at
        - id
        - idempotency_key
        - locked_at
        - recovery_point
        - response_code
        - response_body
        - request_method
        - request_params
        - request_path
      properties:
        id:
          description: The idempotency key's ID
          type: string
          example: ikey_01G8X9A7ESKAJXG2H0E6F1MW7A
        idempotency_key:
          description: The unique randomly generated key used to determine the state of a process.
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        created_at:
          description: Date which the idempotency key was locked.
          type: string
          format: date-time
        locked_at:
          description: Date which the idempotency key was locked.
          nullable: true
          type: string
          format: date-time
        request_method:
          description: The method of the request
          nullable: true
          type: string
          example: POST
        request_params:
          description: The parameters passed to the request
          nullable: true
          type: object
          example:
            id: cart_01G8ZH853Y6TFXWPG5EYE81X63
        request_path:
          description: The request's path
          nullable: true
          type: string
          example: /store/carts/cart_01G8ZH853Y6TFXWPG5EYE81X63/complete
        response_code:
          description: The response's code.
          nullable: true
          type: string
          example: 200
        response_body:
          description: The response's body
          nullable: true
          type: object
          example:
            id: cart_01G8ZH853Y6TFXWPG5EYE81X63
        recovery_point:
          description: Where to continue from.
          type: string
          default: started
    Image:
      title: Image
      description: An Image is used to store details about uploaded images. Images are uploaded by the File Service, and the URL is provided by the File Service.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - metadata
        - updated_at
        - url
      properties:
        id:
          type: string
          description: The image's ID
          example: img_01G749BFYR6T8JTVW6SGW3K3E6
        url:
          description: The URL at which the image file can be found.
          type: string
          format: uri
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    InventoryItemDTO:
      type: object
      required:
        - sku
      properties:
        id:
          description: The inventory item's ID.
          type: string
          example: iitem_12334
        sku:
          description: The Stock Keeping Unit (SKU) code of the Inventory Item.
          type: string
        hs_code:
          description: The Harmonized System code of the Inventory Item. May be used by Fulfillment Providers to pass customs information to shipping carriers.
          type: string
        origin_country:
          description: The country in which the Inventory Item was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers.
          type: string
        mid_code:
          description: The Manufacturers Identification code that identifies the manufacturer of the Inventory Item. May be used by Fulfillment Providers to pass customs information to shipping carriers.
          type: string
        title:
          description: Title of the inventory item
          type: string
        description:
          description: Description of the inventory item
          type: string
        thumbnail:
          description: Thumbnail for the inventory item
          type: string
        material:
          description: The material and composition that the Inventory Item is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers.
          type: string
        weight:
          description: The weight of the Inventory Item. May be used in shipping rate calculations.
          type: number
        height:
          description: The height of the Inventory Item. May be used in shipping rate calculations.
          type: number
        width:
          description: The width of the Inventory Item. May be used in shipping rate calculations.
          type: number
        length:
          description: The length of the Inventory Item. May be used in shipping rate calculations.
          type: number
        requires_shipping:
          description: Whether the item requires shipping.
          type: boolean
        metadata:
          type: object
          description: An optional key-value map with additional details
          example:
            car: white
        created_at:
          type: string
          description: The date with timezone at which the resource was created.
          format: date-time
        updated_at:
          type: string
          description: The date with timezone at which the resource was updated.
          format: date-time
        deleted_at:
          type: string
          description: The date with timezone at which the resource was deleted.
          format: date-time
    InventoryLevelDTO:
      type: object
      required:
        - inventory_item_id
        - location_id
        - stocked_quantity
        - reserved_quantity
        - incoming_quantity
      properties:
        location_id:
          description: the item location ID
          type: string
        stocked_quantity:
          description: the total stock quantity of an inventory item at the given location ID
          type: number
        reserved_quantity:
          description: the reserved stock quantity of an inventory item at the given location ID
          type: number
        incoming_quantity:
          description: the incoming stock quantity of an inventory item at the given location ID
          type: number
        metadata:
          type: object
          description: An optional key-value map with additional details
          example:
            car: white
        created_at:
          type: string
          description: The date with timezone at which the resource was created.
          format: date-time
        updated_at:
          type: string
          description: The date with timezone at which the resource was updated.
          format: date-time
        deleted_at:
          type: string
          description: The date with timezone at which the resource was deleted.
          format: date-time
    Invite:
      title: Invite
      description: An invite is created when an admin user invites a new user to join the store's team. Once the invite is accepted, it's deleted.
      type: object
      required:
        - accepted
        - created_at
        - deleted_at
        - expires_at
        - id
        - metadata
        - role
        - token
        - updated_at
        - user_email
      properties:
        id:
          type: string
          description: The invite's ID
          example: invite_01G8TKE4XYCTHSCK2GDEP47RE1
        user_email:
          description: The email of the user being invited.
          type: string
          format: email
        role:
          description: The user's role. These roles don't change the privileges of the user.
          nullable: true
          type: string
          enum:
            - admin
            - member
            - developer
          default: member
        accepted:
          description: Whether the invite was accepted or not.
          type: boolean
          default: false
        token:
          description: The token used to accept the invite.
          type: string
        expires_at:
          description: The date the invite expires at.
          type: string
          format: date-time
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    LineItem:
      title: Line Item
      description: Line Items are created when a product is added to a Cart. When Line Items are purchased they will get copied to the resulting order, swap, or claim, and can eventually be referenced in Fulfillments and Returns. Line items may also be used for order edits.
      type: object
      required:
        - allow_discounts
        - cart_id
        - claim_order_id
        - created_at
        - description
        - fulfilled_quantity
        - has_shipping
        - id
        - is_giftcard
        - is_return
        - metadata
        - order_edit_id
        - order_id
        - original_item_id
        - quantity
        - returned_quantity
        - shipped_quantity
        - should_merge
        - swap_id
        - thumbnail
        - title
        - unit_price
        - updated_at
        - variant_id
      properties:
        id:
          description: The line item's ID
          type: string
          example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN
        cart_id:
          description: The ID of the cart that the line item may belongs to.
          nullable: true
          type: string
          example: cart_01G8ZH853Y6TFXWPG5EYE81X63
        cart:
          description: The details of the cart that the line item may belongs to.
          x-expandable: cart
          nullable: true
          type: object
        order_id:
          description: The ID of the order that the line item may belongs to.
          nullable: true
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order that the line item may belongs to.
          x-expandable: order
          nullable: true
          type: object
        swap_id:
          description: The ID of the swap that the line item may belong to.
          nullable: true
          type: string
          example: null
        swap:
          description: The details of the swap that the line item may belong to.
          x-expandable: swap
          nullable: true
          type: object
        claim_order_id:
          description: The ID of the claim that the line item may belong to.
          nullable: true
          type: string
          example: null
        claim_order:
          description: The details of the claim that the line item may belong to.
          x-expandable: claim_order
          nullable: true
          type: object
        tax_lines:
          description: The details of the item's tax lines.
          x-expandable: tax_lines
          type: array
          items:
            $ref: '#/components/schemas/LineItemTaxLine'
        adjustments:
          description: The details of the item's adjustments, which are available when a discount is applied on the item.
          x-expandable: adjustments
          type: array
          items:
            $ref: '#/components/schemas/LineItemAdjustment'
        original_item_id:
          description: The ID of the original line item. This is useful if the line item belongs to a resource that references an order, such as a return or an order edit.
          nullable: true
          type: string
        order_edit_id:
          description: The ID of the order edit that the item may belong to.
          nullable: true
          type: string
        order_edit:
          description: The details of the order edit.
          x-expandable: order_edit
          nullable: true
          type: object
        title:
          description: The title of the Line Item.
          type: string
          example: Medusa Coffee Mug
        description:
          description: A more detailed description of the contents of the Line Item.
          nullable: true
          type: string
          example: One Size
        thumbnail:
          description: A URL string to a small image of the contents of the Line Item.
          nullable: true
          type: string
          format: uri
          example: https://medusa-public-images.s3.eu-west-1.amazonaws.com/coffee-mug.png
        is_return:
          description: Is the item being returned
          type: boolean
          default: false
        is_giftcard:
          description: Flag to indicate if the Line Item is a Gift Card.
          type: boolean
          default: false
        should_merge:
          description: Flag to indicate if new Line Items with the same variant should be merged or added as an additional Line Item.
          type: boolean
          default: true
        allow_discounts:
          description: Flag to indicate if the Line Item should be included when doing discount calculations.
          type: boolean
          default: true
        has_shipping:
          description: Flag to indicate if the Line Item has fulfillment associated with it.
          nullable: true
          type: boolean
          example: false
        unit_price:
          description: The price of one unit of the content in the Line Item. This should be in the currency defined by the Cart/Order/Swap/Claim that the Line Item belongs to.
          type: integer
          example: 8000
        variant_id:
          description: The id of the Product Variant contained in the Line Item.
          nullable: true
          type: string
          example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6
        variant:
          description: The details of the product variant that this item was created from.
          x-expandable: variant
          nullable: true
          $ref: '#/components/schemas/ProductVariant'
        quantity:
          description: The quantity of the content in the Line Item.
          type: integer
          example: 1
        fulfilled_quantity:
          description: The quantity of the Line Item that has been fulfilled.
          nullable: true
          type: integer
          example: 0
        returned_quantity:
          description: The quantity of the Line Item that has been returned.
          nullable: true
          type: integer
          example: 0
        shipped_quantity:
          description: The quantity of the Line Item that has been shipped.
          nullable: true
          type: integer
          example: 0
        refundable:
          description: The amount that can be refunded from the given Line Item. Takes taxes and discounts into consideration.
          type: integer
          example: 0
        subtotal:
          description: The subtotal of the line item
          type: integer
          example: 8000
        tax_total:
          description: The total of tax of the line item
          type: integer
          example: 0
        total:
          description: The total amount of the line item
          type: integer
          example: 8000
        original_total:
          description: The original total amount of the line item
          type: integer
          example: 8000
        original_tax_total:
          description: The original tax total amount of the line item
          type: integer
          example: 0
        discount_total:
          description: The total of discount of the line item rounded
          type: integer
          example: 0
        raw_discount_total:
          description: The total of discount of the line item
          type: integer
          example: 0
        gift_card_total:
          description: The total of the gift card of the line item
          type: integer
          example: 0
        includes_tax:
          description: Indicates if the line item unit_price include tax
          x-featureFlag: tax_inclusive_pricing
          type: boolean
          default: false
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    LineItemAdjustment:
      title: Line Item Adjustment
      description: A Line Item Adjustment includes details on discounts applied on a line item.
      type: object
      required:
        - amount
        - description
        - discount_id
        - id
        - item_id
        - metadata
      properties:
        id:
          description: The Line Item Adjustment's ID
          type: string
          example: lia_01G8TKE4XYCTHSCK2GDEP47RE1
        item_id:
          description: The ID of the line item
          type: string
          example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN
        item:
          description: The details of the line item.
          x-expandable: item
          nullable: true
          type: object
        description:
          description: The line item's adjustment description
          type: string
          example: Adjusted item's price.
        discount_id:
          description: The ID of the discount associated with the adjustment
          nullable: true
          type: string
          example: disc_01F0YESMW10MGHWJKZSDDMN0VN
        discount:
          description: The details of the discount associated with the adjustment.
          x-expandable: discount
          nullable: true
          $ref: '#/components/schemas/Discount'
        amount:
          description: The adjustment amount
          type: number
          example: 1000
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    LineItemTaxLine:
      title: Line Item Tax Line
      description: A Line Item Tax Line represents the taxes applied on a line item.
      type: object
      required:
        - code
        - created_at
        - id
        - item_id
        - metadata
        - name
        - rate
        - updated_at
      properties:
        id:
          description: The line item tax line's ID
          type: string
          example: litl_01G1G5V2DRX1SK6NQQ8VVX4HQ8
        code:
          description: A code to identify the tax type by
          nullable: true
          type: string
          example: tax01
        name:
          description: A human friendly name for the tax
          type: string
          example: Tax Example
        rate:
          description: The numeric rate to charge tax by
          type: number
          example: 10
        item_id:
          description: The ID of the line item
          type: string
          example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN
        item:
          description: The details of the line item.
          x-expandable: item
          nullable: true
          type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ModulesResponse:
      type: array
      items:
        type: object
        required:
          - module
          - resolution
        properties:
          module:
            description: The key of the module.
            type: string
          resolution:
            description: The resolution path of the module or false if module is not installed.
            type: string
    MoneyAmount:
      title: Money Amount
      description: A Money Amount represent a price amount, for example, a product variant's price or a price in a price list. Each Money Amount either has a Currency or Region associated with it to indicate the pricing in a given Currency or, for fully region-based pricing, the given price in a specific Region. If region-based pricing is used, the amount will be in the currency defined for the Region.
      type: object
      required:
        - amount
        - created_at
        - currency_code
        - deleted_at
        - id
        - max_quantity
        - min_quantity
        - price_list_id
        - region_id
        - updated_at
        - variant_id
      properties:
        id:
          description: The money amount's ID
          type: string
          example: ma_01F0YESHRFQNH5S8Q0PK84YYZN
        currency_code:
          description: The 3 character currency code that the money amount may belong to.
          type: string
          example: usd
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
            description: See a list of codes.
        currency:
          description: The details of the currency that the money amount may belong to.
          x-expandable: currency
          nullable: true
          $ref: '#/components/schemas/Currency'
        amount:
          description: The amount in the smallest currecny unit (e.g. cents 100 cents to charge $1) that the Product Variant will cost.
          type: integer
          example: 100
        min_quantity:
          description: The minimum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities.
          nullable: true
          type: integer
          example: 1
        max_quantity:
          description: The maximum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities.
          nullable: true
          type: integer
          example: 1
        price_list_id:
          description: The ID of the price list that the money amount may belong to.
          nullable: true
          type: string
          example: pl_01G8X3CKJXCG5VXVZ87H9KC09W
        price_list:
          description: The details of the price list that the money amount may belong to.
          x-expandable: price_list
          nullable: true
          type: object
        variant_id:
          description: The ID of the Product Variant contained in the Line Item.
          nullable: true
          type: string
          example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6
        variant:
          description: The details of the product variant that the money amount may belong to.
          x-expandable: variant
          nullable: true
          type: object
        region_id:
          description: The region's ID
          nullable: true
          type: string
          example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G
        region:
          description: The details of the region that the money amount may belong to.
          x-expandable: region
          nullable: true
          type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
    MultipleErrors:
      title: Multiple Errors
      type: object
      properties:
        errors:
          type: array
          description: Array of errors
          items:
            $ref: '#/components/schemas/Error'
        message:
          type: string
          default: Provided request body contains errors. Please check the data and retry the request
    Note:
      title: Note
      description: A Note is an element that can be used in association with different resources to allow admin users to describe additional information. For example, they can be used to add additional information about orders.
      type: object
      required:
        - author_id
        - created_at
        - deleted_at
        - id
        - metadata
        - resource_id
        - resource_type
        - updated_at
        - value
      properties:
        id:
          description: The note's ID
          type: string
          example: note_01G8TM8ENBMC7R90XRR1G6H26Q
        resource_type:
          description: The type of resource that the Note refers to.
          type: string
          example: order
        resource_id:
          description: The ID of the resource that the Note refers to.
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        value:
          description: The contents of the note.
          type: string
          example: This order must be fulfilled on Monday
        author_id:
          description: The ID of the user that created the note.
          nullable: true
          type: string
          example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V
        author:
          description: The details of the user that created the note.
          x-expandable: author
          nullable: true
          $ref: '#/components/schemas/User'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
    Notification:
      title: Notification
      description: A notification is an alert sent, typically to customers, using the installed Notification Provider as a reaction to internal events such as `order.placed`. Notifications can be resent.
      type: object
      required:
        - created_at
        - customer_id
        - data
        - event_name
        - id
        - parent_id
        - provider_id
        - resource_type
        - resource_id
        - to
        - updated_at
      properties:
        id:
          description: The notification's ID
          type: string
          example: noti_01G53V9Y6CKMCGBM1P0X7C28RX
        event_name:
          description: The name of the event that the notification was sent for.
          nullable: true
          type: string
          example: order.placed
        resource_type:
          description: The type of resource that the Notification refers to.
          type: string
          example: order
        resource_id:
          description: The ID of the resource that the Notification refers to.
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        customer_id:
          description: The ID of the customer that this notification was sent to.
          nullable: true
          type: string
          example: cus_01G2SG30J8C85S4A5CHM2S1NS2
        customer:
          description: The details of the customer that this notification was sent to.
          x-expandable: customer
          nullable: true
          $ref: '#/components/schemas/Customer'
        to:
          description: The address that the Notification was sent to. This will usually be an email address, but can represent other addresses such as a chat bot user ID.
          type: string
          example: user@example.com
        data:
          description: The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend.
          type: object
          example: {}
        parent_id:
          description: The notification's parent ID
          nullable: true
          type: string
          example: noti_01G53V9Y6CKMCGBM1P0X7C28RX
        parent_notification:
          description: The details of the parent notification.
          x-expandable: parent_notification
          nullable: true
          type: object
        resends:
          description: The details of all resends of the notification.
          type: array
          x-expandable: resends
          items:
            type: object
        provider_id:
          description: The ID of the notification provider used to send the notification.
          nullable: true
          type: string
          example: sengrid
        provider:
          description: The notification provider used to send the notification.
          x-expandable: provider
          nullable: true
          $ref: '#/components/schemas/NotificationProvider'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
    NotificationProvider:
      title: Notification Provider
      description: A notification provider represents a notification service installed in the Medusa backend, either through a plugin or backend customizations. It holds the notification service's installation status.
      type: object
      required:
        - id
        - is_installed
      properties:
        id:
          description: The ID of the notification provider as given by the notification service.
          type: string
          example: sendgrid
        is_installed:
          description: Whether the notification service is installed in the current version. If a notification service is no longer installed, the `is_installed` attribute is set to `false`.
          type: boolean
          default: true
    OAuth:
      title: OAuth
      description: An Oauth app is typically created by a plugin to handle authentication to third-party services.
      type: object
      required:
        - application_name
        - data
        - display_name
        - id
        - install_url
        - uninstall_url
      properties:
        id:
          description: The app's ID
          type: string
          example: example_app
        display_name:
          description: The app's display name
          type: string
          example: Example app
        application_name:
          description: The app's name
          type: string
          example: example
        install_url:
          description: The URL to install the app
          nullable: true
          type: string
          format: uri
        uninstall_url:
          description: The URL to uninstall the app
          nullable: true
          type: string
          format: uri
        data:
          description: Any data necessary to the app.
          nullable: true
          type: object
          example: {}
    Order:
      title: Order
      description: An order is a purchase made by a customer. It holds details about payment and fulfillment of the order. An order may also be created from a draft order, which is created by an admin user.
      type: object
      required:
        - billing_address_id
        - canceled_at
        - cart_id
        - created_at
        - currency_code
        - customer_id
        - draft_order_id
        - display_id
        - email
        - external_id
        - fulfillment_status
        - id
        - idempotency_key
        - metadata
        - no_notification
        - object
        - payment_status
        - region_id
        - shipping_address_id
        - status
        - tax_rate
        - updated_at
      properties:
        id:
          description: The order's ID
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        status:
          description: The order's status
          type: string
          enum:
            - pending
            - completed
            - archived
            - canceled
            - requires_action
          default: pending
        fulfillment_status:
          description: The order's fulfillment status
          type: string
          enum:
            - not_fulfilled
            - partially_fulfilled
            - fulfilled
            - partially_shipped
            - shipped
            - partially_returned
            - returned
            - canceled
            - requires_action
          default: not_fulfilled
        payment_status:
          description: The order's payment status
          type: string
          enum:
            - not_paid
            - awaiting
            - captured
            - partially_refunded
            - refunded
            - canceled
            - requires_action
          default: not_paid
        display_id:
          description: The order's display ID
          type: integer
          example: 2
        cart_id:
          description: The ID of the cart associated with the order
          nullable: true
          type: string
          example: cart_01G8ZH853Y6TFXWPG5EYE81X63
        cart:
          description: The details of the cart associated with the order.
          x-expandable: cart
          nullable: true
          type: object
        customer_id:
          description: The ID of the customer associated with the order
          type: string
          example: cus_01G2SG30J8C85S4A5CHM2S1NS2
        customer:
          description: The details of the customer associated with the order.
          x-expandable: customer
          nullable: true
          type: object
        email:
          description: The email associated with the order
          type: string
          format: email
        billing_address_id:
          description: The ID of the billing address associated with the order
          nullable: true
          type: string
          example: addr_01G8ZH853YPY9B94857DY91YGW
        billing_address:
          description: The details of the billing address associated with the order.
          x-expandable: billing_address
          nullable: true
          $ref: '#/components/schemas/Address'
        shipping_address_id:
          description: The ID of the shipping address associated with the order
          nullable: true
          type: string
          example: addr_01G8ZH853YPY9B94857DY91YGW
        shipping_address:
          description: The details of the shipping address associated with the order.
          x-expandable: shipping_address
          nullable: true
          $ref: '#/components/schemas/Address'
        region_id:
          description: The ID of the region this order was created in.
          type: string
          example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G
        region:
          description: The details of the region this order was created in.
          x-expandable: region
          nullable: true
          $ref: '#/components/schemas/Region'
        currency_code:
          description: The 3 character currency code that is used in the order
          type: string
          example: usd
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
            description: See a list of codes.
        currency:
          description: The details of the currency used in the order.
          x-expandable: currency
          nullable: true
          $ref: '#/components/schemas/Currency'
        tax_rate:
          description: The order's tax rate
          nullable: true
          type: number
          example: 0
        discounts:
          description: The details of the discounts applied on the order.
          type: array
          x-expandable: discounts
          items:
            $ref: '#/components/schemas/Discount'
        gift_cards:
          description: The details of the gift card used in the order.
          type: array
          x-expandable: gift_cards
          items:
            $ref: '#/components/schemas/GiftCard'
        shipping_methods:
          description: The details of the shipping methods used in the order.
          type: array
          x-expandable: shipping_methods
          items:
            $ref: '#/components/schemas/ShippingMethod'
        payments:
          description: The details of the payments used in the order.
          type: array
          x-expandable: payments
          items:
            type: object
        fulfillments:
          description: The details of the fulfillments created for the order.
          type: array
          x-expandable: fulfillments
          items:
            type: object
        returns:
          description: The details of the returns created for the order.
          type: array
          x-expandable: returns
          items:
            type: object
        claims:
          description: The details of the claims created for the order.
          type: array
          x-expandable: claims
          items:
            type: object
        refunds:
          description: The details of the refunds created for the order.
          type: array
          x-expandable: refunds
          items:
            type: object
        swaps:
          description: The details of the swaps created for the order.
          type: array
          x-expandable: swaps
          items:
            type: object
        draft_order_id:
          description: The ID of the draft order this order was created from.
          nullable: true
          type: string
          example: null
        draft_order:
          description: The details of the draft order this order was created from.
          x-expandable: draft_order
          nullable: true
          type: object
        items:
          description: The details of the line items that belong to the order.
          x-expandable: items
          type: array
          items:
            $ref: '#/components/schemas/LineItem'
        edits:
          description: The details of the order edits done on the order.
          type: array
          x-expandable: edits
          items:
            type: object
        gift_card_transactions:
          description: The gift card transactions made in the order.
          type: array
          x-expandable: gift_card_transactions
          items:
            $ref: '#/components/schemas/GiftCardTransaction'
        canceled_at:
          description: The date the order was canceled on.
          nullable: true
          type: string
          format: date-time
        no_notification:
          description: Flag for describing whether or not notifications related to this should be send.
          nullable: true
          type: boolean
          example: false
        idempotency_key:
          description: Randomly generated key used to continue the processing of the order in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        external_id:
          description: The ID of an external order.
          nullable: true
          type: string
          example: null
        sales_channel_id:
          description: The ID of the sales channel this order belongs to.
          nullable: true
          type: string
          example: null
        sales_channel:
          description: The details of the sales channel this order belongs to.
          x-expandable: sales_channel
          nullable: true
          $ref: '#/components/schemas/SalesChannel'
        shipping_total:
          type: integer
          description: The total of shipping
          example: 1000
          nullable: true
        shipping_tax_total:
          type: integer
          description: The tax total applied on shipping
          example: 1000
        raw_discount_total:
          description: The total of discount
          type: integer
          example: 800
        discount_total:
          description: The total of discount rounded
          type: integer
          example: 800
        tax_total:
          description: The total of tax
          type: integer
          example: 0
        item_tax_total:
          description: The tax total applied on items
          type: integer
          example: 0
          nullable: true
        refunded_total:
          description: The total amount refunded if the order is returned.
          type: integer
          example: 0
        total:
          description: The total amount of the order
          type: integer
          example: 8200
        subtotal:
          description: The subtotal of the order
          type: integer
          example: 8000
        paid_total:
          description: The total amount paid
          type: integer
          example: 8000
        refundable_amount:
          description: The amount that can be refunded
          type: integer
          example: 8200
        gift_card_total:
          description: The total of gift cards
          type: integer
          example: 0
        gift_card_tax_total:
          description: The total of gift cards with taxes
          type: integer
          example: 0
        returnable_items:
          description: The details of the line items that are returnable as part of the order, swaps, or claims
          type: array
          x-expandable: returnable_items
          items:
            $ref: '#/components/schemas/LineItem'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
        sales_channels:
          description: The associated sales channels.
          type: array
          nullable: true
          x-expandable: sales_channels
          x-featureFlag: medusa_v2
          items:
            $ref: '#/components/schemas/SalesChannel'
    OrderEdit:
      title: Order Edit
      description: Order edit allows modifying items in an order, such as adding, updating, or deleting items from the original order. Once the order edit is confirmed, the changes are reflected on the original order.
      type: object
      required:
        - canceled_at
        - canceled_by
        - confirmed_by
        - confirmed_at
        - created_at
        - created_by
        - declined_at
        - declined_by
        - declined_reason
        - id
        - internal_note
        - order_id
        - payment_collection_id
        - requested_at
        - requested_by
        - status
        - updated_at
      properties:
        id:
          description: The order edit's ID
          type: string
          example: oe_01G8TJSYT9M6AVS5N4EMNFS1EK
        order_id:
          description: The ID of the order that is edited
          type: string
          example: order_01G2SG30J8C85S4A5CHM2S1NS2
        order:
          description: The details of the order that this order edit was created for.
          x-expandable: order
          nullable: true
          type: object
        changes:
          description: The details of all the changes on the original order's line items.
          x-expandable: changes
          type: array
          items:
            $ref: '#/components/schemas/OrderItemChange'
        internal_note:
          description: An optional note with additional details about the order edit.
          nullable: true
          type: string
          example: Included two more items B to the order.
        created_by:
          description: The unique identifier of the user or customer who created the order edit.
          type: string
        requested_by:
          description: The unique identifier of the user or customer who requested the order edit.
          nullable: true
          type: string
        requested_at:
          description: The date with timezone at which the edit was requested.
          nullable: true
          type: string
          format: date-time
        confirmed_by:
          description: The unique identifier of the user or customer who confirmed the order edit.
          nullable: true
          type: string
        confirmed_at:
          description: The date with timezone at which the edit was confirmed.
          nullable: true
          type: string
          format: date-time
        declined_by:
          description: The unique identifier of the user or customer who declined the order edit.
          nullable: true
          type: string
        declined_at:
          description: The date with timezone at which the edit was declined.
          nullable: true
          type: string
          format: date-time
        declined_reason:
          description: An optional note why  the order edit is declined.
          nullable: true
          type: string
        canceled_by:
          description: The unique identifier of the user or customer who cancelled the order edit.
          nullable: true
          type: string
        canceled_at:
          description: The date with timezone at which the edit was cancelled.
          nullable: true
          type: string
          format: date-time
        subtotal:
          description: The total of subtotal
          type: integer
          example: 8000
        discount_total:
          description: The total of discount
          type: integer
          example: 800
        shipping_total:
          description: The total of the shipping amount
          type: integer
          example: 800
        gift_card_total:
          description: The total of the gift card amount
          type: integer
          example: 800
        gift_card_tax_total:
          description: The total of the gift card tax amount
          type: integer
          example: 800
        tax_total:
          description: The total of tax
          type: integer
          example: 0
        total:
          description: The total amount of the edited order.
          type: integer
          example: 8200
        difference_due:
          description: The difference between the total amount of the order and total amount of edited order.
          type: integer
          example: 8200
        status:
          description: The status of the order edit.
          type: string
          enum:
            - confirmed
            - declined
            - requested
            - created
            - canceled
        items:
          description: The details of the cloned items from the original order with the new changes. Once the order edit is confirmed, these line items are associated with the original order.
          type: array
          x-expandable: items
          items:
            $ref: '#/components/schemas/LineItem'
        payment_collection_id:
          description: The ID of the payment collection
          nullable: true
          type: string
          example: paycol_01G8TJSYT9M6AVS5N4EMNFS1EK
        payment_collection:
          description: The details of the payment collection used to authorize additional payment if necessary.
          x-expandable: payment_collection
          nullable: true
          $ref: '#/components/schemas/PaymentCollection'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
    OrderItemChange:
      title: Order Item Change
      description: An order item change is a change made within an order edit to an order's items. These changes are not reflected on the original order until the order edit is confirmed.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - line_item_id
        - order_edit_id
        - original_line_item_id
        - type
        - updated_at
      properties:
        id:
          description: The order item change's ID
          type: string
          example: oic_01G8TJSYT9M6AVS5N4EMNFS1EK
        type:
          description: The order item change's status
          type: string
          enum:
            - item_add
            - item_remove
            - item_update
        order_edit_id:
          description: The ID of the order edit
          type: string
          example: oe_01G2SG30J8C85S4A5CHM2S1NS2
        order_edit:
          description: The details of the order edit the item change is associated with.
          x-expandable: order_edit
          nullable: true
          type: object
        original_line_item_id:
          description: The ID of the original line item in the order
          nullable: true
          type: string
          example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN
        original_line_item:
          description: The details of the original line item this item change references. This is used if the item change updates or deletes the original item.
          x-expandable: original_line_item
          nullable: true
          $ref: '#/components/schemas/LineItem'
        line_item_id:
          description: The ID of the cloned line item.
          nullable: true
          type: string
          example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN
        line_item:
          description: The details of the resulting line item after the item change. This line item is then used in the original order once the order edit is confirmed.
          x-expandable: line_item
          nullable: true
          $ref: '#/components/schemas/LineItem'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
    Payment:
      title: Payment
      description: A payment is originally created from a payment session. Once a payment session is authorized, the payment is created to represent the authorized amount with a given payment method. Payments can be captured, canceled or refunded. Payments can be made towards orders, swaps, order edits, or other resources.
      type: object
      required:
        - amount
        - amount_refunded
        - canceled_at
        - captured_at
        - cart_id
        - created_at
        - currency_code
        - data
        - id
        - idempotency_key
        - metadata
        - order_id
        - provider_id
        - swap_id
        - updated_at
      properties:
        id:
          description: The payment's ID
          type: string
          example: pay_01G2SJNT6DEEWDFNAJ4XWDTHKE
        swap_id:
          description: The ID of the swap that this payment was potentially created for.
          nullable: true
          type: string
          example: null
        swap:
          description: The details of the swap that this payment was potentially created for.
          x-expandable: swap
          nullable: true
          type: object
        cart_id:
          description: The ID of the cart that the payment session was potentially created for.
          nullable: true
          type: string
        cart:
          description: The details of the cart that the payment session was potentially created for.
          x-expandable: cart
          nullable: true
          type: object
        order_id:
          description: The ID of the order that the payment session was potentially created for.
          nullable: true
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order that the payment session was potentially created for.
          x-expandable: order
          nullable: true
          type: object
        amount:
          description: The amount that the Payment has been authorized for.
          type: integer
          example: 100
        currency_code:
          description: The 3 character ISO currency code of the payment.
          type: string
          example: usd
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
            description: See a list of codes.
        currency:
          description: The details of the currency of the payment.
          x-expandable: currency
          nullable: true
          $ref: '#/components/schemas/Currency'
        amount_refunded:
          description: The amount of the original Payment amount that has been refunded back to the Customer.
          type: integer
          default: 0
          example: 0
        provider_id:
          description: The id of the Payment Provider that is responsible for the Payment
          type: string
          example: manual
        data:
          description: The data required for the Payment Provider to identify, modify and process the Payment. Typically this will be an object that holds an id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state.
          type: object
          example: {}
        captured_at:
          description: The date with timezone at which the Payment was captured.
          nullable: true
          type: string
          format: date-time
        canceled_at:
          description: The date with timezone at which the Payment was canceled.
          nullable: true
          type: string
          format: date-time
        idempotency_key:
          description: Randomly generated key used to continue the completion of a payment in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    PaymentCollection:
      title: Payment Collection
      description: A payment collection allows grouping and managing a list of payments at one. This can be helpful when making additional payment for order edits or integrating installment payments.
      type: object
      required:
        - amount
        - authorized_amount
        - created_at
        - created_by
        - currency_code
        - deleted_at
        - description
        - id
        - metadata
        - region_id
        - status
        - type
        - updated_at
      properties:
        id:
          description: The payment collection's ID
          type: string
          example: paycol_01G8TJSYT9M6AVS5N4EMNFS1EK
        type:
          description: The type of the payment collection
          type: string
          enum:
            - order_edit
        status:
          description: The type of the payment collection
          type: string
          enum:
            - not_paid
            - awaiting
            - authorized
            - partially_authorized
            - canceled
        description:
          description: Description of the payment collection
          nullable: true
          type: string
        amount:
          description: Amount of the payment collection.
          type: integer
        authorized_amount:
          description: Authorized amount of the payment collection.
          nullable: true
          type: integer
        region_id:
          description: The ID of the region this payment collection is associated with.
          type: string
          example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G
        region:
          description: The details of the region this payment collection is associated with.
          x-expandable: region
          nullable: true
          $ref: '#/components/schemas/Region'
        currency_code:
          description: The three character ISO code for the currency this payment collection is associated with.
          type: string
          example: usd
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
            description: See a list of codes.
        currency:
          description: The details of the currency this payment collection is associated with.
          x-expandable: currency
          nullable: true
          $ref: '#/components/schemas/Currency'
        payment_sessions:
          description: The details of the payment sessions created as part of the payment collection.
          type: array
          x-expandable: payment_sessions
          items:
            $ref: '#/components/schemas/PaymentSession'
        payments:
          description: The details of the payments created as part of the payment collection.
          type: array
          x-expandable: payments
          items:
            $ref: '#/components/schemas/Payment'
        created_by:
          description: The ID of the user that created the payment collection.
          type: string
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    PaymentProvider:
      title: Payment Provider
      description: A payment provider represents a payment service installed in the Medusa backend, either through a plugin or backend customizations. It holds the payment service's installation status.
      type: object
      required:
        - id
        - is_installed
      properties:
        id:
          description: The ID of the payment provider as given by the payment service.
          type: string
          example: manual
        is_installed:
          description: Whether the payment service is installed in the current version. If a payment service is no longer installed, the `is_installed` attribute is set to `false`.
          type: boolean
          default: true
    PaymentSession:
      title: Payment Session
      description: A Payment Session is created when a Customer initilizes the checkout flow, and can be used to hold the state of a payment flow. Each Payment Session is controlled by a Payment Provider, which is responsible for the communication with external payment services. Authorized Payment Sessions will eventually get promoted to Payments to indicate that they are authorized for payment processing such as capture or refund. Payment sessions can also be used as part of payment collections.
      type: object
      required:
        - amount
        - cart_id
        - created_at
        - data
        - id
        - is_initiated
        - is_selected
        - idempotency_key
        - payment_authorized_at
        - provider_id
        - status
        - updated_at
      properties:
        id:
          description: The payment session's ID
          type: string
          example: ps_01G901XNSRM2YS3ASN9H5KG3FZ
        cart_id:
          description: The ID of the cart that the payment session was created for.
          nullable: true
          type: string
          example: cart_01G8ZH853Y6TFXWPG5EYE81X63
        cart:
          description: The details of the cart that the payment session was created for.
          x-expandable: cart
          nullable: true
          $ref: '#/components/schemas/Cart'
        provider_id:
          description: The ID of the Payment Provider that is responsible for the Payment Session
          type: string
          example: manual
        is_selected:
          description: A flag to indicate if the Payment Session has been selected as the method that will be used to complete the purchase.
          nullable: true
          type: boolean
          example: true
        is_initiated:
          description: A flag to indicate if a communication with the third party provider has been initiated.
          type: boolean
          default: false
          example: true
        status:
          description: Indicates the status of the Payment Session. Will default to `pending`, and will eventually become `authorized`. Payment Sessions may have the status of `requires_more` to indicate that further actions are to be completed by the Customer.
          type: string
          enum:
            - authorized
            - pending
            - requires_more
            - error
            - canceled
          example: pending
        data:
          description: The data required for the Payment Provider to identify, modify and process the Payment Session. Typically this will be an object that holds an id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state.
          type: object
          example: {}
        idempotency_key:
          description: Randomly generated key used to continue the completion of a cart in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        amount:
          description: The amount that the Payment Session has been authorized for.
          nullable: true
          type: integer
          example: 100
        payment_authorized_at:
          description: The date with timezone at which the Payment Session was authorized.
          nullable: true
          type: string
          format: date-time
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
    PriceList:
      title: Price List
      description: A Price List represents a set of prices that override the default price for one or more product variants.
      type: object
      required:
        - created_at
        - deleted_at
        - description
        - ends_at
        - id
        - name
        - starts_at
        - status
        - type
        - updated_at
      properties:
        id:
          description: The price list's ID
          type: string
          example: pl_01G8X3CKJXCG5VXVZ87H9KC09W
        name:
          description: The price list's name
          type: string
          example: VIP Prices
        description:
          description: The price list's description
          type: string
          example: Prices for VIP customers
        type:
          description: The type of Price List. This can be one of either `sale` or `override`.
          type: string
          enum:
            - sale
            - override
          default: sale
        status:
          description: The status of the Price List
          type: string
          enum:
            - active
            - draft
          default: draft
        starts_at:
          description: The date with timezone that the Price List starts being valid.
          nullable: true
          type: string
          format: date-time
        ends_at:
          description: The date with timezone that the Price List stops being valid.
          nullable: true
          type: string
          format: date-time
        customer_groups:
          description: The details of the customer groups that the Price List can apply to.
          type: array
          x-expandable: customer_groups
          items:
            $ref: '#/components/schemas/CustomerGroup'
        prices:
          description: The prices that belong to the price list, represented as a Money Amount.
          type: array
          x-expandable: prices
          items:
            $ref: '#/components/schemas/MoneyAmount'
        includes_tax:
          description: Whether the price list prices include tax
          type: boolean
          x-featureFlag: tax_inclusive_pricing
          default: false
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
    PricedProduct:
      title: Priced Product
      type: object
      allOf:
        - $ref: '#/components/schemas/Product'
        - type: object
          properties:
            variants:
              description: The product variants and their prices.
              type: array
              items:
                $ref: '#/components/schemas/PricedVariant'
    PricedShippingOption:
      title: Priced Shipping Option
      type: object
      allOf:
        - $ref: '#/components/schemas/ShippingOption'
        - type: object
          properties:
            price_incl_tax:
              type: number
              description: Price including taxes
            tax_rates:
              type: array
              description: An array of applied tax rates
              items:
                type: object
                properties:
                  rate:
                    type: number
                    description: The tax rate value
                  name:
                    type: string
                    description: The name of the tax rate
                  code:
                    type: string
                    description: The code of the tax rate
            tax_amount:
              type: number
              description: The taxes applied.
    PricedVariant:
      title: Priced Product Variant
      type: object
      allOf:
        - $ref: '#/components/schemas/ProductVariant'
        - type: object
          properties:
            original_price:
              type: number
              description: The original price of the variant without any discounted prices applied.
            calculated_price:
              type: number
              description: The calculated price of the variant. Can be a discounted price.
            original_price_incl_tax:
              type: number
              description: The original price of the variant including taxes.
            calculated_price_incl_tax:
              type: number
              description: The calculated price of the variant including taxes.
            original_tax:
              type: number
              description: The taxes applied on the original price.
            calculated_tax:
              type: number
              description: The taxes applied on the calculated price.
            tax_rates:
              type: array
              description: An array of applied tax rates
              items:
                type: object
                properties:
                  rate:
                    type: number
                    description: The tax rate value
                  name:
                    type: string
                    description: The name of the tax rate
                  code:
                    type: string
                    description: The code of the tax rate
    Product:
      title: Product
      description: A product is a saleable item that holds general information such as name or description. It must include at least one Product Variant, where each product variant defines different options to purchase the product with (for example, different sizes or colors). The prices and inventory of the product are defined on the variant level.
      type: object
      required:
        - collection_id
        - created_at
        - deleted_at
        - description
        - discountable
        - external_id
        - handle
        - height
        - hs_code
        - id
        - is_giftcard
        - length
        - material
        - metadata
        - mid_code
        - origin_country
        - profile_id
        - status
        - subtitle
        - type_id
        - thumbnail
        - title
        - updated_at
        - weight
        - width
      properties:
        id:
          description: The product's ID
          type: string
          example: prod_01G1G5V2MBA328390B5AXJ610F
        title:
          description: A title that can be displayed for easy identification of the Product.
          type: string
          example: Medusa Coffee Mug
        subtitle:
          description: An optional subtitle that can be used to further specify the Product.
          nullable: true
          type: string
        description:
          description: A short description of the Product.
          nullable: true
          type: string
          example: Every programmer's best friend.
        handle:
          description: A unique identifier for the Product (e.g. for slug structure).
          nullable: true
          type: string
          example: coffee-mug
        is_giftcard:
          description: Whether the Product represents a Gift Card. Products that represent Gift Cards will automatically generate a redeemable Gift Card code once they are purchased.
          type: boolean
          default: false
        status:
          description: The status of the product
          type: string
          enum:
            - draft
            - proposed
            - published
            - rejected
          default: draft
        images:
          description: The details of the product's images.
          type: array
          x-expandable: images
          items:
            $ref: '#/components/schemas/Image'
        thumbnail:
          description: A URL to an image file that can be used to identify the Product.
          nullable: true
          type: string
          format: uri
        options:
          description: The details of the Product Options that are defined for the Product. The product's variants will have a unique combination of values of the product's options.
          type: array
          x-expandable: options
          items:
            $ref: '#/components/schemas/ProductOption'
        variants:
          description: The details of the Product Variants that belong to the Product. Each will have a unique combination of values of the product's options.
          type: array
          x-expandable: variants
          items:
            $ref: '#/components/schemas/ProductVariant'
        categories:
          description: The details of the product categories that this product belongs to.
          type: array
          x-expandable: categories
          x-featureFlag: product_categories
          items:
            $ref: '#/components/schemas/ProductCategory'
        profile_id:
          description: The ID of the shipping profile that the product belongs to. The shipping profile has a set of defined shipping options that can be used to fulfill the product.
          type: string
          example: sp_01G1G5V239ENSZ5MV4JAR737BM
        profile:
          description: The details of the shipping profile that the product belongs to. The shipping profile has a set of defined shipping options that can be used to fulfill the product.
          x-expandable: profile
          nullable: true
          $ref: '#/components/schemas/ShippingProfile'
        profiles:
          description: Available if the relation `profiles` is expanded.
          nullable: true
          type: array
          items:
            $ref: '#/components/schemas/ShippingProfile'
        weight:
          description: The weight of the Product Variant. May be used in shipping rate calculations.
          nullable: true
          type: number
          example: null
        length:
          description: The length of the Product Variant. May be used in shipping rate calculations.
          nullable: true
          type: number
          example: null
        height:
          description: The height of the Product Variant. May be used in shipping rate calculations.
          nullable: true
          type: number
          example: null
        width:
          description: The width of the Product Variant. May be used in shipping rate calculations.
          nullable: true
          type: number
          example: null
        hs_code:
          description: The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.
          nullable: true
          type: string
          example: null
        origin_country:
          description: The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers.
          nullable: true
          type: string
          example: null
        mid_code:
          description: The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.
          nullable: true
          type: string
          example: null
        material:
          description: The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers.
          nullable: true
          type: string
          example: null
        collection_id:
          description: The ID of the product collection that the product belongs to.
          nullable: true
          type: string
          example: pcol_01F0YESBFAZ0DV6V831JXWH0BG
        collection:
          description: The details of the product collection that the product belongs to.
          x-expandable: collection
          nullable: true
          $ref: '#/components/schemas/ProductCollection'
        type_id:
          description: The ID of the product type that the product belongs to.
          nullable: true
          type: string
          example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A
        type:
          description: The details of the product type that the product belongs to.
          x-expandable: type
          nullable: true
          $ref: '#/components/schemas/ProductType'
        tags:
          description: The details of the product tags used in this product.
          type: array
          x-expandable: type
          items:
            $ref: '#/components/schemas/ProductTag'
        discountable:
          description: Whether the Product can be discounted. Discounts will not apply to Line Items of this Product when this flag is set to `false`.
          type: boolean
          default: true
        external_id:
          description: The external ID of the product
          nullable: true
          type: string
          example: null
        sales_channels:
          description: The details of the sales channels this product is available in.
          type: array
          x-expandable: sales_channels
          items:
            $ref: '#/components/schemas/SalesChannel'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ProductCategory:
      title: Product Category
      description: A product category can be used to categorize products into a hierarchy of categories.
      x-resourceId: ProductCategory
      x-featureFlag: product_categories
      type: object
      required:
        - category_children
        - created_at
        - handle
        - id
        - is_active
        - is_internal
        - metadata
        - mpath
        - name
        - parent_category_id
        - updated_at
      properties:
        id:
          description: The product category's ID
          type: string
          example: pcat_01G2SG30J8C85S4A5CHM2S1NS2
        name:
          description: The product category's name
          type: string
          example: Regular Fit
        description:
          description: The product category's description.
          type: string
          default: ''
        handle:
          description: A unique string that identifies the Product Category - can for example be used in slug structures.
          type: string
          example: regular-fit
        mpath:
          description: A string for Materialized Paths - used for finding ancestors and descendents
          nullable: true
          type: string
          example: pcat_id1.pcat_id2.pcat_id3
        is_internal:
          type: boolean
          description: A flag to make product category an internal category for admins
          default: false
        is_active:
          type: boolean
          description: A flag to make product category visible/hidden in the store front
          default: false
        rank:
          type: integer
          description: An integer that depicts the rank of category in a tree node
          default: 0
        category_children:
          description: The details of the category's children.
          type: array
          x-expandable: category_children
          items:
            type: object
        parent_category_id:
          description: The ID of the parent category.
          nullable: true
          type: string
          default: null
        parent_category:
          description: The details of the parent of this category.
          x-expandable: parent_category
          nullable: true
          type: object
        products:
          description: The details of the products that belong to this category.
          type: array
          x-expandable: products
          items:
            type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ProductCollection:
      title: Product Collection
      description: A Product Collection allows grouping together products for promotional purposes. For example, an admin can create a Summer collection, add products to it, and showcase it on the storefront.
      type: object
      required:
        - created_at
        - deleted_at
        - handle
        - id
        - metadata
        - title
        - updated_at
      properties:
        id:
          description: The product collection's ID
          type: string
          example: pcol_01F0YESBFAZ0DV6V831JXWH0BG
        title:
          description: The title that the Product Collection is identified by.
          type: string
          example: Summer Collection
        handle:
          description: A unique string that identifies the Product Collection - can for example be used in slug structures.
          nullable: true
          type: string
          example: summer-collection
        products:
          description: The details of the products that belong to this product collection.
          type: array
          x-expandable: products
          x-ignore: true
          items:
            type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ProductOption:
      title: Product Option
      description: A Product Option defines properties that may vary between different variants of a Product. Common Product Options are "Size" and "Color". Admins are free to create any product options.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - metadata
        - product_id
        - title
        - updated_at
      properties:
        id:
          description: The product option's ID
          type: string
          example: opt_01F0YESHQBZVKCEXJ24BS6PCX3
        title:
          description: The title that the Product Option is defined by (e.g. `Size`).
          type: string
          example: Size
        values:
          description: The details of the values of the product option.
          type: array
          x-expandable: values
          items:
            $ref: '#/components/schemas/ProductOptionValue'
        product_id:
          description: The ID of the product that this product option belongs to.
          type: string
          example: prod_01G1G5V2MBA328390B5AXJ610F
        product:
          description: The details of the product that this product option belongs to.
          x-expandable: product
          nullable: true
          type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ProductOptionValue:
      title: Product Option Value
      description: An option value is one of the possible values of a Product Option. Product Variants specify a unique combination of product option values.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - metadata
        - option_id
        - updated_at
        - value
        - variant_id
      properties:
        id:
          description: The product option value's ID
          type: string
          example: optval_01F0YESHR7S6ECD03RF6W12DSJ
        value:
          description: The value that the Product Variant has defined for the specific Product Option (e.g. if the Product Option is "Size" this value could be `Small`, `Medium` or `Large`).
          type: string
          example: large
        option_id:
          description: The ID of the Product Option that the Product Option Value belongs to.
          type: string
          example: opt_01F0YESHQBZVKCEXJ24BS6PCX3
        option:
          description: The details of the product option that the Product Option Value belongs to.
          x-expandable: option
          nullable: true
          type: object
        variant_id:
          description: The ID of the product variant that uses this product option value.
          type: string
          example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6
        variant:
          description: The details of the product variant that uses this product option value.
          x-expandable: variant
          nullable: true
          type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ProductTag:
      title: Product Tag
      description: A Product Tag can be added to Products for easy filtering and grouping.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - metadata
        - updated_at
        - value
      properties:
        id:
          description: The product tag's ID
          type: string
          example: ptag_01G8K2MTMG9168F2B70S1TAVK3
        value:
          description: The value that the Product Tag represents
          type: string
          example: Pants
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ProductTaxRate:
      title: Product Tax Rate
      description: This represents the association between a tax rate and a product to indicate that the product is taxed in a way different than the default.
      type: object
      required:
        - created_at
        - metadata
        - product_id
        - rate_id
        - updated_at
      properties:
        product_id:
          description: The ID of the Product
          type: string
          example: prod_01G1G5V2MBA328390B5AXJ610F
        product:
          description: The details of the product.
          x-expandable: product
          nullable: true
          $ref: '#/components/schemas/Product'
        rate_id:
          description: The ID of the Tax Rate
          type: string
          example: txr_01G8XDBAWKBHHJRKH0AV02KXBR
        tax_rate:
          description: The details of the tax rate.
          x-expandable: tax_rate
          nullable: true
          $ref: '#/components/schemas/TaxRate'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ProductType:
      title: Product Type
      description: A Product Type can be added to Products for filtering and reporting purposes.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - metadata
        - updated_at
        - value
      properties:
        id:
          description: The product type's ID
          type: string
          example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A
        value:
          description: The value that the Product Type represents.
          type: string
          example: Clothing
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ProductTypeTaxRate:
      title: Product Type Tax Rate
      description: This represents the association between a tax rate and a product type to indicate that the product type is taxed in a different way than the default.
      type: object
      required:
        - created_at
        - metadata
        - product_type_id
        - rate_id
        - updated_at
      properties:
        product_type_id:
          description: The ID of the Product type
          type: string
          example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A
        product_type:
          description: The details of the product type.
          x-expandable: product_type
          nullable: true
          $ref: '#/components/schemas/ProductType'
        rate_id:
          description: The id of the Tax Rate
          type: string
          example: txr_01G8XDBAWKBHHJRKH0AV02KXBR
        tax_rate:
          description: The details of the tax rate.
          x-expandable: tax_rate
          nullable: true
          $ref: '#/components/schemas/TaxRate'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ProductVariant:
      title: Product Variant
      description: A Product Variant represents a Product with a specific set of Product Option configurations. The maximum number of Product Variants that a Product can have is given by the number of available Product Option combinations. A product must at least have one product variant.
      type: object
      required:
        - allow_backorder
        - barcode
        - created_at
        - deleted_at
        - ean
        - height
        - hs_code
        - id
        - inventory_quantity
        - length
        - manage_inventory
        - material
        - metadata
        - mid_code
        - origin_country
        - product_id
        - sku
        - title
        - upc
        - updated_at
        - weight
        - width
      properties:
        id:
          description: The product variant's ID
          type: string
          example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6
        title:
          description: A title that can be displayed for easy identification of the Product Variant.
          type: string
          example: Small
        product_id:
          description: The ID of the product that the product variant belongs to.
          type: string
          example: prod_01G1G5V2MBA328390B5AXJ610F
        product:
          description: The details of the product that the product variant belongs to.
          x-expandable: product
          nullable: true
          type: object
        prices:
          description: The details of the prices of the Product Variant, each represented as a Money Amount. Each Money Amount represents a price in a given currency or a specific Region.
          type: array
          x-expandable: prices
          items:
            $ref: '#/components/schemas/MoneyAmount'
        sku:
          description: The unique stock keeping unit used to identify the Product Variant. This will usually be a unique identifer for the item that is to be shipped, and can be referenced across multiple systems.
          nullable: true
          type: string
          example: shirt-123
        barcode:
          description: A generic field for a GTIN number that can be used to identify the Product Variant.
          nullable: true
          type: string
          example: null
        ean:
          description: An EAN barcode number that can be used to identify the Product Variant.
          nullable: true
          type: string
          example: null
        upc:
          description: A UPC barcode number that can be used to identify the Product Variant.
          nullable: true
          type: string
          example: null
        variant_rank:
          description: The ranking of this variant
          nullable: true
          type: number
          default: 0
        inventory_quantity:
          description: The current quantity of the item that is stocked.
          type: integer
          example: 100
        allow_backorder:
          description: Whether the Product Variant should be purchasable when `inventory_quantity` is 0.
          type: boolean
          default: false
        manage_inventory:
          description: Whether Medusa should manage inventory for the Product Variant.
          type: boolean
          default: true
        hs_code:
          description: The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.
          nullable: true
          type: string
          example: null
        origin_country:
          description: The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers.
          nullable: true
          type: string
          example: null
        mid_code:
          description: The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.
          nullable: true
          type: string
          example: null
        material:
          description: The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers.
          nullable: true
          type: string
          example: null
        weight:
          description: The weight of the Product Variant. May be used in shipping rate calculations.
          nullable: true
          type: number
          example: null
        length:
          description: The length of the Product Variant. May be used in shipping rate calculations.
          nullable: true
          type: number
          example: null
        height:
          description: The height of the Product Variant. May be used in shipping rate calculations.
          nullable: true
          type: number
          example: null
        width:
          description: The width of the Product Variant. May be used in shipping rate calculations.
          nullable: true
          type: number
          example: null
        options:
          description: The details of the product options that this product variant defines values for.
          type: array
          x-expandable: options
          items:
            $ref: '#/components/schemas/ProductOptionValue'
        inventory_items:
          description: The details inventory items of the product variant.
          type: array
          x-expandable: inventory_items
          items:
            $ref: '#/components/schemas/ProductVariantInventoryItem'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
        purchasable:
          description: |
            Only used with the inventory modules.
            A boolean value indicating whether the Product Variant is purchasable.
            A variant is purchasable if:
              - inventory is not managed
              - it has no inventory items
              - it is in stock
              - it is backorderable.
          type: boolean
    ProductVariantInventoryItem:
      title: Product Variant Inventory Item
      description: A Product Variant Inventory Item links variants with inventory items and denotes the required quantity of the variant.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - inventory_item_id
        - required_quantity
        - updated_at
        - variant_id
      properties:
        id:
          description: The product variant inventory item's ID
          type: string
          example: pvitem_01G8X9A7ESKAJXG2H0E6F1MW7A
        inventory_item_id:
          description: The id of the inventory item
          type: string
        variant_id:
          description: The id of the variant.
          type: string
        variant:
          description: The details of the product variant.
          x-expandable: variant
          nullable: true
          type: object
        required_quantity:
          description: The quantity of an inventory item required for the variant.
          type: integer
          default: 1
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
    PublishableApiKey:
      title: Publishable API key
      description: A Publishable API key defines scopes that resources are available in. Then, it can be used in request to infer the resources without having to directly pass them. For example, a publishable API key can be associated with one or more sales channels. Then, when the publishable API key is passed in the header of a request, it is inferred what sales channel is being used without having to pass the sales channel as a query or body parameter of the request. Publishable API keys can only be used with sales channels, at the moment.
      type: object
      required:
        - created_at
        - created_by
        - id
        - revoked_by
        - revoked_at
        - title
        - updated_at
      properties:
        id:
          description: The key's ID
          type: string
          example: pk_01G1G5V27GYX4QXNARRQCW1N8T
        created_by:
          description: The unique identifier of the user that created the key.
          nullable: true
          type: string
          example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V
        revoked_by:
          description: The unique identifier of the user that revoked the key.
          nullable: true
          type: string
          example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V
        revoked_at:
          description: The date with timezone at which the key was revoked.
          nullable: true
          type: string
          format: date-time
        title:
          description: The key's title.
          type: string
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
    PublishableApiKeySalesChannel:
      title: Publishable API Key Sales Channel
      description: This represents the association between the Publishable API keys and Sales Channels
      type: object
      required:
        - publishable_key_id
        - sales_channel_id
        - created_at
        - updated_at
        - deleted_at
      properties:
        id:
          description: The relation's ID
          type: string
          example: pksc_01G8X9A7ESKAJXG2H0E6F1MW7A
        sales_channel_id:
          description: The sales channel's ID
          type: string
          example: sc_01G1G5V21KADXNGH29BJMAJ4B4
        publishable_key_id:
          description: The publishable API key's ID
          type: string
          example: pak_01G1G5V21KADXNGH29BJMAJ4B4
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
    Refund:
      title: Refund
      description: A refund represents an amount of money transfered back to the customer for a given reason. Refunds may occur in relation to Returns, Swaps and Claims, but can also be initiated by an admin for an order.
      type: object
      required:
        - amount
        - created_at
        - id
        - idempotency_key
        - metadata
        - note
        - order_id
        - payment_id
        - reason
        - updated_at
      properties:
        id:
          description: The refund's ID
          type: string
          example: ref_01G1G5V27GYX4QXNARRQCW1N8T
        order_id:
          description: The ID of the order this refund was created for.
          nullable: true
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order this refund was created for.
          x-expandable: order
          nullable: true
          type: object
        payment_id:
          description: The payment's ID, if available.
          nullable: true
          type: string
          example: pay_01G8ZCC5W42ZNY842124G7P5R9
        payment:
          description: The details of the payment associated with the refund.
          x-expandable: payment
          nullable: true
          type: object
        amount:
          description: The amount that has be refunded to the Customer.
          type: integer
          example: 1000
        note:
          description: An optional note explaining why the amount was refunded.
          nullable: true
          type: string
          example: I didn't like it
        reason:
          description: The reason given for the Refund, will automatically be set when processed as part of a Swap, Claim or Return.
          type: string
          enum:
            - discount
            - return
            - swap
            - claim
            - other
          example: return
        idempotency_key:
          description: Randomly generated key used to continue the completion of the refund in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    Region:
      title: Region
      description: A region holds settings specific to a geographical location, including the currency, tax rates, and fulfillment and payment providers. A Region can consist of multiple countries to accomodate common shopping settings across countries.
      type: object
      required:
        - automatic_taxes
        - created_at
        - currency_code
        - deleted_at
        - gift_cards_taxable
        - id
        - metadata
        - name
        - tax_code
        - tax_provider_id
        - tax_rate
        - updated_at
      properties:
        id:
          description: The region's ID
          type: string
          example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G
        name:
          description: The name of the region as displayed to the customer. If the Region only has one country it is recommended to write the country name.
          type: string
          example: EU
        currency_code:
          description: The three character currency code used in the region.
          type: string
          example: usd
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
            description: See a list of codes.
        currency:
          description: The details of the currency used in the region.
          x-expandable: currency
          nullable: true
          $ref: '#/components/schemas/Currency'
        tax_rate:
          description: The tax rate that should be charged on purchases in the Region.
          type: number
          example: 0
        tax_rates:
          description: The details of the tax rates used in the region, aside from the default rate.
          type: array
          x-expandable: tax_rates
          items:
            $ref: '#/components/schemas/TaxRate'
        tax_code:
          description: The tax code used on purchases in the Region. This may be used by other systems for accounting purposes.
          nullable: true
          type: string
          example: null
        gift_cards_taxable:
          description: Whether the gift cards are taxable or not in this region.
          type: boolean
          default: true
        automatic_taxes:
          description: Whether taxes should be automated in this region.
          type: boolean
          default: true
        countries:
          description: The details of the countries included in this region.
          type: array
          x-expandable: countries
          items:
            $ref: '#/components/schemas/Country'
        tax_provider_id:
          description: The ID of the tax provider used in this region
          nullable: true
          type: string
          example: null
        tax_provider:
          description: The details of the tax provider used in the region.
          x-expandable: tax_provider
          nullable: true
          $ref: '#/components/schemas/TaxProvider'
        payment_providers:
          description: The details of the payment providers that can be used to process payments in the region.
          type: array
          x-expandable: payment_providers
          items:
            $ref: '#/components/schemas/PaymentProvider'
        fulfillment_providers:
          description: The details of the fulfillment providers that can be used to fulfill items of orders and similar resources in the region.
          type: array
          x-expandable: fulfillment_providers
          items:
            $ref: '#/components/schemas/FulfillmentProvider'
        includes_tax:
          description: Whether the prices for the region include tax
          type: boolean
          x-featureFlag: tax_inclusive_pricing
          default: false
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ReservationItemDTO:
      title: Reservation item
      description: Represents a reservation of an inventory item at a stock location
      type: object
      required:
        - id
        - location_id
        - inventory_item_id
        - quantity
      properties:
        id:
          description: The id of the reservation item
          type: string
        location_id:
          description: The id of the location of the reservation
          type: string
        inventory_item_id:
          description: The id of the inventory item the reservation relates to
          type: string
        description:
          description: Description of the reservation item
          type: string
        created_by:
          description: UserId of user who created the reservation item
          type: string
        quantity:
          description: The id of the reservation item
          type: number
        metadata:
          type: object
          description: An optional key-value map with additional details
          example:
            car: white
        created_at:
          type: string
          description: The date with timezone at which the resource was created.
          format: date-time
        updated_at:
          type: string
          description: The date with timezone at which the resource was updated.
          format: date-time
        deleted_at:
          type: string
          description: The date with timezone at which the resource was deleted.
          format: date-time
    Return:
      title: Return
      description: A Return holds information about Line Items that a Customer wishes to send back, along with how the items will be returned. Returns can also be used as part of a Swap or a Claim.
      type: object
      required:
        - claim_order_id
        - created_at
        - id
        - idempotency_key
        - location_id
        - metadata
        - no_notification
        - order_id
        - received_at
        - refund_amount
        - shipping_data
        - status
        - swap_id
        - updated_at
      properties:
        id:
          description: The return's ID
          type: string
          example: ret_01F0YET7XPCMF8RZ0Y151NZV2V
        status:
          description: Status of the Return.
          type: string
          enum:
            - requested
            - received
            - requires_action
            - canceled
          default: requested
        items:
          description: The details of the items that the customer is returning.
          type: array
          x-expandable: items
          items:
            $ref: '#/components/schemas/ReturnItem'
        swap_id:
          description: The ID of the swap that the return may belong to.
          nullable: true
          type: string
          example: null
        swap:
          description: The details of the swap that the return may belong to.
          x-expandable: swap
          nullable: true
          type: object
        claim_order_id:
          description: The ID of the claim that the return may belong to.
          nullable: true
          type: string
          example: null
        claim_order:
          description: The details of the claim that the return may belong to.
          x-expandable: claim_order
          nullable: true
          type: object
        order_id:
          description: The ID of the order that the return was created for.
          nullable: true
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order that the return was created for.
          x-expandable: order
          nullable: true
          type: object
        shipping_method:
          description: The details of the Shipping Method that will be used to send the Return back. Can be null if the Customer will handle the return shipment themselves.
          x-expandable: shipping_method
          nullable: true
          $ref: '#/components/schemas/ShippingMethod'
        shipping_data:
          description: Data about the return shipment as provided by the Fulfilment Provider that handles the return shipment.
          nullable: true
          type: object
          example: {}
        location_id:
          description: The ID of the stock location the return will be added back.
          nullable: true
          type: string
          example: sloc_01G8TJSYT9M6AVS5N4EMNFS1EK
        refund_amount:
          description: The amount that should be refunded as a result of the return.
          type: integer
          example: 1000
        no_notification:
          description: When set to true, no notification will be sent related to this return.
          nullable: true
          type: boolean
          example: false
        idempotency_key:
          description: Randomly generated key used to continue the completion of the return in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        received_at:
          description: The date with timezone at which the return was received.
          nullable: true
          type: string
          format: date-time
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ReturnItem:
      title: Return Item
      description: A return item represents a line item in an order that is to be returned. It includes details related to the return and the reason behind it.
      type: object
      required:
        - is_requested
        - item_id
        - metadata
        - note
        - quantity
        - reason_id
        - received_quantity
        - requested_quantity
        - return_id
      properties:
        return_id:
          description: The ID of the Return that the Return Item belongs to.
          type: string
          example: ret_01F0YET7XPCMF8RZ0Y151NZV2V
        item_id:
          description: The ID of the Line Item that the Return Item references.
          type: string
          example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN
        return_order:
          description: Details of the Return that the Return Item belongs to.
          x-expandable: return_order
          nullable: true
          type: object
        item:
          description: The details of the line item in the original order to be returned.
          x-expandable: item
          nullable: true
          $ref: '#/components/schemas/LineItem'
        quantity:
          description: The quantity of the Line Item to be returned.
          type: integer
          example: 1
        is_requested:
          description: Whether the Return Item was requested initially or received unexpectedly in the warehouse.
          type: boolean
          default: true
        requested_quantity:
          description: The quantity that was originally requested to be returned.
          nullable: true
          type: integer
          example: 1
        received_quantity:
          description: The quantity that was received in the warehouse.
          nullable: true
          type: integer
          example: 1
        reason_id:
          description: The ID of the reason for returning the item.
          nullable: true
          type: string
          example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ
        reason:
          description: The details of the reason for returning the item.
          x-expandable: reason
          nullable: true
          $ref: '#/components/schemas/ReturnReason'
        note:
          description: An optional note with additional details about the Return.
          nullable: true
          type: string
          example: I didn't like it.
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ReturnReason:
      title: Return Reason
      description: A Return Reason is a value defined by an admin. It can be used on Return Items in order to indicate why a Line Item was returned.
      type: object
      required:
        - created_at
        - deleted_at
        - description
        - id
        - label
        - metadata
        - parent_return_reason_id
        - updated_at
        - value
      properties:
        id:
          description: The return reason's ID
          type: string
          example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ
        value:
          description: The value to identify the reason by.
          type: string
          example: damaged
        label:
          description: A text that can be displayed to the Customer as a reason.
          type: string
          example: Damaged goods
        description:
          description: A description of the Reason.
          nullable: true
          type: string
          example: Items that are damaged
        parent_return_reason_id:
          description: The ID of the parent reason.
          nullable: true
          type: string
          example: null
        parent_return_reason:
          description: The details of the parent reason.
          x-expandable: parent_return_reason
          nullable: true
          type: object
        return_reason_children:
          description: The details of the child reasons.
          x-expandable: return_reason_children
          type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    SalesChannel:
      title: Sales Channel
      description: A Sales Channel is a method a business offers its products for purchase for the customers. For example, a Webshop can be a sales channel, and a mobile app can be another.
      type: object
      required:
        - created_at
        - deleted_at
        - description
        - id
        - is_disabled
        - name
        - updated_at
      properties:
        id:
          description: The sales channel's ID
          type: string
          example: sc_01G8X9A7ESKAJXG2H0E6F1MW7A
        name:
          description: The name of the sales channel.
          type: string
          example: Market
        description:
          description: The description of the sales channel.
          nullable: true
          type: string
          example: Multi-vendor market
        is_disabled:
          description: Specify if the sales channel is enabled or disabled.
          type: boolean
          default: false
        locations:
          description: The details of the stock locations related to the sales channel.
          type: array
          x-expandable: locations
          items:
            $ref: '#/components/schemas/SalesChannelLocation'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
        carts:
          description: The associated carts.
          type: array
          nullable: true
          x-expandable: carts
          x-featureFlag: medusa_v2
          items:
            type: object
        orders:
          description: The associated orders.
          type: array
          nullable: true
          x-expandable: orders
          x-featureFlag: medusa_v2
          items:
            type: object
        publishableKeys:
          description: The associated publishable API keys.
          type: array
          nullable: true
          x-expandable: publishableKeys
          items:
            type: object
    SalesChannelLocation:
      title: Sales Channel Stock Location
      description: This represents the association between a sales channel and a stock locations.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - location_id
        - sales_channel_id
        - updated_at
      properties:
        id:
          description: The Sales Channel Stock Location's ID
          type: string
          example: scloc_01G8X9A7ESKAJXG2H0E6F1MW7A
        sales_channel_id:
          description: The ID of the Sales Channel
          type: string
          example: sc_01G8X9A7ESKAJXG2H0E6F1MW7A
        location_id:
          description: The ID of the Location Stock.
          type: string
        sales_channel:
          description: The details of the sales channel the location is associated with.
          x-expandable: sales_channel
          nullable: true
          type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
    ShippingMethod:
      title: Shipping Method
      description: A Shipping Method represents a way in which an Order or Return can be shipped. Shipping Methods are created from a Shipping Option, but may contain additional details that can be necessary for the Fulfillment Provider to handle the shipment. If the shipping method is created for a return, it may be associated with a claim or a swap that the return is part of.
      type: object
      required:
        - cart_id
        - claim_order_id
        - data
        - id
        - order_id
        - price
        - return_id
        - shipping_option_id
        - swap_id
      properties:
        id:
          description: The shipping method's ID
          type: string
          example: sm_01F0YET7DR2E7CYVSDHM593QG2
        shipping_option_id:
          description: The ID of the Shipping Option that the Shipping Method is built from.
          type: string
          example: so_01G1G5V27GYX4QXNARRQCW1N8T
        order_id:
          description: The ID of the order that the shipping method is used in.
          nullable: true
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order that the shipping method is used in.
          x-expandable: order
          nullable: true
          type: object
        claim_order_id:
          description: The ID of the claim that the shipping method is used in.
          nullable: true
          type: string
          example: null
        claim_order:
          description: The details of the claim that the shipping method is used in.
          x-expandable: claim_order
          nullable: true
          type: object
        cart_id:
          description: The ID of the cart that the shipping method is used in.
          nullable: true
          type: string
          example: cart_01G8ZH853Y6TFXWPG5EYE81X63
        cart:
          description: The details of the cart that the shipping method is used in.
          x-expandable: cart
          nullable: true
          type: object
        swap_id:
          description: The ID of the swap that the shipping method is used in.
          nullable: true
          type: string
          example: null
        swap:
          description: The details of the swap that the shipping method is used in.
          x-expandable: swap
          nullable: true
          type: object
        return_id:
          description: The ID of the return that the shipping method is used in.
          nullable: true
          type: string
          example: null
        return_order:
          description: The details of the return that the shipping method is used in.
          x-expandable: return_order
          nullable: true
          type: object
        shipping_option:
          description: The details of the shipping option the method was created from.
          x-expandable: shipping_option
          nullable: true
          $ref: '#/components/schemas/ShippingOption'
        tax_lines:
          description: The details of the tax lines applied on the shipping method.
          type: array
          x-expandable: tax_lines
          items:
            $ref: '#/components/schemas/ShippingMethodTaxLine'
        price:
          description: The amount to charge for the Shipping Method. The currency of the price is defined by the Region that the Order that the Shipping Method belongs to is a part of.
          type: integer
          example: 200
        data:
          description: Additional data that the Fulfillment Provider needs to fulfill the shipment. This is used in combination with the Shipping Options data, and may contain information such as a drop point id.
          type: object
          example: {}
        includes_tax:
          description: Whether the shipping method price include tax
          type: boolean
          x-featureFlag: tax_inclusive_pricing
          default: false
        subtotal:
          description: The subtotal of the shipping
          type: integer
          example: 8000
        total:
          description: The total amount of the shipping
          type: integer
          example: 8200
        tax_total:
          description: The total of tax
          type: integer
          example: 0
    ShippingMethodTaxLine:
      title: Shipping Method Tax Line
      description: A Shipping Method Tax Line represents the taxes applied on a shipping method in a cart.
      type: object
      required:
        - code
        - created_at
        - id
        - shipping_method_id
        - metadata
        - name
        - rate
        - updated_at
      properties:
        id:
          description: The line item tax line's ID
          type: string
          example: smtl_01G1G5V2DRX1SK6NQQ8VVX4HQ8
        code:
          description: A code to identify the tax type by
          nullable: true
          type: string
          example: tax01
        name:
          description: A human friendly name for the tax
          type: string
          example: Tax Example
        rate:
          description: The numeric rate to charge tax by
          type: number
          example: 10
        shipping_method_id:
          description: The ID of the line item
          type: string
          example: sm_01F0YET7DR2E7CYVSDHM593QG2
        shipping_method:
          description: The details of the associated shipping method.
          x-expandable: shipping_method
          nullable: true
          type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ShippingOption:
      title: Shipping Option
      description: A Shipping Option represents a way in which an Order or Return can be shipped. Shipping Options have an associated Fulfillment Provider that will be used when the fulfillment of an Order is initiated. Shipping Options themselves cannot be added to Carts, but serve as a template for Shipping Methods. This distinction makes it possible to customize individual Shipping Methods with additional information.
      type: object
      required:
        - admin_only
        - amount
        - created_at
        - data
        - deleted_at
        - id
        - is_return
        - metadata
        - name
        - price_type
        - profile_id
        - provider_id
        - region_id
        - updated_at
      properties:
        id:
          description: The shipping option's ID
          type: string
          example: so_01G1G5V27GYX4QXNARRQCW1N8T
        name:
          description: The name given to the Shipping Option - this may be displayed to the Customer.
          type: string
          example: PostFake Standard
        region_id:
          description: The ID of the region this shipping option can be used in.
          type: string
          example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G
        region:
          description: The details of the region this shipping option can be used in.
          x-expandable: region
          nullable: true
          type: object
        profile_id:
          description: The ID of the Shipping Profile that the shipping option belongs to.
          type: string
          example: sp_01G1G5V239ENSZ5MV4JAR737BM
        profile:
          description: The details of the shipping profile that the shipping option belongs to.
          x-expandable: profile
          nullable: true
          $ref: '#/components/schemas/ShippingProfile'
        provider_id:
          description: The ID of the fulfillment provider that will be used to later to process the shipping method created from this shipping option and its fulfillments.
          type: string
          example: manual
        provider:
          description: The details of the fulfillment provider that will be used to later to process the shipping method created from this shipping option and its fulfillments.
          x-expandable: provider
          nullable: true
          $ref: '#/components/schemas/FulfillmentProvider'
        price_type:
          description: The type of pricing calculation that is used when creatin Shipping Methods from the Shipping Option. Can be `flat_rate` for fixed prices or `calculated` if the Fulfillment Provider can provide price calulations.
          type: string
          enum:
            - flat_rate
            - calculated
          example: flat_rate
        amount:
          description: The amount to charge for shipping when the Shipping Option price type is `flat_rate`.
          nullable: true
          type: integer
          example: 200
        is_return:
          description: Flag to indicate if the Shipping Option can be used for Return shipments.
          type: boolean
          default: false
        admin_only:
          description: Flag to indicate if the Shipping Option usage is restricted to admin users.
          type: boolean
          default: false
        requirements:
          description: The details of the requirements that must be satisfied for the Shipping Option to be available for usage in a Cart.
          type: array
          x-expandable: requirements
          items:
            $ref: '#/components/schemas/ShippingOptionRequirement'
        data:
          description: The data needed for the Fulfillment Provider to identify the Shipping Option.
          type: object
          example: {}
        includes_tax:
          description: Whether the shipping option price include tax
          type: boolean
          x-featureFlag: tax_inclusive_pricing
          default: false
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ShippingOptionRequirement:
      title: Shipping Option Requirement
      description: A shipping option requirement defines conditions that a Cart must satisfy for the Shipping Option to be available for usage in the Cart.
      type: object
      required:
        - amount
        - deleted_at
        - id
        - shipping_option_id
        - type
      properties:
        id:
          description: The shipping option requirement's ID
          type: string
          example: sor_01G1G5V29AB4CTNDRFSRWSRKWD
        shipping_option_id:
          description: The ID of the shipping option that the requirements belong to.
          type: string
          example: so_01G1G5V27GYX4QXNARRQCW1N8T
        shipping_option:
          description: The details of the shipping option that the requirements belong to.
          x-expandable: shipping_option
          nullable: true
          type: object
        type:
          description: The type of the requirement, this defines how the value will be compared to the Cart's total. `min_subtotal` requirements define the minimum subtotal that is needed for the Shipping Option to be available, while the `max_subtotal` defines the maximum subtotal that the Cart can have for the Shipping Option to be available.
          type: string
          enum:
            - min_subtotal
            - max_subtotal
          example: min_subtotal
        amount:
          description: The amount to compare the Cart subtotal to.
          type: integer
          example: 100
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
    ShippingProfile:
      title: Shipping Profile
      description: A Shipping Profile has a set of defined Shipping Options that can be used to fulfill a given set of Products. For example, gift cards are shipped differently than physical products, so a shipping profile with the type `gift_card` groups together the shipping options that can only be used for gift cards.
      type: object
      required:
        - created_at
        - deleted_at
        - id
        - metadata
        - name
        - type
        - updated_at
      properties:
        id:
          description: The shipping profile's ID
          type: string
          example: sp_01G1G5V239ENSZ5MV4JAR737BM
        name:
          description: The name given to the Shipping profile - this may be displayed to the Customer.
          type: string
          example: Default Shipping Profile
        type:
          description: The type of the Shipping Profile, may be `default`, `gift_card` or `custom`.
          type: string
          enum:
            - default
            - gift_card
            - custom
          example: default
        products:
          description: The details of the products that the Shipping Profile defines Shipping Options for. Available if the relation `products` is expanded.
          type: array
          x-expandable: products
          items:
            type: object
        shipping_options:
          description: The details of the shipping options that can be used to create shipping methods for the Products in the Shipping Profile.
          type: array
          x-expandable: shipping_options
          items:
            type: object
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    ShippingTaxRate:
      title: Shipping Tax Rate
      description: This represents the tax rates applied on a shipping option.
      type: object
      required:
        - created_at
        - metadata
        - rate_id
        - shipping_option_id
        - updated_at
      properties:
        shipping_option_id:
          description: The ID of the shipping option.
          type: string
          example: so_01G1G5V27GYX4QXNARRQCW1N8T
        shipping_option:
          description: The details of the shipping option.
          x-expandable: shipping_option
          nullable: true
          $ref: '#/components/schemas/ShippingOption'
        rate_id:
          description: The ID of the associated tax rate.
          type: string
          example: txr_01G8XDBAWKBHHJRKH0AV02KXBR
        tax_rate:
          description: The details of the associated tax rate.
          x-expandable: tax_rate
          nullable: true
          $ref: '#/components/schemas/TaxRate'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    StagedJob:
      title: Staged Job
      description: A staged job resource
      type: object
      required:
        - data
        - event_name
        - id
        - options
      properties:
        id:
          description: The staged job's ID
          type: string
          example: job_01F0YET7BZTARY9MKN1SJ7AAXF
        event_name:
          description: The name of the event
          type: string
          example: order.placed
        data:
          description: Data necessary for the job
          type: object
          example: {}
        option:
          description: The staged job's option
          type: object
          example: {}
    StockLocationAddressDTO:
      title: Stock Location Address
      description: Represents a Stock Location Address
      type: object
      required:
        - address_1
        - country_code
        - created_at
        - updated_at
      properties:
        id:
          type: string
          description: The stock location address' ID
          example: laddr_51G4ZW853Y6TFXWPG5ENJ81X42
        address_1:
          type: string
          description: Stock location address
          example: 35, Jhon Doe Ave
        address_2:
          type: string
          description: Stock location address' complement
          example: apartment 4432
        company:
          type: string
          description: Stock location company' name
          example: Medusa
        city:
          type: string
          description: Stock location address' city
          example: Mexico city
        country_code:
          type: string
          description: Stock location address' country
          example: MX
        phone:
          type: string
          description: Stock location address' phone number
          example: +1 555 61646
        postal_code:
          type: string
          description: Stock location address' postal code
          example: HD3-1G8
        province:
          type: string
          description: Stock location address' province
          example: Sinaloa
        created_at:
          type: string
          description: The date with timezone at which the resource was created.
          format: date-time
        updated_at:
          type: string
          description: The date with timezone at which the resource was updated.
          format: date-time
        deleted_at:
          type: string
          description: The date with timezone at which the resource was deleted.
          format: date-time
        metadata:
          type: object
          description: An optional key-value map with additional details
          example:
            car: white
    StockLocationAddressInput:
      title: Stock Location Address Input
      description: Represents a Stock Location Address Input
      type: object
      required:
        - address_1
        - country_code
      properties:
        address_1:
          type: string
          description: Stock location address
          example: 35, Jhon Doe Ave
        address_2:
          type: string
          description: Stock location address' complement
          example: apartment 4432
        city:
          type: string
          description: Stock location address' city
          example: Mexico city
        country_code:
          type: string
          description: Stock location address' country
          example: MX
        phone:
          type: string
          description: Stock location address' phone number
          example: +1 555 61646
        postal_code:
          type: string
          description: Stock location address' postal code
          example: HD3-1G8
        province:
          type: string
          description: Stock location address' province
          example: Sinaloa
        metadata:
          type: object
          description: An optional key-value map with additional details
          example:
            car: white
    StockLocationDTO:
      title: Stock Location
      description: Represents a Stock Location
      type: object
      required:
        - id
        - name
        - address_id
        - created_at
        - updated_at
      properties:
        id:
          type: string
          description: The stock location's ID
          example: sloc_51G4ZW853Y6TFXWPG5ENJ81X42
        address_id:
          type: string
          description: Stock location address' ID
          example: laddr_05B2ZE853Y6FTXWPW85NJ81A44
        name:
          type: string
          description: The name of the stock location
          example: Main Warehouse
        address:
          description: The Address of the Stock Location
          allOf:
            - $ref: '#/components/schemas/StockLocationAddressDTO'
            - type: object
        metadata:
          type: object
          description: An optional key-value map with additional details
          example:
            car: white
        created_at:
          type: string
          description: The date with timezone at which the resource was created.
          format: date-time
        updated_at:
          type: string
          description: The date with timezone at which the resource was updated.
          format: date-time
        deleted_at:
          type: string
          description: The date with timezone at which the resource was deleted.
          format: date-time
    StockLocationExpandedDTO:
      allOf:
        - $ref: '#/components/schemas/StockLocationDTO'
        - type: object
          properties:
            sales_channels:
              description: The associated sales channels.
              $ref: '#/components/schemas/SalesChannel'
    Store:
      title: Store
      description: A store holds the main settings of the commerce shop. By default, only one store is created and used within the Medusa backend. It holds settings related to the name of the store, available currencies, and more.
      type: object
      required:
        - created_at
        - default_currency_code
        - default_location_id
        - id
        - invite_link_template
        - metadata
        - name
        - payment_link_template
        - swap_link_template
        - updated_at
      properties:
        id:
          description: The store's ID
          type: string
          example: store_01G1G5V21KADXNGH29BJMAJ4B4
        name:
          description: The name of the Store - this may be displayed to the Customer.
          type: string
          example: Medusa Store
          default: Medusa Store
        default_currency_code:
          description: The three character currency code that is the default of the store.
          type: string
          example: usd
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes
            description: See a list of codes.
        default_currency:
          description: The details of the store's default currency.
          x-expandable: default_currency
          default: usd
          nullable: true
          $ref: '#/components/schemas/Currency'
        currencies:
          description: The details of the enabled currencies in the store.
          type: array
          x-expandable: currencies
          items:
            $ref: '#/components/schemas/Currency'
        swap_link_template:
          description: A template to generate Swap links from. Use {{cart_id}} to include the Swap's `cart_id` in the link.
          nullable: true
          type: string
          example: null
        payment_link_template:
          description: A template to generate Payment links from. Use {{cart_id}} to include the payment's `cart_id` in the link.
          nullable: true
          type: string
          example: null
        invite_link_template:
          description: A template to generate Invite links from
          nullable: true
          type: string
          example: null
        default_location_id:
          description: The location ID the store is associated with.
          nullable: true
          type: string
          example: null
        default_sales_channel_id:
          description: The ID of the store's default sales channel.
          nullable: true
          type: string
          example: null
        default_sales_channel:
          description: The details of the store's default sales channel.
          x-expandable: default_sales_channel
          nullable: true
          $ref: '#/components/schemas/SalesChannel'
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    StoreAuthRes:
      type: object
      description: The customer's details.
      x-expanded-relations:
        field: customer
        relations:
          - orders
          - orders.items
          - shipping_addresses
      required:
        - customer
      properties:
        customer:
          description: Customer's details.
          $ref: '#/components/schemas/Customer'
    StoreBearerAuthRes:
      type: object
      description: The access token details.
      properties:
        access_token:
          description: Access token that can be used to send authenticated requests.
          type: string
    StoreCartShippingOptionsListRes:
      type: object
      x-expanded-relations:
        field: shipping_options
        implicit:
          - profile
          - requirements
      required:
        - shipping_options
      properties:
        shipping_options:
          type: array
          description: An array of shipping options details.
          items:
            $ref: '#/components/schemas/PricedShippingOption'
    StoreCartsRes:
      type: object
      description: The cart's details.
      x-expanded-relations:
        field: cart
        relations:
          - billing_address
          - discounts
          - discounts.rule
          - gift_cards
          - items
          - items.adjustments
          - items.variant
          - payment
          - payment_sessions
          - region
          - region.countries
          - region.payment_providers
          - shipping_address
          - shipping_methods
        eager:
          - region.fulfillment_providers
          - region.payment_providers
          - shipping_methods.shipping_option
        implicit:
          - items
          - items.variant
          - items.variant.product
          - items.variant.product.profiles
          - items.tax_lines
          - items.adjustments
          - gift_cards
          - discounts
          - discounts.rule
          - shipping_methods
          - shipping_methods.tax_lines
          - shipping_address
          - region
          - region.tax_rates
        totals:
          - discount_total
          - gift_card_tax_total
          - gift_card_total
          - item_tax_total
          - refundable_amount
          - refunded_total
          - shipping_tax_total
          - shipping_total
          - subtotal
          - tax_total
          - total
          - items.discount_total
          - items.gift_card_total
          - items.original_tax_total
          - items.original_total
          - items.refundable
          - items.subtotal
          - items.tax_total
          - items.total
      required:
        - cart
      properties:
        cart:
          description: Cart details.
          $ref: '#/components/schemas/Cart'
    StoreCollectionsListRes:
      type: object
      description: The list of product collections with pagination fields.
      required:
        - collections
        - count
        - offset
        - limit
      properties:
        collections:
          type: array
          description: An array of product collections details
          items:
            $ref: '#/components/schemas/ProductCollection'
        count:
          type: integer
          description: The total number of items available
        offset:
          type: integer
          description: The number of product collections skipped when retrieving the product collections.
        limit:
          type: integer
          description: The number of items per page
    StoreCollectionsRes:
      type: object
      description: The details of the product collection.
      required:
        - collection
      properties:
        collection:
          description: Product collection details.
          $ref: '#/components/schemas/ProductCollection'
    StoreCompleteCartRes:
      type: object
      description: If the cart is completed successfully, this will have the created order or the swap's details, based on the cart's type. Otherwise, it'll be the cart's details.
      required:
        - type
        - data
      properties:
        type:
          type: string
          description: The type of the data property. If the cart completion fails, type will be `cart` and the data object will be the cart's details. If the cart completion is successful and the cart is used for checkout, type will be `order` and the data object will be the order's details. If the cart completion is successful and the cart is used for swap creation, type will be `swap` and the data object will be the swap's details.
          enum:
            - order
            - cart
            - swap
        data:
          type: object
          description: The data of the result object. Its type depends on the type field.
          oneOf:
            - type: object
              allOf:
                - description: Cart was successfully authorized and order was placed successfully.
                - $ref: '#/components/schemas/Order'
            - type: object
              allOf:
                - description: Cart was successfully authorized but requires further actions.
                - $ref: '#/components/schemas/Cart'
            - type: object
              allOf:
                - description: Cart was used for a swap and it has been completed successfully.
                - $ref: '#/components/schemas/Swap'
    StoreCustomersListOrdersRes:
      type: object
      description: The list of the customer's orders with pagination fields.
      x-expanded-relations:
        field: orders
        relations:
          - customer
          - discounts
          - discounts.rule
          - fulfillments
          - fulfillments.tracking_links
          - items
          - items.variant
          - payments
          - region
          - shipping_address
          - shipping_methods
        eager:
          - region.fulfillment_providers
          - region.payment_providers
          - shipping_methods.shipping_option
        implicit:
          - claims
          - claims.additional_items
          - claims.additional_items.adjustments
          - claims.additional_items.refundable
          - claims.additional_items.tax_lines
          - customer
          - discounts
          - discounts.rule
          - gift_card_transactions
          - gift_card_transactions.gift_card
          - gift_cards
          - items
          - items.adjustments
          - items.refundable
          - items.tax_lines
          - items.variant
          - items.variant.product
          - items.variant.product.profiles
          - refunds
          - region
          - shipping_address
          - shipping_methods
          - shipping_methods.tax_lines
          - swaps
          - swaps.additional_items
          - swaps.additional_items.adjustments
          - swaps.additional_items.refundable
          - swaps.additional_items.tax_lines
        totals:
          - discount_total
          - gift_card_tax_total
          - gift_card_total
          - paid_total
          - refundable_amount
          - refunded_total
          - shipping_total
          - subtotal
          - tax_total
          - total
          - claims.additional_items.discount_total
          - claims.additional_items.gift_card_total
          - claims.additional_items.original_tax_total
          - claims.additional_items.original_total
          - claims.additional_items.refundable
          - claims.additional_items.subtotal
          - claims.additional_items.tax_total
          - claims.additional_items.total
          - items.discount_total
          - items.gift_card_total
          - items.original_tax_total
          - items.original_total
          - items.refundable
          - items.subtotal
          - items.tax_total
          - items.total
          - swaps.additional_items.discount_total
          - swaps.additional_items.gift_card_total
          - swaps.additional_items.original_tax_total
          - swaps.additional_items.original_total
          - swaps.additional_items.refundable
          - swaps.additional_items.subtotal
          - swaps.additional_items.tax_total
          - swaps.additional_items.total
      required:
        - orders
        - count
        - offset
        - limit
      properties:
        orders:
          type: array
          description: An array of orders details.
          items:
            $ref: '#/components/schemas/Order'
        count:
          description: The total number of items available
          type: integer
        offset:
          description: The number of orders skipped when retrieving the orders.
          type: integer
        limit:
          description: The number of items per page
          type: integer
    StoreCustomersListPaymentMethodsRes:
      type: object
      description: The payment method's details.
      required:
        - payment_methods
      properties:
        payment_methods:
          type: array
          description: The details of the saved payment methods.
          items:
            type: object
            required:
              - provider_id
              - data
            properties:
              provider_id:
                description: The ID of the Payment Provider where the payment method is saved.
                type: string
              data:
                description: The data needed for the Payment Provider to use the saved payment method.
                type: object
    StoreCustomersRes:
      type: object
      description: The customer's details.
      x-expanded-relations:
        field: customer
        relations:
          - billing_address
          - shipping_addresses
      required:
        - customer
      properties:
        customer:
          description: Customer details.
          $ref: '#/components/schemas/Customer'
    StoreCustomersResetPasswordRes:
      type: object
      required:
        - customer
      properties:
        customer:
          description: Customer details.
          $ref: '#/components/schemas/Customer'
    StoreGetAuthEmailRes:
      type: object
      description: Details on whether the email exists.
      required:
        - exists
      properties:
        exists:
          description: Whether email exists or not.
          type: boolean
    StoreGetProductCategoriesCategoryRes:
      type: object
      description: The product category's details.
      x-expanded-relations:
        field: product_category
        relations:
          - category_children
          - parent_category
      required:
        - product_category
      properties:
        product_category:
          description: Product category details.
          $ref: '#/components/schemas/ProductCategory'
    StoreGetProductCategoriesRes:
      type: object
      description: The list of product categories with pagination fields.
      x-expanded-relations:
        field: product_categories
        relations:
          - category_children
          - parent_category
      required:
        - product_categories
        - count
        - offset
        - limit
      properties:
        product_categories:
          type: array
          description: An array of product categories details.
          items:
            $ref: '#/components/schemas/ProductCategory'
        count:
          type: integer
          description: The total number of items available
        offset:
          type: integer
          description: The number of product categories skipped when retrieving the product categories.
        limit:
          type: integer
          description: The number of items per page
    StoreGiftCardsRes:
      description: The gift card's details.
      type: object
      required:
        - gift_card
      properties:
        gift_card:
          description: Gift card details.
          $ref: '#/components/schemas/GiftCard'
    StoreOrderEditsRes:
      type: object
      description: The order edit's details.
      x-expanded-relations:
        field: order_edit
        relations:
          - changes
          - changes.line_item
          - changes.line_item.variant
          - changes.original_line_item
          - changes.original_line_item.variant
          - items
          - items.adjustments
          - items.tax_lines
          - items.variant
          - payment_collection
        implicit:
          - items
          - items.tax_lines
          - items.adjustments
          - items.variant
        totals:
          - difference_due
          - discount_total
          - gift_card_tax_total
          - gift_card_total
          - shipping_total
          - subtotal
          - tax_total
          - total
          - items.discount_total
          - items.gift_card_total
          - items.original_tax_total
          - items.original_total
          - items.refundable
          - items.subtotal
          - items.tax_total
          - items.total
      required:
        - order_edit
      properties:
        order_edit:
          description: Order edit details.
          $ref: '#/components/schemas/OrderEdit'
    StoreOrdersRes:
      type: object
      description: The order's details.
      required:
        - order
      x-expanded-relations:
        field: order
        relations:
          - customer
          - discounts
          - discounts.rule
          - fulfillments
          - fulfillments.tracking_links
          - items
          - items.variant
          - payments
          - region
          - shipping_address
          - shipping_methods
        eager:
          - fulfillments.items
          - region.fulfillment_providers
          - region.payment_providers
          - shipping_methods.shipping_option
        implicit:
          - claims
          - claims.additional_items
          - claims.additional_items.adjustments
          - claims.additional_items.refundable
          - claims.additional_items.tax_lines
          - discounts
          - discounts.rule
          - gift_card_transactions
          - gift_card_transactions.gift_card
          - gift_cards
          - items
          - items.adjustments
          - items.refundable
          - items.tax_lines
          - items.variant
          - items.variant.product
          - items.variant.product.profiles
          - refunds
          - region
          - shipping_methods
          - shipping_methods.tax_lines
          - swaps
          - swaps.additional_items
          - swaps.additional_items.adjustments
          - swaps.additional_items.refundable
          - swaps.additional_items.tax_lines
        totals:
          - discount_total
          - gift_card_tax_total
          - gift_card_total
          - paid_total
          - refundable_amount
          - refunded_total
          - shipping_total
          - subtotal
          - tax_total
          - total
          - claims.additional_items.discount_total
          - claims.additional_items.gift_card_total
          - claims.additional_items.original_tax_total
          - claims.additional_items.original_total
          - claims.additional_items.refundable
          - claims.additional_items.subtotal
          - claims.additional_items.tax_total
          - claims.additional_items.total
          - items.discount_total
          - items.gift_card_total
          - items.original_tax_total
          - items.original_total
          - items.refundable
          - items.subtotal
          - items.tax_total
          - items.total
          - swaps.additional_items.discount_total
          - swaps.additional_items.gift_card_total
          - swaps.additional_items.original_tax_total
          - swaps.additional_items.original_total
          - swaps.additional_items.refundable
          - swaps.additional_items.subtotal
          - swaps.additional_items.tax_total
          - swaps.additional_items.total
      properties:
        order:
          description: Order details.
          $ref: '#/components/schemas/Order'
    StorePaymentCollectionSessionsReq:
      type: object
      description: The details of the payment session to manage.
      required:
        - provider_id
      properties:
        provider_id:
          type: string
          description: The ID of the Payment Provider.
    StorePaymentCollectionsRes:
      type: object
      description: The payment collection's details.
      x-expanded-relations:
        field: payment_collection
        relations:
          - payment_sessions
          - region
        eager:
          - region.fulfillment_providers
          - region.payment_providers
      required:
        - payment_collection
      properties:
        payment_collection:
          description: Payment collection's details.
          $ref: '#/components/schemas/PaymentCollection'
    StorePaymentCollectionsSessionRes:
      type: object
      description: The details of the payment session.
      required:
        - payment_session
      properties:
        payment_session:
          description: Payment session's details.
          $ref: '#/components/schemas/PaymentSession'
    StorePostAuthReq:
      type: object
      required:
        - email
        - password
      properties:
        email:
          type: string
          description: The Customer's email.
        password:
          type: string
          description: The Customer's password.
    StorePostCartReq:
      type: object
      description: The details of the cart to be created.
      properties:
        region_id:
          type: string
          description: The ID of the Region to create the Cart in. Setting the cart's region can affect the pricing of the items in the cart as well as the used currency. If this parameter is not provided, the first region in the store is used by default.
        sales_channel_id:
          type: string
          description: The ID of the Sales channel to create the Cart in. The cart's sales channel affects which products can be added to the cart. If a product does not exist in the cart's sales channel, it cannot be added to the cart. If you add a publishable API key in the header of this request and specify a sales channel ID, the specified sales channel must be within the scope of the publishable API key's resources. If you add a publishable API key in the header of this request, you don't specify a sales channel ID, and the publishable API key is associated with one sales channel, that sales channel will be attached to the cart. If no sales channel is passed and no publishable API key header is passed or the publishable API key isn't associated with any sales channel, the cart will not be associated with any sales channel.
        country_code:
          type: string
          description: The two character ISO country code to create the Cart in. Setting this parameter will set the country code of the shipping address.
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
            description: See a list of codes.
        items:
          description: An array of product variants to generate line items from.
          type: array
          items:
            type: object
            required:
              - variant_id
              - quantity
            properties:
              variant_id:
                description: The ID of the Product Variant.
                type: string
              quantity:
                description: The quantity to add into the cart.
                type: integer
        context:
          description: An object to provide context to the Cart. The `context` field is automatically populated with `ip` and `user_agent`
          type: object
          example:
            ip: '::1'
            user_agent: Chrome
    StorePostCartsCartLineItemsItemReq:
      type: object
      description: The details to update of the line item.
      required:
        - quantity
      properties:
        quantity:
          type: number
          description: The quantity of the line item in the cart.
        metadata:
          type: object
          description: An optional key-value map with additional details about the Line Item. If omitted, the metadata will remain unchanged."
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    StorePostCartsCartLineItemsReq:
      type: object
      description: The details of the line item to create.
      required:
        - variant_id
        - quantity
      properties:
        variant_id:
          type: string
          description: The id of the Product Variant to generate the Line Item from.
        quantity:
          type: number
          description: The quantity of the Product Variant to add to the Line Item.
        metadata:
          type: object
          description: An optional key-value map with additional details about the Line Item.
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    StorePostCartsCartPaymentSessionReq:
      type: object
      description: The details of the payment session to set.
      required:
        - provider_id
      properties:
        provider_id:
          type: string
          description: The ID of the Payment Provider.
    StorePostCartsCartPaymentSessionUpdateReq:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          description: The data to update the payment session with.
    StorePostCartsCartReq:
      type: object
      description: The details to update of the cart.
      properties:
        region_id:
          type: string
          description: The ID of the Region to create the Cart in. Setting the cart's region can affect the pricing of the items in the cart as well as the used currency.
        country_code:
          type: string
          description: The 2 character ISO country code to create the Cart in. Setting this parameter will set the country code of the shipping address.
          externalDocs:
            url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
            description: See a list of codes.
        email:
          type: string
          description: An email to be used on the Cart.
          format: email
        sales_channel_id:
          type: string
          description: The ID of the Sales channel to create the Cart in. The cart's sales channel affects which products can be added to the cart. If a product does not exist in the cart's sales channel, it cannot be added to the cart. If you add a publishable API key in the header of this request and specify a sales channel ID, the specified sales channel must be within the scope of the publishable API key's resources.
        billing_address:
          description: The Address to be used for billing purposes.
          anyOf:
            - $ref: '#/components/schemas/AddressPayload'
              description: A full billing address object.
            - type: string
              description: The billing address ID
        shipping_address:
          description: The Address to be used for shipping purposes.
          anyOf:
            - $ref: '#/components/schemas/AddressPayload'
              description: A full shipping address object.
            - type: string
              description: The shipping address ID
        gift_cards:
          description: An array of Gift Card codes to add to the Cart.
          type: array
          items:
            type: object
            required:
              - code
            properties:
              code:
                description: The code of a gift card.
                type: string
        discounts:
          description: An array of Discount codes to add to the Cart.
          type: array
          items:
            type: object
            required:
              - code
            properties:
              code:
                description: The code of the discount.
                type: string
        customer_id:
          description: The ID of the Customer to associate the Cart with.
          type: string
        context:
          description: An object to provide context to the Cart. The `context` field is automatically populated with `ip` and `user_agent`
          type: object
          example:
            ip: '::1'
            user_agent: Chrome
    StorePostCartsCartShippingMethodReq:
      type: object
      description: The details of the shipping method to add to the cart.
      required:
        - option_id
      properties:
        option_id:
          type: string
          description: ID of the shipping option to create the method from.
        data:
          type: object
          description: Used to hold any data that the shipping method may need to process the fulfillment of the order. This depends on the fulfillment provider you're using.
    StorePostCustomersCustomerAcceptClaimReq:
      type: object
      description: The details necessary to grant order access.
      required:
        - token
      properties:
        token:
          description: The claim token generated by previous request to the Claim Order API Route.
          type: string
    StorePostCustomersCustomerAddressesAddressReq:
      anyOf:
        - $ref: '#/components/schemas/AddressPayload'
    StorePostCustomersCustomerAddressesReq:
      type: object
      required:
        - address
      properties:
        address:
          description: The Address to add to the Customer's saved addresses.
          $ref: '#/components/schemas/AddressCreatePayload'
    StorePostCustomersCustomerOrderClaimReq:
      type: object
      description: The details of the orders to claim.
      required:
        - order_ids
      properties:
        order_ids:
          description: The ID of the orders to claim
          type: array
          items:
            type: string
    StorePostCustomersCustomerPasswordTokenReq:
      type: object
      required:
        - email
      properties:
        email:
          description: The customer's email.
          type: string
          format: email
    StorePostCustomersCustomerReq:
      type: object
      description: The details to update of the customer.
      properties:
        first_name:
          description: The customer's first name.
          type: string
        last_name:
          description: The customer's last name.
          type: string
        billing_address:
          description: The address to be used for billing purposes.
          anyOf:
            - $ref: '#/components/schemas/AddressPayload'
              description: The full billing address object
            - type: string
              description: The ID of an existing billing address
        password:
          description: The customer's password.
          type: string
        phone:
          description: The customer's phone number.
          type: string
        email:
          description: The customer's email.
          type: string
        metadata:
          description: Additional custom data about the customer.
          type: object
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    StorePostCustomersReq:
      type: object
      description: The details of the customer to create.
      required:
        - first_name
        - last_name
        - email
        - password
      properties:
        first_name:
          description: The customer's first name.
          type: string
        last_name:
          description: The customer's last name.
          type: string
        email:
          description: The customer's email.
          type: string
          format: email
        password:
          description: The customer's password.
          type: string
          format: password
        phone:
          description: The customer's phone number.
          type: string
    StorePostCustomersResetPasswordReq:
      type: object
      required:
        - email
        - password
        - token
      properties:
        email:
          description: The customer's email.
          type: string
          format: email
        password:
          description: The customer's password.
          type: string
          format: password
        token:
          description: The reset password token
          type: string
    StorePostOrderEditsOrderEditDecline:
      type: object
      description: The details of the order edit's decline.
      properties:
        declined_reason:
          type: string
          description: The reason for declining the Order Edit.
    StorePostPaymentCollectionsBatchSessionsAuthorizeReq:
      type: object
      description: The details of the payment sessions to authorize.
      required:
        - session_ids
      properties:
        session_ids:
          description: List of Payment Session IDs to authorize.
          type: array
          items:
            type: string
    StorePostPaymentCollectionsBatchSessionsReq:
      type: object
      description: The details of the payment sessions to manage.
      required:
        - sessions
      properties:
        sessions:
          description: Payment sessions related to the Payment Collection. Existing sessions that are not added in this array will be deleted.
          type: array
          items:
            type: object
            required:
              - provider_id
              - amount
            properties:
              provider_id:
                type: string
                description: The ID of the Payment Provider.
              amount:
                type: integer
                description: The payment amount
              session_id:
                type: string
                description: The ID of the Payment Session to be updated. If no ID is provided, a new payment session is created.
    StorePostReturnsReq:
      type: object
      description: The details of the return to create.
      required:
        - order_id
        - items
      properties:
        order_id:
          type: string
          description: The ID of the Order to create the return for.
        items:
          description: The items to include in the return.
          type: array
          items:
            type: object
            required:
              - item_id
              - quantity
            properties:
              item_id:
                description: The ID of the line item to return.
                type: string
              quantity:
                description: The quantity to return.
                type: integer
              reason_id:
                description: The ID of the return reason. Return reasons can be retrieved from the List Return Reasons API Route.
                type: string
              note:
                description: A note to add to the item returned.
                type: string
        return_shipping:
          description: The return shipping method used to return the items. If provided, a fulfillment is automatically created for the return.
          type: object
          required:
            - option_id
          properties:
            option_id:
              type: string
              description: The ID of the Shipping Option to create the Shipping Method from.
    StorePostSearchReq:
      type: object
      properties:
        q:
          type: string
          description: The search query.
        offset:
          type: number
          description: The number of products to skip when retrieving the products.
        limit:
          type: number
          description: Limit the number of products returned.
        filter:
          description: Pass filters based on the search service.
    StorePostSearchRes:
      description: The list of search results.
      allOf:
        - type: object
          required:
            - hits
          properties:
            hits:
              description: Array of search results. The format of the items depends on the search engine installed on the Medusa backend.
              type: array
        - type: object
    StorePostSwapsReq:
      type: object
      description: The details of the swap to create.
      required:
        - order_id
        - return_items
        - additional_items
      properties:
        order_id:
          type: string
          description: The ID of the Order to create the Swap for.
        return_items:
          description: The items to include in the Return.
          type: array
          items:
            type: object
            required:
              - item_id
              - quantity
            properties:
              item_id:
                description: The ID of the order's line item to return.
                type: string
              quantity:
                description: The quantity to return.
                type: integer
              reason_id:
                description: The ID of the reason of this return. Return reasons can be retrieved from the List Return Reasons API Route.
                type: string
              note:
                description: The note to add to the item being swapped.
                type: string
        return_shipping_option:
          type: string
          description: The ID of the Shipping Option to create the Shipping Method from.
        additional_items:
          description: The items to exchange the returned items with.
          type: array
          items:
            type: object
            required:
              - variant_id
              - quantity
            properties:
              variant_id:
                description: The ID of the Product Variant.
                type: string
              quantity:
                description: The quantity of the variant.
                type: integer
    StoreProductTagsListRes:
      type: object
      description: The list of product tags with pagination fields.
      required:
        - product_tags
        - count
        - offset
        - limit
      properties:
        product_tags:
          type: array
          description: An array of product tags details.
          items:
            $ref: '#/components/schemas/ProductTag'
        count:
          type: integer
          description: The total number of items available
        offset:
          type: integer
          description: The number of product tags skipped when retrieving the product tags.
        limit:
          type: integer
          description: The number of items per page
    StoreProductTypesListRes:
      type: object
      required:
        - product_types
        - count
        - offset
        - limit
      properties:
        product_types:
          type: array
          description: An array of product types details.
          items:
            $ref: '#/components/schemas/ProductType'
        count:
          type: integer
          description: The total number of items available
        offset:
          type: integer
          description: The number of product types skipped when retrieving the product types.
        limit:
          type: integer
          description: The number of items per page
    StoreProductsListRes:
      type: object
      description: The list of products with pagination fields.
      x-expanded-relations:
        field: products
        relations:
          - collection
          - images
          - options
          - options.values
          - tags
          - type
          - variants
          - variants.options
          - variants.prices
        totals:
          - variants.purchasable
      required:
        - products
        - count
        - offset
        - limit
      properties:
        products:
          type: array
          description: An array of products details.
          items:
            $ref: '#/components/schemas/PricedProduct'
        count:
          type: integer
          description: The total number of items available
        offset:
          type: integer
          description: The number of products skipped when retrieving the products.
        limit:
          type: integer
          description: The number of items per page
    StoreProductsRes:
      type: object
      x-expanded-relations:
        field: product
        relations:
          - collection
          - images
          - options
          - options.values
          - tags
          - type
          - variants
          - variants.options
          - variants.prices
        totals:
          - variants.purchasable
      required:
        - product
      properties:
        product:
          description: Product details.
          $ref: '#/components/schemas/PricedProduct'
    StoreRegionsListRes:
      type: object
      description: The list of regions with pagination fields.
      x-expanded-relations:
        field: regions
        relations:
          - countries
          - payment_providers
          - fulfillment_providers
        eager:
          - payment_providers
          - fulfillment_providers
      required:
        - regions
      properties:
        regions:
          type: array
          description: An array of regions details.
          items:
            $ref: '#/components/schemas/Region'
        count:
          type: integer
          description: The total number of items available
        offset:
          type: integer
          description: The number of regions skipped when retrieving the regions.
        limit:
          type: integer
          description: The number of items per page
    StoreRegionsRes:
      type: object
      description: The region's details.
      x-expanded-relations:
        field: region
        relations:
          - countries
          - payment_providers
          - fulfillment_providers
        eager:
          - payment_providers
          - fulfillment_providers
      required:
        - region
      properties:
        region:
          description: Region details.
          $ref: '#/components/schemas/Region'
    StoreReturnReasonsListRes:
      type: object
      description: The list of return reasons.
      x-expanded-relations:
        field: return_reasons
        relations:
          - parent_return_reason
          - return_reason_children
      required:
        - return_reasons
      properties:
        return_reasons:
          type: array
          description: An array of return reasons details.
          items:
            $ref: '#/components/schemas/ReturnReason'
    StoreReturnReasonsRes:
      type: object
      description: The return reason's details.
      x-expanded-relations:
        field: return_reason
        relations:
          - parent_return_reason
          - return_reason_children
      required:
        - return_reason
      properties:
        return_reason:
          description: Return reason details.
          $ref: '#/components/schemas/ReturnReason'
    StoreReturnsRes:
      type: object
      description: The return's details.
      x-expanded-relations:
        field: return
        relations:
          - items
          - items.reason
        eager:
          - items
      required:
        - return
      properties:
        return:
          description: Return details.
          $ref: '#/components/schemas/Return'
    StoreShippingOptionsListRes:
      type: object
      description: The list of shipping options.
      x-expanded-relations:
        field: shipping_options
        relations:
          - requirements
      required:
        - shipping_options
      properties:
        shipping_options:
          type: array
          description: An array of shipping options details.
          items:
            $ref: '#/components/schemas/PricedShippingOption'
    StoreSwapsRes:
      type: object
      description: The swap's details.
      x-expanded-relations:
        field: swap
        relations:
          - additional_items
          - additional_items.variant
          - cart
          - fulfillments
          - order
          - payment
          - return_order
          - return_order.shipping_method
          - shipping_address
          - shipping_methods
        eager:
          - fulfillments.items
      required:
        - swap
      properties:
        swap:
          description: Swap details.
          $ref: '#/components/schemas/Swap'
    StoreVariantsListRes:
      type: object
      description: The list of product variants.
      x-expanded-relations:
        field: variants
        relations:
          - prices
          - options
          - product
        totals:
          - purchasable
      required:
        - variants
      properties:
        variants:
          type: array
          description: An array of product variant descriptions.
          items:
            $ref: '#/components/schemas/PricedVariant'
    StoreVariantsRes:
      type: object
      description: The product variant's details.
      x-expanded-relations:
        field: variant
        relations:
          - prices
          - options
          - product
        totals:
          - purchasable
      required:
        - variant
      properties:
        variant:
          description: Product variant description.
          $ref: '#/components/schemas/PricedVariant'
    Swap:
      title: Swap
      description: A swap can be created when a Customer wishes to exchange Products that they have purchased with different Products. It consists of a Return of previously purchased Products and a Fulfillment of new Products. It also includes information on any additional payment or refund required based on the difference between the exchanged products.
      type: object
      required:
        - allow_backorder
        - canceled_at
        - cart_id
        - confirmed_at
        - created_at
        - deleted_at
        - difference_due
        - fulfillment_status
        - id
        - idempotency_key
        - metadata
        - no_notification
        - order_id
        - payment_status
        - shipping_address_id
        - updated_at
      properties:
        id:
          description: The swap's ID
          type: string
          example: swap_01F0YET86Y9G92D3YDR9Y6V676
        fulfillment_status:
          description: The status of the Fulfillment of the Swap.
          type: string
          enum:
            - not_fulfilled
            - fulfilled
            - shipped
            - partially_shipped
            - canceled
            - requires_action
          example: not_fulfilled
        payment_status:
          description: The status of the Payment of the Swap. The payment may either refer to the refund of an amount or the authorization of a new amount.
          type: string
          enum:
            - not_paid
            - awaiting
            - captured
            - confirmed
            - canceled
            - difference_refunded
            - partially_refunded
            - refunded
            - requires_action
          example: not_paid
        order_id:
          description: The ID of the order that the swap belongs to.
          type: string
          example: order_01G8TJSYT9M6AVS5N4EMNFS1EK
        order:
          description: The details of the order that the swap belongs to.
          x-expandable: order
          nullable: true
          type: object
        additional_items:
          description: The details of the new products to send to the customer, represented as line items.
          type: array
          x-expandable: additional_items
          items:
            $ref: '#/components/schemas/LineItem'
        return_order:
          description: The details of the return that belongs to the swap, which holds the details on the items being returned.
          x-expandable: return_order
          nullable: true
          type: object
        fulfillments:
          description: The details of the fulfillments that are used to send the new items to the customer.
          x-expandable: fulfillments
          type: array
          items:
            type: object
        payment:
          description: The details of the additional payment authorized by the customer when `difference_due` is positive.
          x-expandable: payment
          nullable: true
          type: object
        difference_due:
          description: The difference amount between the order’s original total and the new total imposed by the swap. If its value is negative, a refund must be issues to the customer. If it's positive, additional payment must be authorized by the customer. Otherwise, no payment processing is required.
          nullable: true
          type: integer
          example: 0
        shipping_address_id:
          description: The Address to send the new Line Items to - in most cases this will be the same as the shipping address on the Order.
          nullable: true
          type: string
          example: addr_01G8ZH853YPY9B94857DY91YGW
        shipping_address:
          description: The details of the shipping address that the new items should be sent to.
          x-expandable: shipping_address
          nullable: true
          $ref: '#/components/schemas/Address'
        shipping_methods:
          description: The details of the shipping methods used to fulfill the additional items purchased.
          type: array
          x-expandable: shipping_methods
          items:
            $ref: '#/components/schemas/ShippingMethod'
        cart_id:
          description: The ID of the cart that the customer uses to complete the swap.
          nullable: true
          type: string
          example: cart_01G8ZH853Y6TFXWPG5EYE81X63
        cart:
          description: The details of the cart that the customer uses to complete the swap.
          x-expandable: cart
          nullable: true
          type: object
        confirmed_at:
          description: The date with timezone at which the Swap was confirmed by the Customer.
          nullable: true
          type: string
          format: date-time
        canceled_at:
          description: The date with timezone at which the Swap was canceled.
          nullable: true
          type: string
          format: date-time
        no_notification:
          description: If set to true, no notification will be sent related to this swap
          nullable: true
          type: boolean
          example: false
        allow_backorder:
          description: If true, swaps can be completed with items out of stock
          type: boolean
          default: false
        idempotency_key:
          description: Randomly generated key used to continue the completion of the swap in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    TaxLine:
      title: Tax Line
      description: A tax line represents the taxes amount applied to a line item.
      type: object
      required:
        - code
        - created_at
        - id
        - metadata
        - name
        - rate
        - updated_at
      properties:
        id:
          description: The tax line's ID
          type: string
          example: tl_01G1G5V2DRX1SK6NQQ8VVX4HQ8
        code:
          description: A code to identify the tax type by
          nullable: true
          type: string
          example: tax01
        name:
          description: A human friendly name for the tax
          type: string
          example: Tax Example
        rate:
          description: The numeric rate to charge tax by
          type: number
          example: 10
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    TaxProvider:
      title: Tax Provider
      description: A tax provider represents a tax service installed in the Medusa backend, either through a plugin or backend customizations. It holds the tax service's installation status.
      type: object
      required:
        - id
        - is_installed
      properties:
        id:
          description: The ID of the tax provider as given by the tax service.
          type: string
          example: manual
        is_installed:
          description: Whether the tax service is installed in the current version. If a tax service is no longer installed, the `is_installed` attribute is set to `false`.
          type: boolean
          default: true
    TaxRate:
      title: Tax Rate
      description: A Tax Rate can be used to define a custom rate to charge on specified products, product types, and shipping options within a given region.
      type: object
      required:
        - code
        - created_at
        - id
        - metadata
        - name
        - rate
        - region_id
        - updated_at
      properties:
        id:
          description: The tax rate's ID
          type: string
          example: txr_01G8XDBAWKBHHJRKH0AV02KXBR
        rate:
          description: The numeric rate to charge
          nullable: true
          type: number
          example: 10
        code:
          description: A code to identify the tax type by
          nullable: true
          type: string
          example: tax01
        name:
          description: A human friendly name for the tax
          type: string
          example: Tax Example
        region_id:
          description: The ID of the region that the rate belongs to.
          type: string
          example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G
        region:
          description: The details of the region that the rate belongs to.
          x-expandable: region
          nullable: true
          type: object
        products:
          description: The details of the products that belong to this tax rate.
          type: array
          x-expandable: products
          items:
            $ref: '#/components/schemas/Product'
        product_types:
          description: The details of the product types that belong to this tax rate.
          type: array
          x-expandable: product_types
          items:
            $ref: '#/components/schemas/ProductType'
        shipping_options:
          description: The details of the shipping options that belong to this tax rate.
          type: array
          x-expandable: shipping_options
          items:
            $ref: '#/components/schemas/ShippingOption'
        product_count:
          description: The count of products
          type: integer
          example: 10
        product_type_count:
          description: The count of product types
          type: integer
          example: 2
        shipping_option_count:
          description: The count of shipping options
          type: integer
          example: 1
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    TrackingLink:
      title: Tracking Link
      description: A tracking link holds information about tracking numbers for a Fulfillment. Tracking Links can optionally contain a URL that can be visited to see the status of the shipment. Typically, the tracking link is provided from the third-party service integrated through the used fulfillment provider.
      type: object
      required:
        - created_at
        - deleted_at
        - fulfillment_id
        - id
        - idempotency_key
        - metadata
        - tracking_number
        - updated_at
        - url
      properties:
        id:
          description: The tracking link's ID
          type: string
          example: tlink_01G8ZH853Y6TFXWPG5EYE81X63
        url:
          description: The URL at which the status of the shipment can be tracked.
          nullable: true
          type: string
          format: uri
        tracking_number:
          description: The tracking number given by the shipping carrier.
          type: string
          format: RH370168054CN
        fulfillment_id:
          description: The ID of the fulfillment that the tracking link belongs to.
          type: string
          example: ful_01G8ZRTMQCA76TXNAT81KPJZRF
        fulfillment:
          description: The details of the fulfillment that the tracking link belongs to.
          x-expandable: fulfillment
          nullable: true
          type: object
        idempotency_key:
          description: Randomly generated key used to continue the completion of a process in case of failure.
          nullable: true
          type: string
          externalDocs:
            url: https://docs.medusajs.com/development/idempotency-key/overview.md
            description: Learn more how to use the idempotency key.
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
    UpdateStockLocationInput:
      title: Update Stock Location Input
      description: Represents the Input to update a Stock Location
      type: object
      properties:
        name:
          type: string
          description: The stock location name
        address_id:
          type: string
          description: The Stock location address ID
        address:
          description: Stock location address object
          allOf:
            - $ref: '#/components/schemas/StockLocationAddressInput'
            - type: object
        metadata:
          type: object
          description: An optional key-value map with additional details
          example:
            car: white
    User:
      title: User
      description: A User is an administrator who can manage store settings and data.
      type: object
      required:
        - api_token
        - created_at
        - deleted_at
        - email
        - first_name
        - id
        - last_name
        - metadata
        - role
        - updated_at
      properties:
        id:
          description: The user's ID
          type: string
          example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V
        role:
          description: The user's role. These roles don't provide any different privileges.
          type: string
          enum:
            - admin
            - member
            - developer
          default: member
        email:
          description: The email of the User
          type: string
          format: email
        first_name:
          description: The first name of the User
          nullable: true
          type: string
          example: Levi
        last_name:
          description: The last name of the User
          nullable: true
          type: string
          example: Bogan
        api_token:
          description: An API token associated with the user.
          nullable: true
          type: string
          example: null
        created_at:
          description: The date with timezone at which the resource was created.
          type: string
          format: date-time
        updated_at:
          description: The date with timezone at which the resource was updated.
          type: string
          format: date-time
        deleted_at:
          description: The date with timezone at which the resource was deleted.
          nullable: true
          type: string
          format: date-time
        metadata:
          description: An optional key-value map with additional details
          nullable: true
          type: object
          example:
            car: white
          externalDocs:
            description: Learn about the metadata attribute, and how to delete and update it.
            url: https://docs.medusajs.com/development/entities/overview#metadata-attribute
