openapi: 3.0.1
info:
  title: Canto PIM
  description: "\n[Canto APIs](https://api.canto.com) enable seamless synchronization between the PIM + DAM and external systems that rely on accurate, up-to-date product content. \nThe API outlined here provides programmatic access to Canto’s Product Hub (PIM).  The Product Hub API allows authorized systems to create, retrieve, update, and manage rich product data for use across digital channels, e-commerce platforms, and other target or source systems. \n \n<b>Key Capabilities</b><br />\nThe Canto Product Hub API enables full product data management:\n1. Product Record Management:  Create, read, update, and delete product entries including structured metadata, taxonomy, categories, and references.\n2. Attribute & Schema Configuration:  Access and manage custom product attributes and classification structures\n3. Webhooks:  Trigger updates or publish product datasets to downstream systems and integration pipelines.\n \n<b>API Design</b>\n- The PIM API adheres to <b>RESTful principles</b>, supporting standard HTTP methods (GET, POST, PUT, PATCH, DELETE).\n- JSON is the default payload format for both requests and responses.\n\n<b>HTTP Status Code Conventions</b><br />\nBelow are general HTTP codes applicable across most endpoints:<br />\n- <b>200, 201, 204</b> – Successful operations (retrieval, creation, update, deletion).\n- <b>400</b> – Bad request. Input payloads did not conform to the expected schema or required parameters were missing.\n- <b>401 / 403</b> – Authentication or authorization failed.\n- <b>404</b> – The route or resource was not found.\n- <b>409</b> – Conflict in resource state (e.g., duplicate product identifier).\n- <b>429</b> - Too many requests. See Rate Limits below.\n- <b>500</b> – An unexpected server error occurred.\n- <b>502 / 503 / 504</b> – Infrastructure issues such as load balancer, service unavailability, or timeouts.\n\n<b>API Rate Limits</b><br />\nRate limits are how many API calls you can make in a given time frame. If your call exceeds the pre-defined rate limit, you will run into a “429” http error-code. After which, you will need to wait until you can make another API call.\n\n<b>PIM API Rate Limit:</b> 5 requests/second\n"
  version: 1.0.0
servers:
- url: "https://{tenantSubdomain}.{region}/api/v1/pim/"
  variables:
    tenantSubdomain:
      default: demo
    region:
      default: canto.com
      enum:
      - canto.com
      - canto.global
      - canto.de
      - au.canto.com
      - ca.canto.com
security:
- cantoOAuth2: []
- bearerAuth: []
tags:
- name: Import Settings
  description: |2
            API endpoints for configuring how CSV imports should be processed.
            This includes:
            - Mapping CSV headers to product attributes
            - Configuring how product variations should be handled
            - Setting up category and type assignments
- name: Imports
  description: |2
              API endpoint for importing products from a CSV file.
              Supports multipart form data uploads with import configuration.
- name: Product Channel Templates
  description: |
    Product Channel Templates define the structure and configuration for importing and exporting product data into and out of Canto PIM.
- name: Product Channel Template Products
  description: |
    Manage products associated with product channel templates.
- name: Bulk Products Channel Templates
  description: "Perform bulk products operation on a Product Channel Template\n  \nThese endpoints allow you to add or remove products  that are associated with a specific channel template in bulk.\n"
- name: Bulk Products Catalogs
  description: "Perform bulk products operation on a Product Catalog\n  \nThese endpoints allow you to add or remove products  that are associated with a specific product catalog in bulk.\n"
- name: Product Share Links
  description: |
    Product Share Links allow you to create shareable links for products that can be accessed
    outside the PIM system. These links can have custom names and optionally expire.
- name: Webhooks
  description: |
    Webhooks are used to notify your application when certain events occur within the system.
    They can be configured to send a POST request to a specified URL when a specific event happens.
    Available resources and the events they support:
    - product
      - created
      - updated
      - deleted
    - variant
      - created
      - updated
      - deleted
    - import
      - started
      - completed
      - failed

    You can validate the payload using the +X-Webhook-Signature+ header. It's a SHA256 hash of the payload, signed with the secret key.
- name: Filter
  description: |2
                API endpoints for filtering product attributes.
                Allows filtering and retrieving product attributes based on various criteria including:
                - Exact value matches
                - Partial text matches
                - Multiple value matches
                - Negative matches
                - Product type filtering
                - Product channel template filtering
- name: Dimensions
  description: |
    Dimensions are custom attributes used to describe products, such as size or color.
- name: Products
  description: |
    Create, retrieve, update, and delete product records, and manage the assets attached to a product.
- name: Variants
  description: |
    Variants are specific combinations of a product's dimensions (e.g. a size/color pairing). Manage variants and their attached assets here.
- name: Options
  description: |
    Options are the individual values available for a Dimension (e.g. "Red" and "Blue" for a Color dimension).
- name: Product Catalogs
  description: |
    Product Catalogs group products together for organization or channel-specific publishing.
- name: Product Categories
  description: |
    Browse the category taxonomy used to classify products.
- name: Product Custom Attributes
  description: |
    Manage custom attributes available for storing additional product metadata beyond the built-in fields.
- name: Product Types
  description: |
    Product Types define the schema (dimensions and custom attributes) a product record must conform to.
- name: Webhook Events
  description: |
    Inspect or purge the event history for a configured webhook.
- name: Product Catalog Products
  description: |
    Manage which products belong to a given Product Catalog.
