> ## 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.

# Bulk Update Product Prices and Stock

> Update existing catalog SKUs from 1–10 uploaded CSV or Excel documentIds, with up to 10,000 rows per file. Requires catalog:write and the corresponding product or inventory capabilities.

### File and source selection

Exact SKU matching preserves zero values and rejects duplicate, ambiguous, or unknown SKUs. Inventory needs an authorized manual or CSV sourceId or locationId. Explicit column names override detection. syncToMarketplaces defaults to true. Use marketplaces to limit which existing listings are synced.

### Track the results

Pass every saved import reference to products.bulkUpdateStatus. Results preserve document order. The workflow runs after the request returns. Applied inventory means source balances were saved and listing sync was queued.



## OpenAPI

````yaml /openapi.json post /api/v1/products/bulk-update
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: follow-ups
    description: follow-ups
    x-group: Follow Ups
  - 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/products/bulk-update:
    post:
      tags:
        - catalog
      summary: Bulk Update Product Prices and Stock
      description: >-
        Update existing catalog SKUs from 1–10 uploaded CSV or Excel
        documentIds, with up to 10,000 rows per file. Requires catalog:write and
        the corresponding product or inventory capabilities.


        ### File and source selection


        Exact SKU matching preserves zero values and rejects duplicate,
        ambiguous, or unknown SKUs. Inventory needs an authorized manual or CSV
        sourceId or locationId. Explicit column names override detection.
        syncToMarketplaces defaults to true. Use marketplaces to limit which
        existing listings are synced.


        ### Track the results


        Pass every saved import reference to products.bulkUpdateStatus. Results
        preserve document order. The workflow runs after the request returns.
        Applied inventory means source balances were saved and listing sync was
        queued.
      operationId: post_v1_products_bulk_update
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                syncToMarketplaces:
                  default: true
                  type: boolean
                marketplaces:
                  minItems: 1
                  maxItems: 8
                  type: array
                  items:
                    type: string
                    enum:
                      - shopee
                      - lazada
                      - tiktok
                      - shopify
                      - whatsapp
                      - zalora
                      - amazon
                      - ebay
                organizationId:
                  type: string
                  minLength: 1
                  maxLength: 120
                documentIds:
                  minItems: 1
                  maxItems: 10
                  type: array
                  items:
                    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)$
                scope:
                  default: both
                  type: string
                  enum:
                    - price
                    - inventory
                    - both
                sourceId:
                  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)$
                locationId:
                  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)$
                skuColumn:
                  type: string
                  minLength: 1
                  maxLength: 200
                quantityColumn:
                  type: string
                  minLength: 1
                  maxLength: 200
                priceColumn:
                  type: string
                  minLength: 1
                  maxLength: 200
                salePriceColumn:
                  type: string
                  minLength: 1
                  maxLength: 200
                currencyColumn:
                  type: string
                  minLength: 1
                  maxLength: 200
                costPriceColumn:
                  type: string
                  minLength: 1
                  maxLength: 200
              required:
                - documentIds
              additionalProperties: false
      responses:
        '202':
          description: Saved imports accepted; updates continue durably.
          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:
                      success:
                        type: boolean
                      succeededCount:
                        type: number
                      failedCount:
                        type: number
                      pendingCount:
                        type: number
                      status:
                        type: string
                        enum:
                          - pending
                          - completed
                          - partial
                          - failed
                      imports:
                        type: array
                        items:
                          type: object
                          properties:
                            kind:
                              type: string
                              enum:
                                - price
                                - inventory
                            importId:
                              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:
                            - kind
                            - importId
                          additionalProperties: false
                      documentIds:
                        type: array
                        items:
                          type: string
                      scope:
                        type: string
                        enum:
                          - price
                          - inventory
                          - both
                      results:
                        type: array
                        items:
                          type: object
                          properties:
                            documentId:
                              type: string
                            success:
                              type: boolean
                            pending:
                              type: boolean
                            error:
                              type: string
                            price:
                              type: object
                              properties:
                                success:
                                  type: boolean
                                importId:
                                  type: string
                                pending:
                                  type: boolean
                                error:
                                  type: string
                              required:
                                - success
                            inventory:
                              type: object
                              properties:
                                success:
                                  type: boolean
                                importId:
                                  type: string
                                pending:
                                  type: boolean
                                error:
                                  type: string
                              required:
                                - success
                          required:
                            - documentId
                            - success
                    required:
                      - success
                      - succeededCount
                      - failedCount
                      - pendingCount
                      - status
                      - imports
                      - documentIds
                      - scope
                      - results
        '400':
          description: Invalid request or inventory source.
        '401':
          description: Authentication required.
        '403':
          description: Missing scope, role, or organization access.
      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.