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

# Compare Product Market Prices

> Research market offers for a batch of OmniCommerce simple product or variant UUIDs using the same BigGo API and Serper Shopping fallback as pricing strategy. Read-only; no prices are changed.

### Authorization

Requires catalog:read. API keys resolve organizationId from the credential; session callers must provide an authorized organizationId.

### Durable batches

Accepts 1–50 input entries, trimmed and deduplicated in first-requested order. Returns HTTP 202 and a durable jobId. Retrieve progress and results from GET /api/v1/products/compare-prices/jobs/{jobId} or await jobs.wait in the SDK with a suitable timeout. A client timeout does not cancel the job. Use variant IDs for products with variants. Each listing market has its own durable search step; searches use bounded concurrency and retry failed providers once. Final result.success is true only when every requested product and listing market succeeds. Partial failures remain explicit.

Omit country/gl to compare every recorded listing market. Global Zalora compares its exact country prices in SG, MY, ID, PH, HK, and TW as present on the listing; variant offers use exact SKU/variant identity. An India Shopify store selling in SGD is researched in Singapore because market selection follows selling currency, not the store address. gl overrides country and restricts research to that market. Unsupported currencies and missing country prices are reported without silently skipping listings or converting currencies.

results[].markets contains separate platform/store/country prices and shopping statistics. Prices come from persisted marketplace snapshots or acknowledged marketplace writes; priceSource and priceAsOf identify the evidence. Published listings without exact price evidence may return catalog research but success is false, with an explicit verification error. Unlisted products use their catalog price/currency. Research does not refresh the connected marketplace listing; refresh stale listing data before comparing.

Market comparison measures recorded listing list price minus market median (p50), with percentage relative to the median. Catalog fallback comparisons use the explicitly named catalog_price_vs_market_median metric. The product-level currentPrice/currency remain catalog fields; product-level research/comparison are available only for a single market with compatible currency. For multiple markets, consume markets[]. These differences are not recommended selling prices; monetary values are never combined across currencies.

Shopping search coverage depends on the provider index; individual marketplaces and listings are not verified.

Offers may refer to different variants, pack sizes, bundles, or similar products. Verify the offer before using its price.

Pricing strategy excludes offers from ebay and walmart.



## OpenAPI

````yaml /openapi.json post /api/v1/products/compare-prices
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.sg
    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: campaigns
    description: Campaign briefs, offer windows, and marketplace runs
    x-group: Campaigns
  - name: developer-platform
    description: Authenticated developer platform APIs
    x-group: Developer Platform
  - name: documents
    description: Knowledge base document uploads
    x-group: Knowledge Base
  - 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: settlements
    description: settlements
    x-group: Settlements
  - name: ucp
    description: Universal Commerce Protocol
    x-group: UCP
paths:
  /api/v1/products/compare-prices:
    post:
      tags:
        - products
      summary: Compare Product Market Prices
      description: >-
        Research market offers for a batch of OmniCommerce simple product or
        variant UUIDs using the same BigGo API and Serper Shopping fallback as
        pricing strategy. Read-only; no prices are changed.


        ### Authorization


        Requires catalog:read. API keys resolve organizationId from the
        credential; session callers must provide an authorized organizationId.


        ### Durable batches


        Accepts 1–50 input entries, trimmed and deduplicated in first-requested
        order. Returns HTTP 202 and a durable jobId. Retrieve progress and
        results from GET /api/v1/products/compare-prices/jobs/{jobId} or await
        jobs.wait in the SDK with a suitable timeout. A client timeout does not
        cancel the job. Use variant IDs for products with variants. Each listing
        market has its own durable search step; searches use bounded concurrency
        and retry failed providers once. Final result.success is true only when
        every requested product and listing market succeeds. Partial failures
        remain explicit.


        Omit country/gl to compare every recorded listing market. Global Zalora
        compares its exact country prices in SG, MY, ID, PH, HK, and TW as
        present on the listing; variant offers use exact SKU/variant identity.
        An India Shopify store selling in SGD is researched in Singapore because
        market selection follows selling currency, not the store address. gl
        overrides country and restricts research to that market. Unsupported
        currencies and missing country prices are reported without silently
        skipping listings or converting currencies.


        results[].markets contains separate platform/store/country prices and
        shopping statistics. Prices come from persisted marketplace snapshots or
        acknowledged marketplace writes; priceSource and priceAsOf identify the
        evidence. Published listings without exact price evidence may return
        catalog research but success is false, with an explicit verification
        error. Unlisted products use their catalog price/currency. Research does
        not refresh the connected marketplace listing; refresh stale listing
        data before comparing.


        Market comparison measures recorded listing list price minus market
        median (p50), with percentage relative to the median. Catalog fallback
        comparisons use the explicitly named catalog_price_vs_market_median
        metric. The product-level currentPrice/currency remain catalog fields;
        product-level research/comparison are available only for a single market
        with compatible currency. For multiple markets, consume markets[]. These
        differences are not recommended selling prices; monetary values are
        never combined across currencies.


        Shopping search coverage depends on the provider index; individual
        marketplaces and listings are not verified.


        Offers may refer to different variants, pack sizes, bundles, or similar
        products. Verify the offer before using its price.


        Pricing strategy excludes offers from ebay and walmart.
      operationId: post_v1_products_compare_prices
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                organizationId:
                  type: string
                  minLength: 1
                  maxLength: 120
                productIds:
                  minItems: 1
                  maxItems: 50
                  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)$
                  description: >-
                    OmniCommerce simple product or variant UUIDs. Deduplicated
                    in first-requested order; maximum 50 input entries.
                country:
                  type: string
                  enum:
                    - Singapore
                    - Indonesia
                    - Malaysia
                    - Vietnam
                    - Thailand
                    - Philippines
                gl:
                  description: >-
                    Optional shopping market restriction; overrides country.
                    Omit to compare every listing market using its currency, or
                    the catalog currency for unlisted products.
                  type: string
                  enum:
                    - sg
                    - id
                    - my
                    - vn
                    - th
                    - ph
                    - us
                    - hk
                    - tw
                limit:
                  type: integer
                  minimum: 1
                  maximum: 15
              required:
                - productIds
              additionalProperties: false
            example:
              productIds:
                - cc87d195-097a-4a5a-8229-cd989ce98d0f
              gl: sg
              limit: 15
      responses:
        '202':
          description: >-
            Batch accepted. jobId tracks durable progress; acceptance does not
            mean comparisons succeeded.
          content:
            application/json:
              schema:
                type: object
                required:
                  - ok
                  - apiVersion
                  - operationId
                  - status
                  - jobId
                  - data
                  - warnings
                  - recommendations
                  - links
                properties:
                  ok:
                    type: boolean
                  apiVersion:
                    type: string
                  operationId:
                    type: string
                    format: uuid
                  status:
                    type: string
                    enum:
                      - accepted
                  jobId:
                    type: string
                  data:
                    type: object
                    properties:
                      jobId:
                        type: string
                      productIds:
                        type: array
                        items:
                          type: string
                    required:
                      - jobId
                      - productIds
                    additionalProperties: false
                  warnings:
                    type: array
                    items:
                      type: string
                  recommendations:
                    type: array
                    items:
                      type: string
                  links:
                    type: object
                    additionalProperties:
                      type: string
        '400':
          description: Invalid payload or missing session organizationId.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: Missing catalog:read or unauthorized organization/product scope.
        '429':
          description: Rate limit exceeded.
        '500':
          description: Unable to load comparison data.
      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.