paths:
  /dimensions:
    get:
      tags:
      - Dimensions
      summary: Get Dimensions
      description: |2
            Retrieve a list of all dimensions
      operationId: get_api_v1_dimensions
      responses:
        "200":
          description: Successfully fetched Dimensions
          headers:
            page-items:
              description: Number of items per page
              schema:
                type: integer
            link:
              description: "Standard link header defined in RFC 8228. Contains links for first, last, next, and prev pages with respective `rel` attributes"
              schema:
                type: string
            current-page:
              description: Current page number
              schema:
                type: integer
            total-count:
              description: Total number of items
              schema:
                type: integer
            total-pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Dimensions
      summary: Create Dimension
      description: |2
            Create a new product dimension
      operationId: post_api_v1_dimensions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/dimensions_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/dimensions_body_1"
        required: true
      responses:
        "201":
          description: Successfully created Dimension
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/dimension"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "422":
          description: There was an error creating your Dimension
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /dimensions/{id}:
    get:
      tags:
      - Dimensions
      summary: Get Dimension
      description: |2
            Fetch a specific dimension by ID
      operationId: get_api_v1_dimensions_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Dimension
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/dimension"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Dimension ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    put:
      tags:
      - Dimensions
      summary: Update Dimension
      description: |2
            Update an existing dimension
      operationId: put_api_v1_dimensions_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/dimensions_id_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/dimensions_id_body_1"
      responses:
        "200":
          description: Successfully updated Dimension
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/dimension"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Dimension ID not found
          content: {}
        "422":
          description: There was an error updating your Dimension
          content: {}
        "500":
          description: Something went wrong
          content: {}
    patch:
      tags:
      - Dimensions
      summary: Update Dimension
      description: |2
            Update specific fields of an existing dimension
      operationId: patch_api_v1_dimensions_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/dimensions_id_body_2"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/dimensions_id_body_3"
      responses:
        "200":
          description: Successfully updated Dimension
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/dimension"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Dimension ID not found
          content: {}
        "422":
          description: There was an error updating your Dimension
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /import_settings:
    post:
      tags:
      - Import Settings
      summary: Configure import mappings and variation formats
      description: |2
            Creates or retrieves channel template and format settings based on provided mappings.

            This endpoint helps configure how CSV data will be imported by:
            1. Mapping CSV headers to product attributes
            2. Defining how variations should be grouped
            3. Specifying dimension and option columns

            Returns IDs needed for the actual import process.
      operationId: post_api_v1_import_settings
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/import_settings_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/import_settings_body_1"
      responses:
        "200":
          description: Template and format IDs for use in import
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_1"
        "404":
          description: Template or format not found
          content: {}
        "422":
          description: Invalid mapping configuration
          content: {}
        "500":
          description: Internal server error
          content: {}
  /imports:
    post:
      tags:
      - Imports
      summary: Import products from CSV
      description: |2
                Creates a new product import job from a CSV file.

                The CSV file should be uploaded as multipart form data along with
                the channel template and channel format IDs for processing the import.
      operationId: post_api_v1_imports
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/imports_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/imports_body_1"
        required: true
      responses:
        "400":
          description: Missing required parameters or invalid file format
          content: {}
        "404":
          description: Template or format not found
          content: {}
        "422":
          description: Invalid import configuration
          content: {}
  /product_catalogs:
    get:
      tags:
      - Product Catalogs
      summary: Get Product Catalogs
      description: |2
            Retrieve a list of all product catalogs
      operationId: get_api_v1_product_catalogs
      responses:
        "200":
          description: Successfully fetched Product Catalogs
          headers:
            page-items:
              description: Number of items per page
              schema:
                type: integer
            link:
              description: "Standard link header defined in RFC 8228. Contains links for first, last, next, and prev pages with respective `rel` attributes"
              schema:
                type: string
            current-page:
              description: Current page number
              schema:
                type: integer
            total-count:
              description: Total number of items
              schema:
                type: integer
            total-pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_2"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Product Catalogs
      summary: Create Product Catalog
      description: |2
            Create a new product catalog
      operationId: post_api_v1_product_catalogs
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_catalogs_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_catalogs_body_1"
        required: true
      responses:
        "200":
          description: Successfully created Product Catalog
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/catalog"
        "400":
          description: The request parameters were invalid. References to `nil` means empty string or `null` value
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "422":
          description: There was an error creating your Product Catalog
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_catalogs/{id}:
    get:
      tags:
      - Product Catalogs
      summary: Get Product Catalog
      description: |2
            Fetch a specific product catalog by ID
      operationId: get_api_v1_product_catalogs_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Product Catalog
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/catalog"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Catalog ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    put:
      tags:
      - Product Catalogs
      summary: Update Product Catalog
      description: |2
            Completely update an existing product catalog
      operationId: put_api_v1_product_catalogs_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_catalogs_id_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_catalogs_id_body_1"
      responses:
        "200":
          description: Successfully updated Product Catalog
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/catalog"
        "400":
          description: The request parameters were invalid. References to `nil` means empty string or `null` value
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Catalog ID not found
          content: {}
        "422":
          description: There was an error updating your Product Catalog
          content: {}
        "500":
          description: Something went wrong
          content: {}
    delete:
      tags:
      - Product Catalogs
      summary: Delete Product Catalog
      description: |2
            Delete a specific product catalog
      operationId: delete_api_v1_product_catalogs_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      responses:
        "204":
          description: Successfully Deleted Product Catalog
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Catalog ID not found
          content: {}
        "422":
          description: There was an error throwing your Product Catalog in the trash
          content: {}
        "500":
          description: Something went wrong
          content: {}
    patch:
      tags:
      - Product Catalogs
      summary: Update Product Catalog
      description: |2
            Update specifics of a product catalog
      operationId: patch_api_v1_product_catalogs_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_catalogs_id_body_2"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_catalogs_id_body_3"
      responses:
        "200":
          description: Successfully updated Product Catalog
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/catalog"
        "400":
          description: The request parameters were invalid. References to `nil` means empty string or `null` value
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Catalog ID not found
          content: {}
        "422":
          description: There was an error updating your Product Catalog
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_channel_templates:
    get:
      tags:
      - Product Channel Templates
      summary: Get Product Channel Templates
      description: |2
            Retrieve a list of product channel templates with optional filtering
      operationId: get_api_v1_product_channel_templates
      parameters:
      - name: product_channel_id
        in: query
        description: Product Channel ID
        required: false
        schema:
          type: string
      - name: type
        in: query
        description: Type of Product Channel. E.g. "import" or "export"
        required: false
        schema:
          type: string
          enum:
          - import
          - export
      - name: preset_name
        in: query
        description: "If you only want to fetch preset templates, include this parameter. This parameter will override the type parameter and return only preset templates associated to the preset with the passed name"
        required: false
        schema:
          type: string
          enum:
          - Shopify
      responses:
        "200":
          description: Successfully fetched Product Channel Templates
          headers:
            page-items:
              description: Number of items per page
              schema:
                type: integer
            link:
              description: "Standard link header defined in RFC 8228. Contains links for first, last, next, and prev pages with respective `rel` attributes"
              schema:
                type: string
            current-page:
              description: Current page number
              schema:
                type: integer
            total-count:
              description: Total number of items
              schema:
                type: integer
            total-pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/product_channel_templates_response"
              example:
                product_channel_templates:
                - id: 1
                  name: First Export Template
                  product_channel_id: 1
                  file_name_export_format: "Product_Image_[name]_[sku]_[attribute_1].jpg"
                  image_export_size: 500px
                  created_at: 2021-01-01T00:00:00.000Z
                  updated_at: 2021-01-01T00:00:00.000Z
                - id: 2
                  name: Import Template
                  product_channel_id: 2
                  created_at: 2021-01-01T00:00:00.000Z
                  updated_at: 2021-01-01T00:00:00.000Z
                - id: 3
                  name: Shopify Template
                  product_channel_id: 1
                  created_at: 2021-01-01T00:00:00.000Z
                  updated_at: 2021-01-01T00:00:00.000Z
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Product Channel Templates
      summary: Create Product Channel Template
      description: |2
            Create a new product channel template
      operationId: post_api_v1_product_channel_templates
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_channel_templates_body"
            example:
              name: New Template
              product_channel_id: 10
              custom_attribute_mappings:
              - name: Name
                product_custom_attribute_id: 17
                required: false
              - name: SKU
                product_custom_attribute_id: 18
                required: true
              - name: Image
                product_custom_attribute_id: 49
                required: false
              - name: Description
                product_custom_attribute_id: 25
                required: false
        required: true
      responses:
        "201":
          description: Successfully created Product Channel Template
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/product_channel_template"
              example:
                id: 8
                name: New Template
                product_channel_id: 10
                created_at: 2024-12-11T17:45:22.123Z
                updated_at: 2024-12-11T17:45:22.123Z
                custom_attribute_mappings:
                - name: Name
                  product_custom_attribute_id: 17
                  required: false
                - name: SKU
                  product_custom_attribute_id: 18
                  required: true
                - name: Image
                  product_custom_attribute_id: 49
                  required: false
                - name: Description
                  product_custom_attribute_id: 25
                  required: false
        "400":
          description: Invalid request parameters
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "422":
          description: There was an error creating your Product Channel Template. E.g. invalid custom attribute mapping configuration
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_channel_templates/{product_channel_template_id}:
    get:
      tags:
      - Product Channel Templates
      summary: Get Product Channel Template
      description: |2
            Retrieve a specific product channel template by ID
      operationId: get_api_v1_product_channel_templates_id
      parameters:
      - name: product_channel_template_id
        in: path
        description: Product Channel Template ID
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Product Channel Template
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/product_channel_template"
              example:
                id: 7
                name: Export
                product_channel_id: 10
                created_at: 2024-12-11T14:14:34.189Z
                updated_at: 2024-12-11T14:14:34.189Z
                custom_attribute_mappings:
                - name: Name
                  product_custom_attribute_id: 17
                  required: true
                - name: SKU
                  product_custom_attribute_id: 18
                  required: true
                - name: Image
                  product_custom_attribute_id: 49
                  required: false
                - name: Unmapped Attribute
                  required: false
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Channel Template not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    put:
      tags:
      - Product Channel Templates
      summary: Update Product Channel Template
      description: |2
            Update an existing product channel template
      operationId: put_api_v1_product_channel_templates_id
      parameters:
      - name: product_channel_template_id
        in: path
        description: Product Channel Template ID
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_channel_templates_product_channel_template_id_body"
            example:
              name: Updated Template
              custom_attribute_mappings:
              - name: Updated Name
                product_custom_attribute_id: 17
                required: true
              - name: Updated SKU
                product_custom_attribute_id: 18
                required: true
              - name: Updated Image
                product_custom_attribute_id: 49
                required: false
              - name: Updated Description
                product_custom_attribute_id: 25
                required: false
        required: true
      responses:
        "200":
          description: Successfully updated Product Channel Template
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/product_channel_template"
              example:
                id: 7
                name: Updated Template
                product_channel_id: 10
                file_name_export_format: "Product_[name]_[sku].jpg"
                created_at: 2024-12-11T14:14:34.189Z
                updated_at: 2024-12-11T16:30:15.456Z
                custom_attribute_mappings:
                - name: Updated Name
                  product_custom_attribute_id: 17
                  required: true
                - name: Updated SKU
                  product_custom_attribute_id: 18
                  required: true
                - name: Updated Image
                  product_custom_attribute_id: 49
                  required: false
                - name: Updated Description
                  product_custom_attribute_id: 25
                  required: false
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Channel Template not found
          content: {}
        "422":
          description: There was an error updating your Product Channel Template. E.g. invalid custom attribute mapping configuration
          content: {}
        "500":
          description: Something went wrong
          content: {}
    delete:
      tags:
      - Product Channel Templates
      summary: Destroy Product Channel Template
      description: |2
            Delete an existing product channel template
      operationId: delete_api_v1_product_channel_templates_id
      parameters:
      - name: product_channel_template_id
        in: path
        description: Product Channel Template ID
        required: true
        schema:
          type: number
      responses:
        "204":
          description: Successfully deleted Product Channel Template
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Channel Template ID not found
          content: {}
        "422":
          description: There was an error deleting the Product Channel Template
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_channel_templates/{product_channel_template_id}/products:
    get:
      tags:
      - Product Channel Template Products
      summary: Get Product Channel Template Products
      description: |2
            List products in a specific product channel template
      operationId: get_api_v1_product_channel_templates_product_channel_template_id_products
      parameters:
      - name: product_channel_template_id
        in: path
        description: Product Channel Template ID
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Products
          headers:
            page-items:
              description: Number of items per page
              schema:
                type: integer
            link:
              description: "Standard link header defined in RFC 8228. Contains links for first, last, next, and prev pages with respective `rel` attributes"
              schema:
                type: string
            current-page:
              description: Current page number
              schema:
                type: integer
            total-count:
              description: Total number of items
              schema:
                type: integer
            total-pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_3"
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Channel Template ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Product Channel Template Products
      summary: Add a single Product to a Channel Template
      description: |2
            Add a single Product to a Channel Template. If you wish to add multiple products, use the bulk endpoint instead.
      operationId: post_api_v1_product_channel_templates_product_channel_template_id_products
      parameters:
      - name: product_channel_template_id
        in: path
        description: Product Channel Template ID
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_channel_template_id_products_body"
        required: true
      responses:
        "200":
          description: Successfully added the product to the channel template
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_4"
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product or Channel Template ID not found
          content: {}
        "422":
          description: There was an error adding the product to the channel template
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_channel_templates/{product_channel_template_id}/products/{id}:
    get:
      tags:
      - Product Channel Template Products
      summary: Get Product Channel Template Product
      description: |2
            Retrieve a specific product from a product channel template
      operationId: get_api_v1_product_channel_templates_product_channel_template_id_products_id
      parameters:
      - name: product_channel_template_id
        in: path
        description: Product Channel Template ID
        required: true
        schema:
          type: number
      - name: id
        in: path
        description: Product ID
        required: true
        schema:
          type: number
      - name: include_share_link
        in: query
        description: "Include Share Link URL in response TODO: still defining"
        required: false
        schema:
          type: boolean
      responses:
        "200":
          description: Successfully fetched Product from Channel Template
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_5"
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Channel Template or Product ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    delete:
      tags:
      - Product Channel Template Products
      summary: Remove a single Product from a Channel Template
      description: |2
            Remove a single Product from a Channel Template. If you wish to remove multiple products, use the bulk endpoint instead.
      operationId: delete_api_v1_product_channel_templates_product_channel_template_id_products_id
      parameters:
      - name: product_channel_template_id
        in: path
        description: Product Channel Template ID
        required: true
        schema:
          type: number
      - name: id
        in: path
        description: Product ID
        required: true
        schema:
          type: number
      responses:
        "204":
          description: Successfully removed product from the channel template
          content: {}
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product or Channel Template ID not found
          content: {}
        "422":
          description: There was an error removing product from the channel template
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_channel_templates/{product_channel_template_id}/export:
    post:
      tags:
      - Product Channel Templates
      summary: Export Product Channel Template
      description: |2
            Export products from a specific product channel template.
      operationId: post_api_v1_product_channel_templates_product_channel_template_id_export
      parameters:
      - name: product_channel_template_id
        in: path
        description: Product Channel Template ID
        required: true
        schema:
          type: number
      responses:
        "201":
          description: Your channel tempalte export is being processed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/inline_response_201"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Channel Template ID not found
          content: {}
        "422":
          description: A channel template export is already in the works. Please try again later.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/inline_response_422"
        "500":
          description: Something went wrong
          content: {}
  /bulk/products/channel_templates:
    post:
      tags:
      - Bulk Products Channel Templates
      summary: Perform bulk products operation on a Product Channel Template
      description: |2
            Perform bulk products operation on a Product Channel Template
      operationId: post_api_v1_bulk_products_channel_templates
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/products_channel_templates_body"
            example:
              operation: add
              product_channel_template_id: 1
              product_ids:
              - 1
              - 2
              - 3
              - 4
              - 5
        required: true
      responses:
        "200":
          description: Bulk products operation on Product Channel Template successful
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_6"
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Channel Template ID not found
          content: {}
        "422":
          description: There was an error with your bulk products operation on the channel template
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /bulk/products/product_catalogs:
    post:
      tags:
      - Bulk Products Catalogs
      summary: Perform bulk products operation on a Product Catalog
      description: |2
            Perform bulk products operation on a Product Catalog
      operationId: post_api_v1_bulk_products_catalogs
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/products_product_catalogs_body"
            example:
              operation: add
              product_catalog_id: 1
              product_ids:
              - 1
              - 2
              - 3
              - 4
              - 5
        required: true
      responses:
        "200":
          description: Bulk products operation on Product Catalog successful
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_6"
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Catalog ID not found
          content: {}
        "422":
          description: There was an error with your bulk products operation on the catalog
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_categories:
    get:
      tags:
      - Product Categories
      summary: Get Product Categories
      description: |2
            List all available product categories
      operationId: get_api_v1_product_categories
      responses:
        "200":
          description: Successfully fetched Product Categories
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_7"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_categories/{id}:
    get:
      tags:
      - Product Categories
      summary: Get Product Category
      description: |2
            Get details for a specific product category
      operationId: get_api_v1_product_categories_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Product Category
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/category"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Category ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_custom_attributes:
    get:
      tags:
      - Product Custom Attributes
      summary: Get Product Custom Attributes
      description: |2
            Retrieve all custom attributes defined in the Product Hub
      operationId: get_api_v1_product_custom_attributes
      parameters:
      - name: data_type
        in: query
        description: "If set, only product custom attributes with the passed value for `data_type` will be returned"
        required: false
        schema:
          type: string
          enum:
          - text
          - number
          - date
          - image
      responses:
        "200":
          description: Successfully fetched Custom attributes
          headers:
            page-items:
              description: Number of items per page
              schema:
                type: integer
            link:
              description: "Standard link header defined in RFC 8228. Contains links for first, last, next, and prev pages with respective `rel` attributes"
              schema:
                type: string
            current-page:
              description: Current page number
              schema:
                type: integer
            total-count:
              description: Total number of items
              schema:
                type: integer
            total-pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_8"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Product Custom Attributes
      summary: Create Product Custom Attribute
      description: |2
            Create a new custom attribute
      operationId: post_api_v1_product_custom_attributes
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_custom_attributes_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_custom_attributes_body_1"
        required: true
      responses:
        "200":
          description: Successfully created Product Custom Attribute
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_9"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "422":
          description: There was an error creating your Type
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_custom_attributes/{id}:
    get:
      tags:
      - Product Custom Attributes
      summary: Get Product Custom Attribute
      description: |2
            Get a specific custom attribute by ID.
      operationId: get_api_v1_product_custom_attributes_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Product Custom Attribute
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_10"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Custom Attribute ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    put:
      tags:
      - Product Custom Attributes
      summary: Update Product Custom Attribute
      description: |2
            Update a custom attribute
      operationId: put_api_v1_product_custom_attributes_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_custom_attributes_id_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_custom_attributes_id_body_1"
      responses:
        "200":
          description: Successfully updated Product Custom Attribute
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_10"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Custom Attribute ID not found
          content: {}
        "422":
          description: There was an error updating your Product Custom Attribute
          content: {}
        "500":
          description: Something went wrong
          content: {}
    patch:
      tags:
      - Product Custom Attributes
      summary: Update Product Custom Attribute
      description: |2
            Update a custom attribute
      operationId: patch_api_v1_product_custom_attributes_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_custom_attributes_id_body_2"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_custom_attributes_id_body_3"
      responses:
        "200":
          description: Successfully updated Product Custom Attribute
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_10"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Custom Attribute ID not found
          content: {}
        "422":
          description: There was an error updating your Product Custom Attribute
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_share_links:
    get:
      tags:
      - Product Share Links
      summary: Get Product Share Links
      description: |2
            List all shareable links created for product pages
      operationId: get_api_v1_product_share_links
      responses:
        "200":
          description: List of product Share Links
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_11"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Product Share Links
      summary: Create Product Share Link
      description: |2
            Generate a new share link for a product.
      operationId: post_api_v1_product_share_links
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_share_links_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_share_links_body_1"
        required: true
      responses:
        "201":
          description: Successfully created Share Link
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/product_share_link_properties"
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "422":
          description: There was an error creating the Share Link
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_share_links/{id}:
    get:
      tags:
      - Product Share Links
      summary: Get Product Share Link
      description: |2
            Get details of a specific share link.
      operationId: get_api_v1_product_share_links_id
      parameters:
      - name: id
        in: path
        description: Share Link ID
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Share Link details
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/product_share_link_properties"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Share Link ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    delete:
      tags:
      - Product Share Links
      summary: Delete Product Share Link
      description: |2
            Remove a product share link
      operationId: delete_api_v1_product_share_links_id
      parameters:
      - name: id
        in: path
        description: Share Link ID
        required: true
        schema:
          type: number
      responses:
        "204":
          description: Share Link successfully deleted
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Share Link ID not found
          content: {}
        "422":
          description: There was an error deleting the Share Link
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_types:
    get:
      tags:
      - Product Types
      summary: Get Types
      description: |2
            Retrieve all available product Types
      operationId: get_api_v1_product_types
      responses:
        "200":
          description: Successfully fetched Types
          headers:
            page-items:
              description: Number of items per page
              schema:
                type: integer
            link:
              description: "Standard link header defined in RFC 8228. Contains links for first, last, next, and prev pages with respective `rel` attributes"
              schema:
                type: string
            current-page:
              description: Current page number
              schema:
                type: integer
            total-count:
              description: Total number of items
              schema:
                type: integer
            total-pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_12"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Product Types
      summary: Create Type
      description: |2
            Create a new Product Type
      operationId: post_api_v1_product_types
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_types_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_types_body_1"
        required: true
      responses:
        "201":
          description: Successfully created Type
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_201_1"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "422":
          description: There was an error creating your Type
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_types/{id}:
    get:
      tags:
      - Product Types
      summary: Get Type
      description: |2
            Get details about a specific product Type
      operationId: get_api_v1_product_types_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Type
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_13"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Type ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    put:
      tags:
      - Product Types
      summary: Update Type
      description: |2
            Fully update a product Type
      operationId: put_api_v1_product_types_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_types_id_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_types_id_body_1"
      responses:
        "200":
          description: Successfully updated Type
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_13"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Type ID not found
          content: {}
        "422":
          description: There was an error updating your Type
          content: {}
        "500":
          description: Something went wrong
          content: {}
    patch:
      tags:
      - Product Types
      summary: Update Type
      description: |2
            Patch a product Type
      operationId: patch_api_v1_product_types_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_types_id_body_2"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_types_id_body_3"
      responses:
        "200":
          description: Successfully updated Type
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_13"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Type ID not found
          content: {}
        "422":
          description: There was an error updating your Type
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /products:
    get:
      tags:
      - Products
      summary: Get Products
      description: |2
            List all products in the catalog
      operationId: get_api_v1_products
      responses:
        "200":
          description: Successfully fetched Products
          headers:
            page-items:
              description: Number of items per page
              schema:
                type: integer
            link:
              description: "Standard link header defined in RFC 8228. Contains links for first, last, next, and prev pages with respective `rel` attributes"
              schema:
                type: string
            current-page:
              description: Current page number
              schema:
                type: integer
            total-count:
              description: Total number of items
              schema:
                type: integer
            total-pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_14"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Products
      summary: Create Product
      description: |2
            Add a new product
      operationId: post_api_v1_products
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/products_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/products_body_1"
      responses:
        "201":
          description: Successfully created Product
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_201_2"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "422":
          description: There was an error creating your Product
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /products/{id}:
    get:
      tags:
      - Products
      summary: Get Product
      description: |2
            Retrieve details for a specific product by ID
      operationId: get_api_v1_products_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Product
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_5"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product ID not found or invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    put:
      tags:
      - Products
      summary: Update Product
      description: |2
            Update a product
      operationId: put_api_v1_products_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/products_id_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/products_id_body_1"
      responses:
        "200":
          description: Successfully updated Product
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_201_2"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product ID not found or invalid
          content: {}
        "422":
          description: There was an error updating your Product
          content: {}
        "500":
          description: Something went wrong
          content: {}
    delete:
      tags:
      - Products
      summary: Delete Product
      description: |2
            Delete a product from the catalog
      operationId: delete_api_v1_products_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      responses:
        "204":
          description: Successfully deleted Product
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product ID not found
          content: {}
        "422":
          description: There was an error throwing your Product in the trash or it's already in the trash
          content: {}
        "500":
          description: Something went wrong
          content: {}
    patch:
      tags:
      - Products
      summary: Update Product
      description: |2
            Update a product
      operationId: patch_api_v1_products_id
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/products_id_body_2"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/products_id_body_3"
      responses:
        "200":
          description: Successfully updated Product
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_201_2"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product ID not found or invalid
          content: {}
        "422":
          description: There was an error updating your Product
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /products/{product_id}/variants:
    get:
      tags:
      - Variants
      summary: Get Product Variants
      description: |2
            List all product variants
      operationId: get_api_v1_products_product_id_variants
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Product Variants
          headers:
            page-items:
              description: Number of items per page
              schema:
                type: integer
            link:
              description: "Standard link header defined in RFC 8228. Contains links for first, last, next, and prev pages with respective `rel` attributes"
              schema:
                type: string
            current-page:
              description: Current page number
              schema:
                type: integer
            total-count:
              description: Total number of items
              schema:
                type: integer
            total-pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_15"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Variants
      summary: Create Product Variant
      description: |2
            Create a new product variant
      operationId: post_api_v1_products_product_id_variants
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_id_variants_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_id_variants_body_1"
        required: true
      responses:
        "200":
          description: Successfully created Product Variant
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_16"
        "400":
          description: The request parameters were invalid. References to `nil` means empty string or `null` value
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "422":
          description: Product Variant validation failed
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /products/{product_id}/variants/{id}:
    get:
      tags:
      - Variants
      summary: Get Product Variant
      description: |2
            Fetch details of a specific variant
      operationId: get_api_v1_products_product_id_variants_id
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: number
      - name: id
        in: path
        required: true
        schema:
          type: number
      responses:
        "200":
          description: 'Successfully fetched Product '
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_16"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Variant ID not found or invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    put:
      tags:
      - Variants
      summary: Update Product Variant
      description: |2
            Update a product variant
      operationId: put_api_v1_products_product_id_variants_id
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: number
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/variants_id_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/variants_id_body_1"
        required: true
      responses:
        "200":
          description: Successfully updated Product Variant
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_16"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Variant ID not found or invalid
          content: {}
        "422":
          description: Product Variant validation failed
          content: {}
        "500":
          description: Something went wrong
          content: {}
    delete:
      tags:
      - Variants
      summary: Delete Product Variant
      description: |2
            Remove a product variant
      operationId: delete_api_v1_products_product_id_variants_id
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: number
      - name: id
        in: path
        required: true
        schema:
          type: number
      responses:
        "204":
          description: Successfully Deleted Product Variant
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Variant ID not found or invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    patch:
      tags:
      - Variants
      summary: Update Product Variant
      description: |2
            Update a product variant
      operationId: patch_api_v1_products_product_id_variants_id
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: number
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/variants_id_body_2"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/variants_id_body_3"
        required: true
      responses:
        "200":
          description: Successfully updated Product Variant
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_16"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Variant ID not found or invalid
          content: {}
        "422":
          description: Product Variant validation failed
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /webhooks/{webhook_id}/events:
    get:
      tags:
      - Webhook Events
      summary: Get Webhook Events
      description: |2
            Retrieve all webhook event logs
      operationId: get_api_v1_webhooks_webhook_id_events
      parameters:
      - name: webhook_id
        in: path
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Webhook Events
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_17"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /webhooks/{webhook_id}/events/purge:
    delete:
      tags:
      - Webhook Events
      summary: Purge Webhook Events
      description: |2
            Clear webhook event history
      operationId: delete_api_v1_webhooks_webhook_id_events_purge
      parameters:
      - name: webhook_id
        in: path
        required: true
        schema:
          type: number
      responses:
        "204":
          description: Successfully purged all Webhook Events
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /webhooks:
    get:
      tags:
      - Webhooks
      summary: Get Webhooks
      description: |2
            List all registered webhooks
      operationId: get_api_v1_webhooks
      responses:
        "200":
          description: List of webhooks
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_18"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Webhooks
      summary: Create Webhook
      description: |2
            Register a new webhook
      operationId: post_api_v1_webhooks
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/webhooks_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/webhooks_body_1"
        required: true
      responses:
        "201":
          description: Successfully created Webhook
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_201_3"
        "400":
          description: The request parameters were invalid. References to `nil` means empty string or `null` value
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "422":
          description: There was an error creating your Webhook
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /webhooks/{id}:
    get:
      tags:
      - Webhooks
      summary: Get Webhook
      description: |2
            Get details of a specific webhook
      operationId: get_api_v1_webhooks_id
      parameters:
      - name: id
        in: path
        description: Webhook ID
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Webhook details
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/webhook_properties"
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Webhook ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    put:
      tags:
      - Webhooks
      summary: Update Webhook
      description: |2
            Fully update a webhook
      operationId: put_api_v1_webhooks_id
      parameters:
      - name: id
        in: path
        description: Webhook ID
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/webhooks_id_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/webhooks_id_body_1"
      responses:
        "200":
          description: Updated webhook
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/webhook_properties"
        "400":
          description: The request parameters were invalid. References to `nil` means empty string or `null` value
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Webhook ID not found
          content: {}
        "422":
          description: There was an error creating your Webhook
          content: {}
        "500":
          description: Something went wrong
          content: {}
    delete:
      tags:
      - Webhooks
      summary: Delete Webhook
      description: |2
            Remove a webhook
      operationId: delete_api_v1_webhooks_id
      parameters:
      - name: id
        in: path
        description: Webhook ID
        required: true
        schema:
          type: number
      responses:
        "204":
          description: Webhook successfully deleted
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Webhook ID not found
          content: {}
        "422":
          description: There was an error deleting your Webhook
          content: {}
        "500":
          description: Something went wrong
          content: {}
    patch:
      tags:
      - Webhooks
      summary: Update Webhook
      description: |2
            Partially update webhook details
      operationId: patch_api_v1_webhooks_id
      parameters:
      - name: id
        in: path
        description: Webhook ID
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/webhooks_id_body_2"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/webhooks_id_body_3"
      responses:
        "200":
          description: Updated webhook
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/webhook_properties"
        "400":
          description: The request parameters were invalid. References to `nil` means empty string or `null` value
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Webhook ID not found
          content: {}
        "422":
          description: There was an error creating your Webhook
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /dimensions/{dimension_id}/options/{id}:
    put:
      tags:
      - Options
      summary: Update Dimension Option
      description: |2
            Update the value of an option within a dimension
      operationId: put_api_v1_dimensions_dimension_id_options_id
      parameters:
      - name: dimension_id
        in: path
        required: true
        schema:
          type: number
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/options_id_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/options_id_body_1"
      responses:
        "200":
          description: Successfully updated Dimension Option
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_19"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Dimension or Option ID not found
          content: {}
        "422":
          description: There was an error updating your Dimension Option
          content: {}
        "500":
          description: Something went wrong
          content: {}
    patch:
      tags:
      - Options
      summary: Update Dimension Option
      description: |2
            Update the value of an option within a dimension
      operationId: patch_api_v1_dimensions_dimension_id_options_id
      parameters:
      - name: dimension_id
        in: path
        required: true
        schema:
          type: number
      - name: id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/options_id_body_2"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/options_id_body_3"
      responses:
        "200":
          description: Successfully updated Dimension Option
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_19"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Dimension or Option ID not found
          content: {}
        "422":
          description: There was an error updating your Dimension Option
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /dimensions/{dimension_id}/options:
    post:
      tags:
      - Options
      summary: Create Dimension Option
      description: |2
            Add a new option to a dimension
      operationId: post_api_v1_dimensions_dimension_id_options
      parameters:
      - name: dimension_id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/dimension_id_options_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/dimension_id_options_body_1"
        required: true
      responses:
        "200":
          description: Successfully created Dimension Option
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_20"
        "400":
          description: The request was invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "422":
          description: There was an error creating your Dimension Option
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_attributes/filter:
    post:
      tags:
      - Filter
      summary: Filtering product attributes
      description: |2
            Apply filters to queries based on select Product Attributes
      operationId: post_api_v1_product_attributes_filter
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_attributes_filter_body"
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/product_attributes_filter_body_1"
      responses:
        "200":
          description: ok
          content: {}
  /product_catalogs/{product_catalog_id}/products:
    get:
      tags:
      - Product Catalog Products
      summary: Get Product Catalog Products
      description: |2
            Retrieve all products within a specific catalog
      operationId: get_api_v1_product_catalogs_product_catalog_id_products
      parameters:
      - name: product_catalog_id
        in: path
        required: true
        schema:
          type: number
      responses:
        "200":
          description: Successfully fetched Products
          headers:
            page-items:
              description: Number of items per page
              schema:
                type: integer
            link:
              description: "Standard link header defined in RFC 8228. Contains links for first, last, next, and prev pages with respective `rel` attributes"
              schema:
                type: string
            current-page:
              description: Current page number
              schema:
                type: integer
            total-count:
              description: Total number of items
              schema:
                type: integer
            total-pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_21"
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Catalog ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    post:
      tags:
      - Product Catalog Products
      summary: Add Product to Product Catalog
      description: |2
            Add a single product to a specific catalog
      operationId: post_api_v1_product_catalogs_product_catalog_id_products
      parameters:
      - name: product_catalog_id
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_catalog_id_products_body"
            example:
              product_id: 1
        required: true
      responses:
        "200":
          description: Successfully added the product to the catalog
          headers:
            page-items:
              description: Number of items per page
              schema:
                type: integer
            link:
              description: "Standard link header defined in RFC 8228. Contains links for first, last, next, and prev pages with respective `rel` attributes"
              schema:
                type: string
            current-page:
              description: Current page number
              schema:
                type: integer
            total-count:
              description: Total number of items
              schema:
                type: integer
            total-pages:
              description: Total number of pages
              schema:
                type: integer
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_21"
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product or Product Catalog ID not found
          content: {}
        "422":
          description: There was an error adding the product to the catalog
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /product_catalogs/{product_catalog_id}/products/{id}:
    get:
      tags:
      - Product Catalog Products
      summary: Get Product Catalog Product
      description: |2
            Get a specific product from a catalog by ID
      operationId: get_api_v1_product_catalogs_product_catalog_id_products_id
      parameters:
      - name: product_catalog_id
        in: path
        required: true
        schema:
          type: number
      - name: id
        in: path
        required: true
        schema:
          type: number
      - name: include_share_link
        in: query
        description: "Include Share Link URL in response TODO: still defining"
        required: false
        schema:
          type: boolean
      responses:
        "200":
          description: Successfully fetched Product
          content:
            '*/*':
              schema:
                $ref: "#/components/schemas/inline_response_200_22"
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product Catalog or Product ID not found
          content: {}
        "500":
          description: Something went wrong
          content: {}
    delete:
      tags:
      - Product Catalog Products
      summary: Remove Product from Product Catalog
      description: |2
            Remove a specific product from a catalog by ID
      operationId: delete_api_v1_product_catalogs_product_catalog_id_products_id
      parameters:
      - name: product_catalog_id
        in: path
        required: true
        schema:
          type: number
      - name: id
        in: path
        description: Product ID
        required: true
        schema:
          type: number
      responses:
        "204":
          description: Successfully removed the product from the catalog
          content: {}
        "400":
          description: The request parameters were invalid
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product or Product Catalog ID not found
          content: {}
        "422":
          description: There was an error removing the product from the catalog
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /products/{product_id}/assets:
    post:
      tags:
      - Products
      summary: Add Assets to Product
      description: Add between 1 and 50 assets to a product
      operationId: post_api_v1_products_product_id_assets
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/product_id_assets_body"
        required: true
      responses:
        "201":
          description: Successfully added assets to product
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product ID was not found or invalid
          content: {}
        "422":
          description: At least 1 and no more than 50 Asset IDs are required
          content: {}
        "500":
          description: Something went wrong
          content: {}
    delete:
      tags:
      - Products
      summary: Remove Multiple Assets from Product
      description: Remove at least 1 and no more than 50 assets from a product
      operationId: delete_api_v1_products_product_id_assets
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: string
      - name: asset_ids
        in: query
        description: "Comma-separated list of Asset IDs (e.g., ?asset_ids=1,2,3)"
        required: true
        schema:
          type: string
      responses:
        "204":
          description: Successfully removed assets from product
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product ID was not found or invalid
          content: {}
        "422":
          description: At least 1 and no more than 50 Asset IDs are required
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /products/{product_id}/variants/{variant_id}/assets:
    post:
      tags:
      - Variants
      summary: Add Assets to Variant
      description: Add between 1 and 50 assets to a variant
      operationId: post_api_v1_products_product_id_variants_variant_id_assets
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: string
      - name: variant_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/variant_id_assets_body"
        required: true
      responses:
        "201":
          description: Successfully added assets to  variant
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product ID or Variant ID was not found or invalid
          content: {}
        "422":
          description: At least 1 and no more than 50 Asset IDs are required
          content: {}
        "500":
          description: Something went wrong
          content: {}
    delete:
      tags:
      - Variants
      summary: Remove Multiple Assets from Variant
      description: Remove at least 1 and no more than 50 assets from a variant
      operationId: delete_api_v1_products_product_id_variants_variant_id_assets
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: string
      - name: variant_id
        in: path
        required: true
        schema:
          type: string
      - name: asset_ids
        in: query
        description: "Comma-separated list of Asset IDs (e.g., ?asset_ids=1,2,3)"
        required: true
        schema:
          type: string
      responses:
        "204":
          description: Successfully removed assets from variant
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product ID or Variant ID was not found or invalid
          content: {}
        "422":
          description: At least 1 and no more than 50 Asset IDs are required
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /products/{product_id}/assets/{id}:
    delete:
      tags:
      - Products
      summary: Remove Single Asset from a Product
      description: Remove a single asset from a product
      operationId: delete_api_v1_products_product_id_assets_id
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: string
      - name: id
        in: path
        description: Asset ID
        required: true
        schema:
          type: string
      responses:
        "204":
          description: Successfully removed asset from product
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product ID was not found or invalid
          content: {}
        "422":
          description: No matching assets found
          content: {}
        "500":
          description: Something went wrong
          content: {}
  /products/{product_id}/variants/{variant_id}/assets/{id}:
    delete:
      tags:
      - Variants
      summary: Remove Single Asset from a Variant
      description: Remove a single asset from a variant
      operationId: delete_api_v1_products_product_id_variants_variant_id_assets_id
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: string
      - name: variant_id
        in: path
        required: true
        schema:
          type: string
      - name: id
        in: path
        description: Asset ID
        required: true
        schema:
          type: string
      responses:
        "204":
          description: Successfully removed asset from variant
          content: {}
        "401":
          description: User is not permitted to use the API or Authentication is invalid
          content: {}
        "404":
          description: Product ID was not found or invalid
          content: {}
        "422":
          description: No matching assets found
          content: {}
        "500":
          description: Something went wrong
          content: {}
