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

# Start Catalog Operation

> Durable bulk price/cost updates for 1–2000 products or variants. Requires catalog:write. Identical duplicates collapse in requested order; conflicting duplicates fail. An idempotencyKey freezes the original targets and versions. Reusing it with changed input returns 409. expectedUpdatedAt guards reviewed values. Catalog cost never syncs to marketplaces. syncToMarketplaces queues existing canonical marketplace services for every applicable connected listing. A failed target does not stop other targets. The operation continues after the caller disconnects. Read aggregate status, then page failures through bulk.results. Optional sessionId links progress to the initiating user's existing session.



## OpenAPI

````yaml /openapi.json post /api/v1/catalog/operations
openapi: 3.1.0
info:
  title: OmniCommerce API
  version: 1.0.0
  license:
    name: Proprietary
    url: https://omnicommerce.sg/terms
  description: >-
    OmniCommerce API surface for agents and developer integrations. Includes
    public endpoints (merchant discovery, product search, compare, catalog, ACO
    retrieval) and authenticated endpoints (product management via API key
    Bearer tokens).
servers:
  - url: https://omnicommerce.ai
    description: Production
  - url: http://localhost:3000
    description: Local development
security: []
tags:
  - name: agentic-checkout
    description: Merchant-fulfilled agentic checkout
    x-group: Agentic Checkout
  - name: agents
    description: agents
    x-group: Agents
  - name: analytics
    description: Sales performance across marketplaces
    x-group: Analytics
  - name: aops
    description: Agent operating procedures
    x-group: AOPs
  - name: branding
    description: branding
    x-group: Branding
  - name: campaigns
    description: Campaign briefs, offer windows, and marketplace runs
    x-group: Campaigns
  - name: catalog
    description: catalog
    x-group: Catalog
  - name: commerce
    description: commerce
    x-group: Commerce
  - name: developer-platform
    description: Authenticated developer platform APIs
    x-group: Developer Platform
  - name: documents
    description: Knowledge base document uploads
    x-group: Knowledge Base
  - name: inventory
    description: Inventory quantities, planning signals, and marketplace listing absence
    x-group: Inventory
  - name: looks
    description: AI-styled product looks
    x-group: Looks
  - name: oauth
    description: OAuth token endpoints
    x-group: OAuth
  - name: orders
    description: Workspace and agentic orders
    x-group: Orders
  - name: organizations
    description: Organization management
    x-group: Organizations
  - name: price-books
    description: Marketplace list-price markup rules
    x-group: Price Books
  - name: products
    description: Product CRUD, bulk import, enrichment, publish, and delist
    x-group: Products
  - name: promotions
    description: Central promotions and marketplace sync
    x-group: Promotions
  - name: public-agent
    description: Public agent discovery and catalog APIs
    x-group: Public Agent
  - name: returns
    description: returns
    x-group: Returns
  - name: reviews
    description: Marketplace product reviews and seller replies
    x-group: Reviews
  - name: scripts
    description: scripts
    x-group: Scripts
  - name: settlements
    description: settlements
    x-group: Settlements
  - name: ucp
    description: Universal Commerce Protocol
    x-group: UCP
paths:
  /api/v1/catalog/operations:
    post:
      tags:
        - catalog
      summary: Start Catalog Operation
      description: >-
        Durable bulk price/cost updates for 1–2000 products or variants.
        Requires catalog:write. Identical duplicates collapse in requested
        order; conflicting duplicates fail. An idempotencyKey freezes the
        original targets and versions. Reusing it with changed input returns
        409. expectedUpdatedAt guards reviewed values. Catalog cost never syncs
        to marketplaces. syncToMarketplaces queues existing canonical
        marketplace services for every applicable connected listing. A failed
        target does not stop other targets. The operation continues after the
        caller disconnects. Read aggregate status, then page failures through
        bulk.results. Optional sessionId links progress to the initiating user's
        existing session.
      operationId: post_v1_catalog_operations
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                organizationId:
                  type: string
                  minLength: 1
                idempotencyKey:
                  type: string
                  minLength: 1
                  maxLength: 128
                updates:
                  minItems: 1
                  maxItems: 2000
                  type: array
                  items:
                    type: object
                    properties:
                      productId:
                        type: string
                        format: uuid
                        pattern: >-
                          ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                      price:
                        type: number
                        minimum: 0
                      salePrice:
                        anyOf:
                          - type: number
                            minimum: 0
                          - type: 'null'
                      currency:
                        type: string
                        pattern: ^[A-Z]{3}$
                      costPrice:
                        anyOf:
                          - type: number
                            minimum: 0
                          - type: 'null'
                      costPriceCurrency:
                        type: string
                        pattern: ^[A-Z]{3}$
                      expectedUpdatedAt:
                        type: string
                        format: date-time
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                      targets:
                        minItems: 1
                        maxItems: 25
                        type: array
                        items:
                          type: object
                          properties:
                            platform:
                              type: string
                              enum:
                                - shopee
                                - lazada
                                - tiktok
                                - shopify
                                - whatsapp
                                - zalora
                                - amazon
                                - ebay
                            accountId:
                              type: string
                              minLength: 1
                              maxLength: 255
                          required:
                            - platform
                            - accountId
                          additionalProperties: false
                    required:
                      - productId
                    additionalProperties: false
                syncToMarketplaces:
                  default: false
                  type: boolean
                verify:
                  default: true
                  type: boolean
                sessionId:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
              required:
                - idempotencyKey
                - updates
              additionalProperties: false
      responses:
        '202':
          description: >-
            Durable operation accepted; completion and verification remain
            pending.
          content:
            application/json:
              schema:
                type: object
                required:
                  - ok
                  - data
                properties:
                  ok:
                    type: boolean
                  apiVersion:
                    type: string
                  operationId:
                    type: string
                  status:
                    type: string
                  data:
                    type: object
                    properties:
                      queued:
                        type: boolean
                      operationIds:
                        type: array
                        items:
                          type: string
                      productIds:
                        type: array
                        items:
                          type: string
                      operation:
                        type: object
                        properties:
                          operationId:
                            type: string
                          kind:
                            type: string
                            enum:
                              - update
                              - verify
                          success:
                            type: boolean
                          allTerminal:
                            type: boolean
                          status:
                            type: string
                          totalCount:
                            type: number
                          succeededCount:
                            type: number
                          failedCount:
                            type: number
                          pendingCount:
                            type: number
                          syncingCount:
                            type: number
                          verifiedCount:
                            type: number
                          verificationRequested:
                            type: boolean
                          phases:
                            type: object
                            propertyNames:
                              type: string
                            additionalProperties:
                              type: number
                          updatedAt:
                            type: string
                          completedAt:
                            anyOf:
                              - type: string
                              - type: 'null'
                          error:
                            type: string
                          report:
                            type: string
                        required:
                          - operationId
                          - success
                          - allTerminal
                          - status
                    required:
                      - queued
                      - operationIds
                      - productIds
                      - operation
        '400':
          description: Invalid request.
        '401':
          description: Authentication required.
        '403':
          description: Missing capability or organization/product access.
        '409':
          description: Idempotency key reused with different input.
        '503':
          description: Temporarily unavailable. Retry the same idempotency key.
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        Bearer API key for server-to-server access. Session auth is also
        supported in first-party UI flows.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.