> ## Documentation Index
> Fetch the complete documentation index at: https://developer.fabric.inc/llms.txt
> Use this file to discover all available pages before exploring further.

# Bulk Import Products

> Upload a CSV file of products to start a taxonomy workflow for the specified brand/domain.

**Expected CSV columns**
- **title** (required): Product title
- **breadcrumb** (required): Category breadcrumb path
- **sku** (optional): Product SKU
- **category** (optional): Product category
- **description** (optional): Product description
- **images** (optional): Image URLs
- **attribute.\*** (optional): Custom attributes (e.g. `attribute.color`)




## OpenAPI

````yaml product-agent.openapi post /v2/taxonomy-workflow
openapi: 3.0.1
info:
  contact:
    email: support@fabric.inc
    name: fabric Support Team
  description: >
    The Product Agent API helps brands optimize product data for AI-driven
    commerce.

    Monitor how your catalog performs in AI search experiences, enrich product

    content for stronger semantic visibility, and publish optimized data across

    channels. Designed for iterative improvement, Product Agent enables teams to

    measure, refine, and enhance product content as AI shopping behavior
    evolves.
  license:
    name: fabric API License
    url: https://fabric.inc/api-license
  termsOfService: https://fabric.inc/terms-of-use
  title: fabric Orders API
  version: 3.0.0
  x-audience: external-public
servers:
  - url: https://commerceos.aiagents.fabric.inc/api
    description: Production API
security:
  - authorization: []
externalDocs:
  description: Find out more about Product Agent.
  url: https://developer.fabric.inc/product-agent/overview
paths:
  /v2/taxonomy-workflow:
    post:
      summary: Bulk Import Products
      description: >
        Upload a CSV file of products to start a taxonomy workflow for the
        specified brand/domain.


        **Expected CSV columns**

        - **title** (required): Product title

        - **breadcrumb** (required): Category breadcrumb path

        - **sku** (optional): Product SKU

        - **category** (optional): Product category

        - **description** (optional): Product description

        - **images** (optional): Image URLs

        - **attribute.\*** (optional): Custom attributes (e.g.
        `attribute.color`)
      operationId: createTaxonomyWorkflow
      parameters:
        - $ref: '#/components/parameters/DomainHeader'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
              properties:
                file:
                  type: string
                  format: binary
                  description: CSV file containing product rows.
                name:
                  type: string
                  description: Workflow name (auto-generated if omitted).
                  example: My Catalog Upload
                enable_manual_review:
                  type: boolean
                  description: Enable manual review step.
                  default: true
                  example: true
                review_confidence_threshold:
                  type: number
                  format: float
                  description: Confidence threshold from 0.0 to 1.0.
                  minimum: 0
                  maximum: 1
                  default: 0.6
                  example: 0.6
      responses:
        '201':
          description: Workflow created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaxonomyWorkflowResponse'
              example:
                id: a1462a91-f733-45fe-993b-5d0353f33ee3
                brand_id: 268465dd-71f5-4179-959c-9bac01029451
                status: PENDING
                workflow_type: ATTRIBUTE_AND_CATEGORY_MAPPING
                import_document_path: >-
                  taxonomy-workflow/vessel/d6441888-f25d-4acb-8898-07808526ecdb/d6441888-f25d-4acb-8898-07808526ecdb_input.csv
                created_at: '2026-03-12T17:54:07.374339Z'
                updated_at: '2026-03-12T17:54:07.374339Z'
                total_category_mappings: 0
                total_attribute_mappings: 0
                workflow_id: a1462a91-f733-45fe-993b-5d0353f33ee3
                workflow_status: PENDING
                tenant_id: 268465dd-71f5-4179-959c-9bac01029451
                workflow_phase: PRE_PROCESS
                domain: vessel
                total_items: 0
                processed_items: 0
                successful_items: 0
                failed_items: 0
                total_chunks: 0
                processed_chunks: 0
                input_file_id: 69b2fdbfd1dcca3911c666e6
                output_file_id: null
                error_file_id: null
                review_required: false
                review_task_id: null
                enrichment_workflow_id: null
                error_message: null
        '400':
          description: Bad request - invalid CSV or missing file
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized - missing or invalid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - bearerAuth: []
components:
  parameters:
    DomainHeader:
      name: domain
      in: header
      required: true
      schema:
        type: string
        example: vessel
      description: >-
        The brand domain or brand identifier used to scope the request to a
        specific brand’s data and configuration.
  schemas:
    TaxonomyWorkflowResponse:
      type: object
      required:
        - id
        - brand_id
        - status
        - workflow_type
        - import_document_path
        - created_at
        - updated_at
        - total_category_mappings
        - total_attribute_mappings
        - workflow_id
        - workflow_status
        - tenant_id
        - workflow_phase
        - domain
        - total_items
        - processed_items
        - successful_items
        - failed_items
        - total_chunks
        - processed_chunks
        - input_file_id
        - review_required
      properties:
        id:
          type: string
          format: uuid
          description: Workflow identifier.
          example: a1462a91-f733-45fe-993b-5d0353f33ee3
        brand_id:
          type: string
          format: uuid
          example: 268465dd-71f5-4179-959c-9bac01029451
        status:
          type: string
          example: PENDING
        workflow_type:
          type: string
          example: ATTRIBUTE_AND_CATEGORY_MAPPING
        import_document_path:
          type: string
          example: >-
            taxonomy-workflow/vessel/d6441888-f25d-4acb-8898-07808526ecdb/d6441888-f25d-4acb-8898-07808526ecdb_input.csv
        created_at:
          type: string
          format: date-time
          example: '2026-03-12T17:54:07.374339Z'
        updated_at:
          type: string
          format: date-time
          example: '2026-03-12T17:54:07.374339Z'
        total_category_mappings:
          type: integer
          example: 0
        total_attribute_mappings:
          type: integer
          example: 0
        workflow_id:
          type: string
          format: uuid
          example: a1462a91-f733-45fe-993b-5d0353f33ee3
        workflow_status:
          type: string
          example: PENDING
        tenant_id:
          type: string
          format: uuid
          example: 268465dd-71f5-4179-959c-9bac01029451
        workflow_phase:
          type: string
          example: PRE_PROCESS
        domain:
          type: string
          example: vessel
        total_items:
          type: integer
          example: 0
        processed_items:
          type: integer
          example: 0
        successful_items:
          type: integer
          example: 0
        failed_items:
          type: integer
          example: 0
        total_chunks:
          type: integer
          example: 0
        processed_chunks:
          type: integer
          example: 0
        input_file_id:
          type: string
          example: 69b2fdbfd1dcca3911c666e6
        output_file_id:
          type: string
          nullable: true
          example: null
        error_file_id:
          type: string
          nullable: true
          example: null
        review_required:
          type: boolean
          example: false
        review_task_id:
          type: string
          nullable: true
          example: null
        enrichment_workflow_id:
          type: string
          nullable: true
          example: null
        error_message:
          type: string
          nullable: true
          example: null
    errorResponse:
      description: Error response
      properties:
        errors:
          description: Errors
          items:
            $ref: '#/components/schemas/errorResponse'
          type: array
        message:
          description: Error message
          example: Bad request
          type: string
        type:
          description: Error type
          example: CLIENT_ERROR
          type: string
      type: object
  securitySchemes:
    authorization:
      bearerFormat: JWT
      scheme: bearer
      type: http

````