components:
  schemas:
    dimension:
      required:
      - dimension_options
      - id
      - name
      type: object
      properties:
        id:
          type: number
          description: Dimension ID
        name:
          type: string
          description: Dimension Name
        dimension_options:
          type: array
          description: Array of this dimension's Options
          items:
            type: string
      additionalProperties: false
    catalog:
      required:
      - banner_asset_id
      - created_at
      - id
      - product_attribute_view_id
      - product_channel_id
      - updated_at
      - user_id
      type: object
      properties:
        id:
          type: number
          description: Product Catalog ID
        name:
          type: string
          description: Product Catalog Name
        summary:
          type: string
          description: Product Catalog Summary
        product_attribute_view_id:
          type: number
          description: ID Of Product Attribute View associated with this Catalog
        created_at:
          type: string
          description: Product Catalog Created At
        updated_at:
          type: string
          description: Product Catalog Updated At
        banner_asset_id:
          type: string
          description: ID of Banner Asset of this Catalog Banner
        user_id:
          type: string
          description: ID of User who created this Catalog
        product_channel_id:
          type: number
          description: ID of Product Channel associated with this Catalog for exports
      additionalProperties: false
    category:
      required:
      - descendants
      - id
      - name
      type: object
      properties:
        id:
          type: number
          description: Product Category ID
        name:
          type: string
          description: Product Category Name
        descendants:
          type: array
          description: Array of categories within this category
          items:
            type: string
      additionalProperties: false
    product_share_link_properties:
      required:
      - custom_name
      - expiration_date
      - id
      - identifier
      - product_id
      - url
      - user_id
      type: object
      properties:
        id:
          type: number
          description: Share Link ID
        product_id:
          type: number
          description: ID of the shared Product
        identifier:
          type: string
          description: Unique identifier for the Share Link
        custom_name:
          type: string
          description: Custom name for the Share Link
        expiration_date:
          type: string
          description: Expiration date for the Share Link
        url:
          type: string
          description: Generated shareable URL
        user_id:
          type: number
          description: ID of the user who created the Share Link
      additionalProperties: false
    webhook_properties:
      required:
      - active
      - event
      - id
      - resource
      - url
      type: object
      properties:
        id:
          type: number
          description: Webhook ID
        url:
          type: string
          description: "Webhook URL endpoint (including protocol e.g., https://)"
        resource:
          type: string
          description: Resource type to monitor
          enum:
          - product
          - variant
          - import
        event:
          type: string
          description: Event to monitor (specific to resource)
          enum:
          - created
          - updated
          - deleted
          - started
          - completed
          - failed
        active:
          type: boolean
          description: Whether webhook is actively sending or disabled
      additionalProperties: false
    product_channel_template_summary:
      required:
      - created_at
      - id
      - name
      - product_channel_id
      - updated_at
      type: object
      properties:
        id:
          type: number
          description: Product Channel Template ID
        name:
          type: string
          description: Product Channel Template Name
        product_channel_id:
          type: number
          description: Associated Product Channel ID
        file_name_export_format:
          type: string
          description: Export file name format template
          nullable: true
        image_export_size:
          type: string
          description: Export image size
          nullable: true
        created_at:
          type: string
          description: Product Channel Template creation timestamp
          format: date-time
        updated_at:
          type: string
          description: Product Channel Template last update timestamp
          format: date-time
      additionalProperties: false
    product_channel_template:
      required:
      - created_at
      - id
      - name
      - product_channel_id
      - updated_at
      type: object
      properties:
        id:
          type: number
          description: Product Channel Template ID
        name:
          type: string
          description: Product Channel Template Name
        product_channel_id:
          type: number
          description: Associated Product Channel ID
        file_name_export_format:
          type: string
          description: Export file name format template
          nullable: true
        image_export_size:
          type: string
          description: Export image size
          nullable: true
        created_at:
          type: string
          description: Product Channel Template creation timestamp
          format: date-time
        updated_at:
          type: string
          description: Product Channel Template last update timestamp
          format: date-time
        custom_attribute_mappings:
          type: array
          description: Array of custom attribute mappings for this template
          example:
          - name: Name
            product_custom_attribute_id: 17
            required: false
          - name: SKU
            product_custom_attribute_id: 18
            required: true
          - name: Image
            product_custom_attribute_id: 49
            required: false
          - name: Unmapped Attribute
            required: false
          items:
            $ref: "#/components/schemas/custom_attribute_mapping"
      additionalProperties: false
    custom_attribute_mapping:
      required:
      - name
      - product_custom_attribute_id
      type: object
      properties:
        name:
          type: string
          description: Name of the custom attribute mapping
        product_custom_attribute_id:
          type: number
          description: ID of the associated product custom attribute
          nullable: true
        required:
          type: boolean
          description: Whether this attribute mapping is required
      additionalProperties: false
    product_channel_templates_response:
      required:
      - Product Channel Templates
      type: object
      properties:
        product_channel_templates:
          type: array
          description: Array of Product Channel Templates
          items:
            $ref: "#/components/schemas/product_channel_template_summary"
      additionalProperties: false
    inline_response_200:
      type: object
      properties:
        dimensions:
          type: array
          description: Array of Dimensions
          items:
            type: string
      additionalProperties: false
    dimensions_body:
      required:
      - name
      type: object
      properties:
        name:
          type: string
          description: Dimension Name
    dimensions_body_1:
      required:
      - name
      type: object
      properties:
        name:
          type: string
          description: Dimension Name
    dimensions_id_body:
      type: object
      properties:
        name:
          type: string
          description: Dimension Name
    dimensions_id_body_1:
      type: object
      properties:
        name:
          type: string
          description: Dimension Name
    dimensions_id_body_2:
      type: object
      properties:
        name:
          type: string
          description: Dimension Name
    dimensions_id_body_3:
      type: object
      properties:
        name:
          type: string
          description: Dimension Name
    import_settings_body:
      type: object
      properties:
        custom_attribute_mappings[header_name]:
          type: number
          description: "Key is CSV header, value is product custom attribute ID"
        variation_formatting[group_by][columns]:
          type: array
          description: Column headers to group by
          items:
            type: string
        variation_formatting[group_by][parent_key]:
          type: string
          description: Column header for parent SKU
        variation_formatting[group_by][child_key]:
          type: string
          description: Column header for child SKU reference
        variation_formatting[dimensions][primary][dimension]:
          type: string
          description: Dimension column header
        variation_formatting[dimensions][primary][dimension_option]:
          type: string
          description: Dimension option column header
        variation_formatting[dimensions][secondary][dimension]:
          type: string
          description: Dimension column header
        variation_formatting[dimensions][secondary][dimension_option]:
          type: string
          description: Dimension option column header
        variation_formatting[dimensions][tertiary][dimension]:
          type: string
          description: Dimension column header
        variation_formatting[dimensions][tertiary][dimension_option]:
          type: string
          description: Dimension option column header
    import_settings_body_1:
      type: object
      properties:
        custom_attribute_mappings[header_name]:
          type: number
          description: "Key is CSV header, value is product custom attribute ID"
        variation_formatting[group_by][columns]:
          type: array
          description: Column headers to group by
          items:
            type: string
        variation_formatting[group_by][parent_key]:
          type: string
          description: Column header for parent SKU
        variation_formatting[group_by][child_key]:
          type: string
          description: Column header for child SKU reference
        variation_formatting[dimensions][primary][dimension]:
          type: string
          description: Dimension column header
        variation_formatting[dimensions][primary][dimension_option]:
          type: string
          description: Dimension option column header
        variation_formatting[dimensions][secondary][dimension]:
          type: string
          description: Dimension column header
        variation_formatting[dimensions][secondary][dimension_option]:
          type: string
          description: Dimension option column header
        variation_formatting[dimensions][tertiary][dimension]:
          type: string
          description: Dimension column header
        variation_formatting[dimensions][tertiary][dimension_option]:
          type: string
          description: Dimension option column header
    inline_response_200_1:
      required:
      - channel_format_id
      - channel_template_id
      type: object
      properties:
        channel_template_id:
          type: number
          description: ID of the configured channel template
        channel_format_id:
          type: number
          description: ID of the configured format
      additionalProperties: false
    imports_body:
      required:
      - channel_format_id
      - channel_template_id
      - file
      type: object
      properties:
        file:
          type: string
          description: The CSV file to import (multipart form data)
        channel_template_id:
          type: string
          description: Channel template ID that contains the custom attribute mappings
        channel_format_id:
          type: string
          description: Channel format ID that contains the variation format settings
        product_type_id:
          type: string
          description: Product type ID to assign to imported products
        product_category_id:
          type: string
          description: Product category ID to assign to imported products
        product_category_header:
          type: string
          description: Product category header in CSV to use to dynamically assign the product category (max 255 chars)
        product_category_id_header:
          type: string
          description: Product category ID header in CSV to use to dynamically assign the product category (max 255 chars)
    imports_body_1:
      required:
      - channel_format_id
      - channel_template_id
      - file
      type: object
      properties:
        file:
          type: string
          description: The CSV file to import (multipart form data)
        channel_template_id:
          type: string
          description: Channel template ID that contains the custom attribute mappings
        channel_format_id:
          type: string
          description: Channel format ID that contains the variation format settings
        product_type_id:
          type: string
          description: Product type ID to assign to imported products
        product_category_id:
          type: string
          description: Product category ID to assign to imported products
        product_category_header:
          type: string
          description: Product category header in CSV to use to dynamically assign the product category (max 255 chars)
        product_category_id_header:
          type: string
          description: Product category ID header in CSV to use to dynamically assign the product category (max 255 chars)
    inline_response_200_2:
      required:
      - Product Catalogs
      type: object
      properties:
        product_catalogs:
          type: array
          description: Array of Product Catalogs
          items:
            type: string
      additionalProperties: false
    product_catalogs_body:
      required:
      - name
      type: object
      properties:
        name:
          type: string
          description: Product Catalog Name
        summary:
          type: string
          description: Product Catalog Summary
    product_catalogs_body_1:
      required:
      - name
      type: object
      properties:
        name:
          type: string
          description: Product Catalog Name
        summary:
          type: string
          description: Product Catalog Summary
    product_catalogs_id_body:
      type: object
      properties:
        name:
          type: string
          description: Product Catalog Name
        summary:
          type: string
          description: Product Catalog Summary
    product_catalogs_id_body_1:
      type: object
      properties:
        name:
          type: string
          description: Product Catalog Name
        summary:
          type: string
          description: Product Catalog Summary
    product_catalogs_id_body_2:
      type: object
      properties:
        name:
          type: string
          description: Product Catalog Name
        summary:
          type: string
          description: Product Catalog Summary
    product_catalogs_id_body_3:
      type: object
      properties:
        name:
          type: string
          description: Product Catalog Name
        summary:
          type: string
          description: Product Catalog Summary
    product_channel_templates_body:
      required:
      - name
      - product_channel_id
      type: object
      properties:
        name:
          type: string
          description: Product Channel Template Name
        product_channel_id:
          type: number
          description: Product Channel ID
        custom_attribute_mappings:
          type: array
          description: Mapping of Channel Template Headers to Product Custom Attributes
          items:
            $ref: "#/components/schemas/custom_attribute_mapping"
    product_channel_templates_product_channel_template_id_body:
      type: object
      properties:
        name:
          type: string
          description: Product Channel Template Name
        custom_attribute_mappings:
          type: array
          description: Mapping of Channel Template Headers to Product Custom Attributes
          items:
            $ref: "#/components/schemas/custom_attribute_mapping"
    inline_response_200_3:
      type: object
      properties:
        products:
          type: array
          description: Array of Products in this Channel Template
          items:
            $ref: "#/components/schemas/inline_response_200_3_products"
      additionalProperties: false
    product_channel_template_id_products_body:
      required:
      - product_id
      type: object
      properties:
        product_id:
          type: integer
          description: Product ID to add to the channel template
          example: 1
    inline_response_200_4:
      type: object
      properties:
        id:
          type: integer
          description: Product ID
        product_category_id:
          type: integer
          description: Product category ID
        product_type_id:
          type: integer
          description: Product type ID
        has_variants:
          type: boolean
          description: Whether the product has variants
        dimension1_id:
          type: integer
          description: First dimension ID
          nullable: true
        dimension2_id:
          type: integer
          description: Second dimension ID
          nullable: true
        dimension3_id:
          type: integer
          description: Third dimension ID
          nullable: true
        created_at:
          type: string
          description: Creation timestamp
          format: date-time
        updated_at:
          type: string
          description: Last update timestamp
          format: date-time
        user_id:
          type: string
          description: User ID associated with the product
        product_custom_attributes:
          type: array
          description: Array of general custom attributes for the product
          items:
            $ref: "#/components/schemas/inline_response_200_4_product_custom_attributes"
      additionalProperties: false
    inline_response_200_5:
      type: object
      properties:
        id:
          type: integer
          example: 1
        product_category_id:
          type: integer
          example: 1
        product_type_id:
          type: integer
          example: 1
        has_variants:
          type: boolean
          example: true
        dimension1_id:
          type: integer
          example: 1
        dimension2_id:
          type: integer
          example: 2
        dimension3_id:
          type: integer
          example: 3
        created_at:
          type: string
          format: date-time
          example: 2021-08-01T00:00:00Z
        updated_at:
          type: string
          format: date-time
          example: 2021-08-01T00:00:00Z
        user_id:
          type: string
          example: 123e4567e89b12d3a456
        product_custom_attributes:
          type: array
          example:
          - name: name
            value: Product 1
            data_type: text
            product_custom_attribute_id: 1
          - name: sku
            value: SKU1
            data_type: text
            product_custom_attribute_id: 2
          - name: Price
            value: "10.00"
            data_type: text
            product_custom_attribute_id: 3
            product_attribute_group_id: 1
          - name: An Image
            data_type: image
            asset_ids:
            - abc123
            - def234
            product_custom_attribute_id: 4
            product_attribute_group_id: 2
          items:
            $ref: "#/components/schemas/inline_response_200_5_product_custom_attributes"
        variants:
          type: array
          example:
          - id: 5
            dimension_options:
              primary:
                name: Color
                value: Red
                dimension_id: 1
                dimension_option_id: 1
              secondary:
                name: Size
                value: Small
                dimension_id: 2
                dimension_option_id: 2
            product_custom_attributes:
            - name: name
              value: Product 1 - Red/Small
              data_type: text
              product_custom_attribute_id: 1
            - name: sku
              value: 1-red-small
              data_type: text
              product_custom_attribute_id: 2
            - name: Price
              value: "11.00"
              data_type: text
              product_custom_attribute_id: 3
              product_attribute_group_id: 1
          - id: 6
            dimension_options:
              primary:
                name: Color
                value: Blue
                dimension_id: 1
                dimension_option_id: 1
              secondary:
                name: Size
                value: Large
                dimension_id: 2
                dimension_option_id: 2
            product_custom_attributes:
            - name: name
              value: Product 1 - Blue/Large
              data_type: text
              product_custom_attribute_id: 1
            - name: sku
              value: 1-blue-large
              data_type: text
              product_custom_attribute_id: 2
            - name: Price
              value: "12.00"
              data_type: text
              product_custom_attribute_id: 3
              product_attribute_group_id: 1
          items:
            $ref: "#/components/schemas/inline_response_200_5_variants"
        product_assets:
          type: array
          example:
          - asset_id: e29b41d4a7166655440000
            product_ids:
            - 1
            - 2
            - 3
            - 4
            - 5
          items:
            $ref: "#/components/schemas/inline_response_200_5_product_assets"
    inline_response_201:
      type: object
      properties:
        message:
          type: string
          example: Your channel template export is being processed. You will receive an email when it is complete
      additionalProperties: false
    inline_response_422:
      type: object
      properties:
        error:
          type: string
          example: A channel template export is already in the works. Please try again later.
      additionalProperties: false
    products_channel_templates_body:
      required:
      - operation
      - product_channel_template_id
      - product_ids
      type: object
      properties:
        operation:
          type: string
          description: The operation to perform
          example: add
          enum:
          - add
          - remove
        product_channel_template_id:
          type: integer
          description: Product Channel Template ID
          example: 1
        product_ids:
          type: array
          description: Array of Product IDs to add to or remove from the template
          example:
          - 1
          - 2
          - 3
          - 4
          - 5
          items:
            type: integer
    inline_response_200_6:
      required:
      - Products
      type: object
      properties:
        products:
          type: array
          description: Array of Products
          items:
            $ref: "#/components/schemas/inline_response_200_6_products"
      additionalProperties: false
    products_product_catalogs_body:
      required:
      - operation
      - product_catalog_id
      - product_ids
      type: object
      properties:
        operation:
          type: string
          description: The operation to perform
          example: add
          enum:
          - add
          - remove
        product_catalog_id:
          type: integer
          description: Product Catalog ID
          example: 1
        product_ids:
          type: array
          description: Array of Product IDs to add to or remove from the catalog
          example:
          - 1
          - 2
          - 3
          - 4
          - 5
          items:
            type: integer
    inline_response_200_7:
      required:
      - Product Categories
      type: object
      properties:
        product_categories:
          type: array
          description: Array of Product Categories
          items:
            type: string
      additionalProperties: false
    inline_response_200_8:
      required:
      - Product Custom Attributes
      type: object
      properties:
        product_custom_attributes:
          type: array
          description: Array of Product Custom Attributes
          items:
            type: string
      additionalProperties: false
    product_custom_attributes_body:
      required:
      - name
      type: object
      properties:
        name:
          type: string
          description: Product Custom Attribute Name
    product_custom_attributes_body_1:
      required:
      - name
      type: object
      properties:
        name:
          type: string
          description: Product Custom Attribute Name
    inline_response_200_9:
      required:
      - data_type
      - id
      - name
      - position
      - product_attribute_group_id
      type: object
      properties:
        id:
          type: number
          description: Product Custom Attribute ID
        name:
          type: string
          description: Product Custom Attribute Name
        data_type:
          type: string
          description: Product Custom Attribute Data type
          enum:
          - text
          - number
          - date
          - image
        product_attribute_group_id:
          type: number
          description: Product Custom Attribute Group ID
        position:
          type: number
          description: Product Custom Attribute position within its group
      additionalProperties: false
    inline_response_200_10:
      required:
      - data_type
      - id
      - position
      - product_attribute_group_id
      type: object
      properties:
        id:
          type: number
          description: Product Custom Attribute ID
        name:
          type: string
          description: Product Custom Attribute Name
        data_type:
          type: string
          description: Product Custom Attribute Data type
          enum:
          - text
          - number
          - date
          - image
        product_attribute_group_id:
          type: number
          description: Product Custom Attribute Group ID
        position:
          type: number
          description: Product Custom Attribute position within its group
      additionalProperties: false
    product_custom_attributes_id_body:
      type: object
      properties:
        name:
          type: string
          description: Product Custom Attribute Name
    product_custom_attributes_id_body_1:
      type: object
      properties:
        name:
          type: string
          description: Product Custom Attribute Name
    product_custom_attributes_id_body_2:
      type: object
      properties:
        name:
          type: string
          description: Product Custom Attribute Name
    product_custom_attributes_id_body_3:
      type: object
      properties:
        name:
          type: string
          description: Product Custom Attribute Name
    inline_response_200_11:
      required:
      - Product Share Links
      type: object
      properties:
        product_share_links:
          type: array
          description: Array of Product Share Links
          items:
            type: string
      additionalProperties: false
    product_share_links_body:
      required:
      - product_id
      type: object
      properties:
        product_id:
          type: number
          description: ID of the Product to share
        custom_name:
          type: string
          description: Optional custom name for the Share Link
        expiration_date:
          type: string
          description: Optional expiration date for the Share Link
    product_share_links_body_1:
      required:
      - product_id
      type: object
      properties:
        product_id:
          type: number
          description: ID of the Product to share
        custom_name:
          type: string
          description: Optional custom name for the Share Link
        expiration_date:
          type: string
          description: Optional expiration date for the Share Link
    inline_response_200_12:
      type: object
      properties:
        product_types:
          type: array
          description: Array of Product Types
          items:
            type: string
      additionalProperties: false
    product_types_body:
      required:
      - name
      type: object
      properties:
        name:
          type: string
          description: Product Type Name
    product_types_body_1:
      required:
      - name
      type: object
      properties:
        name:
          type: string
          description: Product Type Name
    inline_response_201_1:
      required:
      - id
      - name
      - Product Custom Attributes
      type: object
      properties:
        id:
          type: number
          description: Product Type ID
        name:
          type: string
          description: Product Type Name
        product_custom_attributes:
          type: array
          description: Array of Non-Image Custom Attributes associated with this Type
          items:
            type: string
      additionalProperties: false
    inline_response_200_13:
      required:
      - id
      - Product Custom Attributes
      type: object
      properties:
        id:
          type: number
          description: Product Type ID
        name:
          type: string
          description: Product Type Name
        product_custom_attributes:
          type: array
          description: Array of Non-Image Custom Attributes associated with this Type
          items:
            type: string
      additionalProperties: false
    product_types_id_body:
      type: object
      properties:
        name:
          type: string
          description: Product Type Name
    product_types_id_body_1:
      type: object
      properties:
        name:
          type: string
          description: Product Type Name
    product_types_id_body_2:
      type: object
      properties:
        name:
          type: string
          description: Product Type Name
    product_types_id_body_3:
      type: object
      properties:
        name:
          type: string
          description: Product Type Name
    inline_response_200_14:
      required:
      - Products
      type: object
      properties:
        products:
          type: array
          description: Array of Products
          items:
            $ref: "#/components/schemas/inline_response_200_14_products"
      additionalProperties: false
    products_product_custom_attributes:
      type: object
      properties:
        product_custom_attribute_id:
          type: number
        value:
          type: string
    products_body:
      type: object
      properties:
        product_category_id:
          type: number
          description: Product Category ID
        product_type_id:
          type: number
          description: Product Type ID
        has_variants:
          type: boolean
          description: Whether there are variants associated with this product
        dimension1_id:
          type: number
          description: Primary Dimension ID
        dimension2_id:
          type: number
          description: Secondary Dimension ID
        dimension3_id:
          type: number
          description: Tertiary Dimension ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            $ref: "#/components/schemas/products_product_custom_attributes"
    products_body_1:
      type: object
      properties:
        product_category_id:
          type: number
          description: Product Category ID
        product_type_id:
          type: number
          description: Product Type ID
        has_variants:
          type: boolean
          description: Whether there are variants associated with this product
        dimension1_id:
          type: number
          description: Primary Dimension ID
        dimension2_id:
          type: number
          description: Secondary Dimension ID
        dimension3_id:
          type: number
          description: Tertiary Dimension ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            type: string
    inline_response_201_2:
      type: object
      properties:
        id:
          type: integer
          example: 1
        product_category_id:
          type: integer
          example: 1
        product_type_id:
          type: integer
          example: 1
        has_variants:
          type: boolean
          example: true
        dimension1_id:
          type: integer
          example: 1
        dimension2_id:
          type: integer
          example: 2
        dimension3_id:
          type: integer
          example: 3
        created_at:
          type: string
          format: date-time
          example: 2021-08-01T00:00:00Z
        updated_at:
          type: string
          format: date-time
          example: 2021-08-01T00:00:00Z
        user_id:
          type: string
          example: 123e4567e89b12d3a456
        product_custom_attributes:
          type: array
          example:
          - name: name
            value: Product 1
            data_type: text
            product_custom_attribute_id: 1
          - name: sku
            value: SKU1
            data_type: text
            product_custom_attribute_id: 2
          - name: Price
            value: "10.00"
            data_type: text
            product_custom_attribute_id: 3
            product_attribute_group_id: 1
          - name: An Image
            data_type: image
            asset_ids:
            - abc123
            - def234
            product_custom_attribute_id: 4
            product_attribute_group_id: 2
          items:
            $ref: "#/components/schemas/inline_response_200_5_product_custom_attributes"
        variants:
          type: array
          example:
          - id: 3
            dimension_options:
              primary:
                name: Color
                value: Blue
                dimension_id: 1
                dimension_option_id: 1
              secondary:
                name: Size
                value: Large
                dimension_id: 2
                dimension_option_id: 2
            product_custom_attributes:
            - name: name
              value: Product 1 - Blue/Large
              data_type: text
              product_custom_attribute_id: 1
            - name: sku
              value: 1-blue-large
              data_type: text
              product_custom_attribute_id: 2
            - name: Price
              value: "12.00"
              data_type: text
              product_custom_attribute_id: 3
              product_attribute_group_id: 1
          items:
            $ref: "#/components/schemas/inline_response_201_2_variants"
        product_assets:
          type: array
          example:
          - asset_id: e29b41d4a7166655440000
            product_ids:
            - 1
            - 2
            - 3
            - 4
            - 5
          items:
            $ref: "#/components/schemas/inline_response_200_5_product_assets"
    products_id_body:
      type: object
      properties:
        product_category_id:
          type: number
          description: Product Category ID
        product_type_id:
          type: number
          description: Product Type ID
        has_variants:
          type: boolean
          description: Whether there are variants associated with this product
        dimension1_id:
          type: number
          description: Primary Dimension ID
        dimension2_id:
          type: number
          description: Secondary Dimension ID
        dimension3_id:
          type: number
          description: Tertiary Dimension ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            $ref: "#/components/schemas/products_product_custom_attributes"
    products_id_body_1:
      type: object
      properties:
        product_category_id:
          type: number
          description: Product Category ID
        product_type_id:
          type: number
          description: Product Type ID
        has_variants:
          type: boolean
          description: Whether there are variants associated with this product
        dimension1_id:
          type: number
          description: Primary Dimension ID
        dimension2_id:
          type: number
          description: Secondary Dimension ID
        dimension3_id:
          type: number
          description: Tertiary Dimension ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            type: string
    products_id_body_2:
      type: object
      properties:
        product_category_id:
          type: number
          description: Product Category ID
        product_type_id:
          type: number
          description: Product Type ID
        has_variants:
          type: boolean
          description: Whether there are variants associated with this product
        dimension1_id:
          type: number
          description: Primary Dimension ID
        dimension2_id:
          type: number
          description: Secondary Dimension ID
        dimension3_id:
          type: number
          description: Tertiary Dimension ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            $ref: "#/components/schemas/products_product_custom_attributes"
    products_id_body_3:
      type: object
      properties:
        product_category_id:
          type: number
          description: Product Category ID
        product_type_id:
          type: number
          description: Product Type ID
        has_variants:
          type: boolean
          description: Whether there are variants associated with this product
        dimension1_id:
          type: number
          description: Primary Dimension ID
        dimension2_id:
          type: number
          description: Secondary Dimension ID
        dimension3_id:
          type: number
          description: Tertiary Dimension ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            type: string
    inline_response_200_15:
      required:
      - product_assets
      - Variants
      type: object
      properties:
        variants:
          type: array
          description: Array of Product Variants
          items:
            $ref: "#/components/schemas/inline_response_200_15_variants"
        product_assets:
          type: array
          description: Array of product assets
          items:
            $ref: "#/components/schemas/inline_response_200_15_product_assets"
      additionalProperties: false
      example:
        variants:
        - id: 1
          dimension_options:
            primary:
              name: Size
              value: Small
              dimension_id: 1
              dimension_option_id: 1
            secondary:
              name: Color
              value: Red
              dimension_id: 2
              dimension_option_id: 2
          product_custom_attributes:
          - name: name
            value: Red Small Shirt
            data_type: text
            product_custom_attribute_id: 1
            product_attribute_group_id: 1
          - name: sku
            value: RS-S
            data_type: text
            product_custom_attribute_id: 2
            product_attribute_group_id: 1
        - id: 2
          dimension_options:
            primary:
              name: Size
              value: Large
              dimension_id: 1
              dimension_option_id: 3
            secondary:
              name: Color
              value: Blue
              dimension_id: 2
              dimension_option_id: 4
          product_custom_attributes:
          - name: name
            value: Blue Large Shirt
            data_type: text
            product_custom_attribute_id: 3
            product_attribute_group_id: 1
          - name: sku
            value: BL-L
            data_type: text
            product_custom_attribute_id: 4
            product_attribute_group_id: 1
        product_assets:
        - asset_id: e29b41d4a7166655440000
          product_ids:
          - 1
          - 2
    productsproduct_idvariants_product_custom_attributes:
      type: object
      properties:
        product_custom_attribute_id:
          type: string
          description: Attribute name
        value:
          type: string
          description: Attribute value
    product_id_variants_body:
      required:
      - "dimension_options[primary][dimension_option_id]"
      type: object
      properties:
        dimension_options[primary][dimension_option_id]:
          type: number
          description: Primary Dimension Option ID
        dimension_options[primary][dimension_id]:
          type: number
          description: "Primary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_id]:
          type: number
          description: "Secondary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_option_id]:
          type: number
          description: Secondary Dimension Option ID
        dimension_options[tertiary][dimension_id]:
          type: number
          description: "Tertiary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[tertiary][dimension_option_id]:
          type: number
          description: Tertiary Dimension Option ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            $ref: "#/components/schemas/productsproduct_idvariants_product_custom_attributes"
    product_id_variants_body_1:
      required:
      - "dimension_options[primary][dimension_option_id]"
      type: object
      properties:
        dimension_options[primary][dimension_option_id]:
          type: number
          description: Primary Dimension Option ID
        dimension_options[primary][dimension_id]:
          type: number
          description: "Primary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_id]:
          type: number
          description: "Secondary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_option_id]:
          type: number
          description: Secondary Dimension Option ID
        dimension_options[tertiary][dimension_id]:
          type: number
          description: "Tertiary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[tertiary][dimension_option_id]:
          type: number
          description: Tertiary Dimension Option ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            type: string
    inline_response_200_16:
      required:
      - dimension_options
      - id
      - product_assets
      - Product Custom Attributes
      type: object
      properties:
        id:
          type: integer
          description: Variant ID
        dimension_options:
          $ref: "#/components/schemas/inline_response_200_16_dimension_options"
        product_custom_attributes:
          type: array
          description: Array of product custom attributes
          items:
            $ref: "#/components/schemas/inline_response_200_16_product_custom_attributes"
        product_assets:
          type: array
          description: Array of product assets
          items:
            $ref: "#/components/schemas/inline_response_200_15_product_assets"
      additionalProperties: false
      example:
        id: 1
        dimension_options:
          primary:
            name: Size
            value: Small
            dimension_id: 1
            dimension_option_id: 1
          secondary:
            name: Color
            value: Red
            dimension_id: 2
            dimension_option_id: 2
        product_custom_attributes:
        - name: name
          value: Red Small Shirt
          data_type: text
          product_custom_attribute_id: 1
          product_attribute_group_id: 1
        - name: sku
          value: RS-S
          data_type: text
          product_custom_attribute_id: 2
          product_attribute_group_id: 1
        - name: Description
          value: This is a red small shirt
          data_type: text
          product_custom_attribute_id: 3
          product_attribute_group_id: 2
        - name: An Image
          data_type: image
          asset_ids:
          - abc123
          - def234
          product_custom_attribute_id: 4
          product_attribute_group_id: 2
        product_assets:
        - asset_id: e29b41d4a7166655440000
          product_ids:
          - 1
        - asset_id: f47ac10b58cc4372a5
          product_ids:
          - 1
    productsproduct_idvariantsid_product_custom_attributes:
      type: object
      properties:
        product_custom_attribute_id:
          type: number
        value:
          type: string
        data_type:
          type: string
    variants_id_body:
      required:
      - "dimension_options[primary][dimension_option_id]"
      type: object
      properties:
        dimension_options[primary][dimension_option_id]:
          type: number
          description: Primary Dimension Option ID
        dimension_options[primary][dimension_id]:
          type: number
          description: "Primary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_id]:
          type: number
          description: "Secondary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_option_id]:
          type: number
          description: Secondary Dimension Option ID
        dimension_options[tertiary][dimension_id]:
          type: number
          description: "Tertiary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[tertiary][dimension_option_id]:
          type: number
          description: Tertiary Dimension Option ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            $ref: "#/components/schemas/productsproduct_idvariantsid_product_custom_attributes"
    variants_id_body_1:
      required:
      - "dimension_options[primary][dimension_option_id]"
      type: object
      properties:
        dimension_options[primary][dimension_option_id]:
          type: number
          description: Primary Dimension Option ID
        dimension_options[primary][dimension_id]:
          type: number
          description: "Primary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_id]:
          type: number
          description: "Secondary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_option_id]:
          type: number
          description: Secondary Dimension Option ID
        dimension_options[tertiary][dimension_id]:
          type: number
          description: "Tertiary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[tertiary][dimension_option_id]:
          type: number
          description: Tertiary Dimension Option ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            $ref: "#/components/schemas/productsproduct_idvariantsid_product_custom_attributes"
    variants_id_body_2:
      required:
      - "dimension_options[primary][dimension_option_id]"
      type: object
      properties:
        dimension_options[primary][dimension_option_id]:
          type: number
          description: Primary Dimension Option ID
        dimension_options[primary][dimension_id]:
          type: number
          description: "Primary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_id]:
          type: number
          description: "Secondary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_option_id]:
          type: number
          description: Secondary Dimension Option ID
        dimension_options[tertiary][dimension_id]:
          type: number
          description: "Tertiary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[tertiary][dimension_option_id]:
          type: number
          description: Tertiary Dimension Option ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            $ref: "#/components/schemas/productsproduct_idvariantsid_product_custom_attributes"
    variants_id_body_3:
      required:
      - "dimension_options[primary][dimension_option_id]"
      type: object
      properties:
        dimension_options[primary][dimension_option_id]:
          type: number
          description: Primary Dimension Option ID
        dimension_options[primary][dimension_id]:
          type: number
          description: "Primary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_id]:
          type: number
          description: "Secondary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[secondary][dimension_option_id]:
          type: number
          description: Secondary Dimension Option ID
        dimension_options[tertiary][dimension_id]:
          type: number
          description: "Tertiary Dimension ID (optional, will be inferred from dimension_option_id)"
        dimension_options[tertiary][dimension_option_id]:
          type: number
          description: Tertiary Dimension Option ID
        product_custom_attributes:
          type: array
          description: Array of product attributes' data
          items:
            $ref: "#/components/schemas/productsproduct_idvariantsid_product_custom_attributes"
    inline_response_200_17:
      required:
      - Webhook Events
      type: object
      properties:
        webhook_events:
          type: array
          description: Array of Webhook Events
          items:
            type: string
      additionalProperties: false
    inline_response_200_18:
      required:
      - Webhooks
      type: object
      properties:
        webhooks:
          type: array
          description: Array of Webhooks
          items:
            type: string
      additionalProperties: false
    webhooks_body:
      required:
      - event
      - resource
      - url
      type: object
      properties:
        url:
          type: string
          description: "Webhook URL endpoint (including protocol e.g., https://)"
        resource:
          type: string
          description: Resource type to monitor
          enum:
          - product
          - variant
          - import
        event:
          type: string
          description: Event to monitor (specific to resource)
          enum:
          - created
          - updated
          - deleted
          - started
          - completed
          - failed
        active:
          type: boolean
          description: Whether webhook is actively sending or disabled
        secret:
          type: string
          description: Your secret token for webhook authentication
    webhooks_body_1:
      required:
      - event
      - resource
      - url
      type: object
      properties:
        url:
          type: string
          description: "Webhook URL endpoint (including protocol e.g., https://)"
        resource:
          type: string
          description: Resource type to monitor
          enum:
          - product
          - variant
          - import
        event:
          type: string
          description: Event to monitor (specific to resource)
          enum:
          - created
          - updated
          - deleted
          - started
          - completed
          - failed
        active:
          type: boolean
          description: Whether webhook is actively sending or disabled
        secret:
          type: string
          description: Your secret token for webhook authentication
    inline_response_201_3:
      required:
      - active
      - event
      - id
      - resource
      - secret
      - url
      type: object
      properties:
        id:
          type: number
          description: Webhook ID
        url:
          type: string
          description: "Webhook URL endpoint (including protocol e.g., https://)"
        resource:
          type: string
          description: Resource type to monitor
          enum:
          - product
          - variant
          - import
        event:
          type: string
          description: Event to monitor (specific to resource)
          enum:
          - created
          - updated
          - deleted
          - started
          - completed
          - failed
        active:
          type: boolean
          description: Whether webhook is actively sending or disabled
        secret:
          type: string
          description: "Secret key that you provided or one we generated (store this securely, there's no way to retrieve it again)"
      additionalProperties: false
    webhooks_id_body:
      type: object
      properties:
        url:
          type: string
          description: "Webhook URL endpoint (including protocol e.g., https://)"
        resource:
          type: string
          description: Resource type to monitor
          enum:
          - product
          - variant
          - import
        event:
          type: string
          description: Event to monitor (specific to resource)
          enum:
          - created
          - updated
          - deleted
          - started
          - completed
          - failed
        active:
          type: boolean
          description: Whether webhook is actively sending or disabled
        secret:
          type: string
          description: Your secret token for webhook authentication
    webhooks_id_body_1:
      type: object
      properties:
        url:
          type: string
          description: "Webhook URL endpoint (including protocol e.g., https://)"
        resource:
          type: string
          description: Resource type to monitor
          enum:
          - product
          - variant
          - import
        event:
          type: string
          description: Event to monitor (specific to resource)
          enum:
          - created
          - updated
          - deleted
          - started
          - completed
          - failed
        active:
          type: boolean
          description: Whether webhook is actively sending or disabled
        secret:
          type: string
          description: Your secret token for webhook authentication
    webhooks_id_body_2:
      type: object
      properties:
        url:
          type: string
          description: "Webhook URL endpoint (including protocol e.g., https://)"
        resource:
          type: string
          description: Resource type to monitor
          enum:
          - product
          - variant
          - import
        event:
          type: string
          description: Event to monitor (specific to resource)
          enum:
          - created
          - updated
          - deleted
          - started
          - completed
          - failed
        active:
          type: boolean
          description: Whether webhook is actively sending or disabled
        secret:
          type: string
          description: Your secret token for webhook authentication
    webhooks_id_body_3:
      type: object
      properties:
        url:
          type: string
          description: "Webhook URL endpoint (including protocol e.g., https://)"
        resource:
          type: string
          description: Resource type to monitor
          enum:
          - product
          - variant
          - import
        event:
          type: string
          description: Event to monitor (specific to resource)
          enum:
          - created
          - updated
          - deleted
          - started
          - completed
          - failed
        active:
          type: boolean
          description: Whether webhook is actively sending or disabled
        secret:
          type: string
          description: Your secret token for webhook authentication
    options_id_body:
      type: object
      properties:
        name:
          type: string
          description: Dimension Option Name
        position:
          type: string
          description: Dimension Option Position
    options_id_body_1:
      type: object
      properties:
        name:
          type: string
          description: Dimension Option Name
        position:
          type: string
          description: Dimension Option Position
    inline_response_200_19:
      required:
      - id
      type: object
      properties:
        id:
          type: number
          description: Dimension Option ID
        name:
          type: string
          description: Dimension Option Name
        position:
          type: string
          description: Dimension Option Position
      additionalProperties: false
    options_id_body_2:
      type: object
      properties:
        name:
          type: string
          description: Dimension Option Name
        position:
          type: string
          description: Dimension Option Position
    options_id_body_3:
      type: object
      properties:
        name:
          type: string
          description: Dimension Option Name
        position:
          type: string
          description: Dimension Option Position
    dimension_id_options_body:
      required:
      - name
      type: object
      properties:
        name:
          type: string
          description: Dimension Option Name
        position:
          type: string
          description: Dimension Option Position
    dimension_id_options_body_1:
      required:
      - name
      type: object
      properties:
        name:
          type: string
          description: Dimension Option Name
        position:
          type: string
          description: Dimension Option Position
    inline_response_200_20:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: number
          description: Dimension Option ID
        name:
          type: string
          description: Dimension Option Name
        position:
          type: string
          description: Dimension Option Position
      additionalProperties: false
    product_attributes_filter_body:
      type: object
      properties:
        filter[product_type_ids]:
          type: array
          description: Filter by product type IDs
          items:
            type: string
        filter[product_channel_template_ids]:
          type: array
          description: Filter by product channel template IDs
          items:
            type: string
        filter[has_variants]:
          type: boolean
          description: Filter products by variant status
    product_attributes_filter_body_1:
      type: object
      properties:
        filter[product_type_ids]:
          type: array
          description: Filter by product type IDs
          items:
            type: string
        filter[product_channel_template_ids]:
          type: array
          description: Filter by product channel template IDs
          items:
            type: string
        filter[has_variants]:
          type: boolean
          description: Filter products by variant status
    inline_response_200_21:
      type: object
      properties:
        products:
          type: array
          description: "Array of Products in this Catalog, paginated"
          items:
            type: string
      additionalProperties: false
    product_catalog_id_products_body:
      required:
      - product_id
      type: object
      properties:
        product_id:
          type: integer
          description: Product ID to add to the catalog
          example: 1
    inline_response_200_22:
      required:
      - created_at
      - id
      - product_assets
      - Product Custom Attributes
      - updated_at
      - user_id
      - Variants
      type: object
      properties:
        id:
          type: number
          description: Product ID
        product_category_id:
          type: number
          description: Product Category ID
        product_type_id:
          type: number
          description: Product Type ID
        has_variants:
          type: boolean
          description: Whether there are variants associated with this product
        dimension1_id:
          type: number
          description: Primary Dimension ID
        dimension2_id:
          type: number
          description: Secondary Dimension ID
        dimension3_id:
          type: number
          description: Tertiary Dimension ID
        created_at:
          type: string
          description: Created At
        updated_at:
          type: string
          description: Updated At
        user_id:
          type: string
          description: User ID of the Product creator
        product_custom_attributes:
          type: array
          description: "Array of product attributes' data. On Products Index, this is only General Attributes data"
          items:
            type: string
        variants:
          type: array
          description: Array of Product's Variants
          items:
            type: string
        product_assets:
          type: array
          description: Array of product assets
          items:
            type: string
      additionalProperties: false
    product_id_assets_body:
      required:
      - asset_ids
      type: object
      properties:
        asset_ids:
          maxItems: 50
          minItems: 1
          type: array
          description: Array of Asset ID Strings
          items:
            type: string
    variant_id_assets_body:
      required:
      - asset_ids
      type: object
      properties:
        asset_ids:
          maxItems: 50
          minItems: 1
          type: array
          description: Array of Asset ID Strings
          items:
            type: string
    inline_response_200_3_product_custom_attributes:
      type: object
      properties:
        name:
          type: string
          description: Attribute name
        value:
          type: string
          description: Attribute value
        data_type:
          type: string
          description: Data type of the attribute
        product_custom_attribute_id:
          type: integer
          description: Custom attribute ID
        product_attribute_group_id:
          type: integer
          description: Attribute group ID
          nullable: true
    inline_response_200_3_dimension_options_primary:
      type: object
      properties:
        name:
          type: string
          description: Dimension name
        value:
          type: string
          description: Dimension value
        dimension_id:
          type: integer
          description: Dimension ID
        dimension_option_id:
          type: integer
          description: Dimension option ID
      nullable: true
    inline_response_200_3_dimension_options:
      type: object
      properties:
        primary:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options_primary"
        secondary:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options_primary"
        tertiary:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options_primary"
      description: Dimension options for the variant
    inline_response_200_3_variants:
      type: object
      properties:
        id:
          type: integer
          description: Variant ID
        dimension_options:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options"
    inline_response_200_3_products:
      type: object
      properties:
        id:
          type: integer
          description: Product ID
        product_category_id:
          type: integer
          description: Product category ID
        product_type_id:
          type: integer
          description: Product type ID
        has_variants:
          type: boolean
          description: Whether the product has variants
        dimension1_id:
          type: integer
          description: First dimension ID
          nullable: true
        dimension2_id:
          type: integer
          description: Second dimension ID
          nullable: true
        dimension3_id:
          type: integer
          description: Third dimension ID
          nullable: true
        created_at:
          type: string
          description: Creation timestamp
          format: date-time
        updated_at:
          type: string
          description: Last update timestamp
          format: date-time
        user_id:
          type: string
          description: User ID associated with the product
        product_custom_attributes:
          type: array
          description: Array of general custom attributes for the product
          items:
            $ref: "#/components/schemas/inline_response_200_3_product_custom_attributes"
        variants:
          type: array
          description: Array of product variants
          items:
            $ref: "#/components/schemas/inline_response_200_3_variants"
    inline_response_200_4_product_custom_attributes:
      type: object
      properties:
        name:
          type: string
          description: Attribute name
        value:
          type: string
          description: Attribute value
        data_type:
          type: string
          description: Data type of the attribute
        product_custom_attribute_id:
          type: integer
          description: Custom attribute ID
        product_attribute_group_id:
          type: integer
          description: Attribute group ID
          nullable: true
        variants:
          type: array
          description: Array of product variants
          items:
            $ref: "#/components/schemas/inline_response_200_3_variants"
    inline_response_200_5_product_custom_attributes:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
          nullable: true
        data_type:
          type: string
        product_custom_attribute_id:
          type: integer
        product_attribute_group_id:
          type: integer
          nullable: true
        asset_ids:
          type: array
          items:
            type: string
    inline_response_200_5_dimension_options_primary:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
        dimension_id:
          type: integer
        dimension_option_id:
          type: integer
      nullable: true
    inline_response_200_5_dimension_options:
      type: object
      properties:
        primary:
          $ref: "#/components/schemas/inline_response_200_5_dimension_options_primary"
        secondary:
          $ref: "#/components/schemas/inline_response_200_5_dimension_options_primary"
        tertiary:
          $ref: "#/components/schemas/inline_response_200_5_dimension_options_primary"
    inline_response_200_5_product_custom_attributes_1:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
        data_type:
          type: string
        product_custom_attribute_id:
          type: integer
        product_attribute_group_id:
          type: integer
          nullable: true
    inline_response_200_5_variants:
      type: object
      properties:
        id:
          type: integer
        dimension_options:
          $ref: "#/components/schemas/inline_response_200_5_dimension_options"
        product_custom_attributes:
          type: array
          items:
            $ref: "#/components/schemas/inline_response_200_5_product_custom_attributes_1"
    inline_response_200_5_product_assets:
      type: object
      properties:
        asset_id:
          type: string
        product_ids:
          type: array
          items:
            type: integer
    inline_response_200_6_variants:
      type: object
      properties:
        id:
          type: integer
          description: Variant ID
        dimension_options:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options"
        product_custom_attributes:
          type: array
          description: Array of custom attributes for the variant
          items:
            $ref: "#/components/schemas/inline_response_200_3_product_custom_attributes"
      additionalProperties: false
    inline_response_200_6_products:
      type: object
      properties:
        id:
          type: integer
          description: Product ID
        product_category_id:
          type: integer
          description: Product category ID
        product_type_id:
          type: integer
          description: Product type ID
        has_variants:
          type: boolean
          description: Whether the product has variants
        dimension1_id:
          type: integer
          description: First dimension ID
          nullable: true
        dimension2_id:
          type: integer
          description: Second dimension ID
          nullable: true
        dimension3_id:
          type: integer
          description: Third dimension ID
          nullable: true
        created_at:
          type: string
          description: Creation timestamp
          format: date-time
        updated_at:
          type: string
          description: Last update timestamp
          format: date-time
        user_id:
          type: string
          description: User ID associated with the product
        product_custom_attributes:
          type: array
          description: Array of custom attributes for the product
          items:
            $ref: "#/components/schemas/inline_response_200_3_product_custom_attributes"
        variants:
          type: array
          additionalProperties: false
          description: Array of product variants
          items:
            $ref: "#/components/schemas/inline_response_200_6_variants"
    inline_response_200_14_variants:
      type: object
      properties:
        id:
          type: integer
          description: Variant ID
        dimension_options:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options"
        product_custom_attributes:
          type: array
          description: Array of custom attributes for the variant
          items:
            $ref: "#/components/schemas/inline_response_200_3_product_custom_attributes"
    inline_response_200_14_products:
      type: object
      properties:
        id:
          type: integer
          description: Product ID
        product_category_id:
          type: integer
          description: Product category ID
        product_type_id:
          type: integer
          description: Product type ID
        has_variants:
          type: boolean
          description: Whether the product has variants
        dimension1_id:
          type: integer
          description: First dimension ID
          nullable: true
        dimension2_id:
          type: integer
          description: Second dimension ID
          nullable: true
        dimension3_id:
          type: integer
          description: Third dimension ID
          nullable: true
        created_at:
          type: string
          description: Creation timestamp
          format: date-time
        updated_at:
          type: string
          description: Last update timestamp
          format: date-time
        user_id:
          type: string
          description: User ID associated with the product
        product_custom_attributes:
          type: array
          description: Array of custom attributes for the product
          items:
            $ref: "#/components/schemas/inline_response_200_3_product_custom_attributes"
        variants:
          type: array
          description: Array of product variants
          items:
            $ref: "#/components/schemas/inline_response_200_14_variants"
    inline_response_201_2_variants:
      type: object
      properties:
        id:
          type: integer
        dimension_options:
          $ref: "#/components/schemas/inline_response_200_5_dimension_options"
        product_custom_attributes:
          type: array
          items:
            $ref: "#/components/schemas/inline_response_200_5_product_custom_attributes"
    inline_response_200_15_dimension_options:
      type: object
      properties:
        primary:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options_primary"
        secondary:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options_primary"
        tertiary:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options_primary"
    inline_response_200_15_product_custom_attributes:
      type: object
      properties:
        name:
          type: string
          description: Attribute name
        value:
          type: string
          description: Attribute value
        data_type:
          type: string
          description: Data type of the attribute
        product_custom_attribute_id:
          type: integer
          description: Product custom attribute ID
        product_attribute_group_id:
          type: integer
          description: Product attribute group ID
    inline_response_200_15_variants:
      type: object
      properties:
        id:
          type: integer
          description: Variant ID
        dimension_options:
          $ref: "#/components/schemas/inline_response_200_15_dimension_options"
        product_custom_attributes:
          type: array
          description: Array of product custom attributes
          items:
            $ref: "#/components/schemas/inline_response_200_15_product_custom_attributes"
    inline_response_200_15_product_assets:
      type: object
      properties:
        asset_id:
          type: string
          description: Asset ID
        product_ids:
          type: array
          description: Array of product IDs
          items:
            type: integer
    inline_response_200_16_dimension_options:
      type: object
      properties:
        primary:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options_primary"
        secondary:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options_primary"
        tertiary:
          $ref: "#/components/schemas/inline_response_200_3_dimension_options_primary"
      additionalProperties: false
    inline_response_200_16_product_custom_attributes:
      type: object
      properties:
        name:
          type: string
          description: Attribute name
        value:
          type: string
          description: Attribute value
          nullable: true
        data_type:
          type: string
          description: "Data type of the attribute (e.g. text, image)"
        product_custom_attribute_id:
          type: integer
          description: Product custom attribute ID
        product_attribute_group_id:
          type: integer
          description: Product attribute group ID
        asset_ids:
          type: array
          description: Array of asset IDs (for image/asset type attributes)
          items:
            type: string
  securitySchemes:
    cantoOAuth2:
      type: oauth2
      description: >
        Authorize against your own Canto account. Choose the tenant and its
        region in the portal first; the portal fills in the application
        identifier for that region and pre-fills your account name on
        Canto's sign-in page. This is a public-client PKCE flow: no client
        secret is used, and none is held by the portal.
      flows:
        authorizationCode:
          authorizationUrl: https://oauth.canto.com/oauth/api/oauth2/universal2/authorize
          tokenUrl: https://oauth.canto.com/oauth/api/oauth2/universal2/token
          scopes: {}
          x-usePkce: plain
          x-tokenName: accessToken
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: AccessToken
x-original-swagger-version: "2.0"
