Developer Reference

OmniCommerce API Documentation

Server-rendered API reference generated from our OpenAPI contract. This page is crawlable and agent-readable without client-side docs generators.

Base URL

https://omnicommerce.sg

OpenAPI Source

Raw machine-readable schema used for this reference.

Coverage

26 operations across 5 API domains.

Redocly Reference

Interactive OpenAPI reference with schema navigation.

Quick Navigation

Protocol docs and discovery endpoints for developers and agents.

Developer Platform

11 endpoints
POST/api/v1/evaluate
Bearer Auth

Evaluate SKU Readiness

Score a persisted product or inline SKU payload for agentic commerce readiness, engine eligibility, and recommended fixes.

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-
POST/api/v1/images/ghost-mannequin
Bearer Auth

Generate Ghost Mannequin Image

Remove the visible mannequin from a product photo and return the generated image URL. The source image must be an HTTP(S) URL; data URIs are rejected. Authenticate with an OmniCommerce API key that has the `catalog:enrich` scope.

Request Body

application/json

Required: Yes

{ imageUrl: string; productTitle?: string; categoryName?: string; categoryId?: string }

Responses

StatusDescriptionContent Types
200Ghost mannequin image generated.application/json
400Bad Request - invalid JSON or imageUrl-
401Unauthorized-
403Forbidden - missing catalog:enrich scope-
502Image generation failed or the generated image could not be retrieved.-
GET/api/v1/jobs/{jobId}
Bearer Auth

Get Developer Job Status

Fetch shared async status for developer-platform operations, including import, enrichment, and sync jobs.

Parameters

NameInTypeRequiredDescription
jobIdpathstringYes-
organizationIdquerystringNoRequired for session-authenticated requests; derived from API keys.

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-
POST/api/v1/jobs/{jobId}/cancel
Bearer Auth

Cancel Developer Product Job

Request cancellation for a running or pending developer product create/enrich job. Currently supports product workflow jobs returned by POST /api/v1/products. Completed or failed jobs are returned with their current terminal status.

Parameters

NameInTypeRequiredDescription
jobIdpathstringYes-

Request Body

application/json

Required: No

{ organizationId?: string }

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-
POST/api/v1/manage-product-category/recommend
Bearer Auth

Recommend Marketplace Product Categories

Suggest best-fit marketplace categories and category attribute values for a persisted product using semantic taxonomy search. Authenticate with an OmniCommerce API key as `Authorization: Bearer omni_sk_...`.

Request Body

application/json

Required: Yes

{ organizationId?: string; productId: string; targets: { marketplace: string; country?: string }[]; query?: string, ... }

Responses

StatusDescriptionContent Types
200Semantic category recommendations with attribute metadata and suggested attribute values.application/json
400Bad Request-
401Unauthorized-
403Forbidden-
404Product Not Found-
422Product has no searchable category text-
500Internal Server Error-
GET/api/v1/marketplaces/connected
Bearer Auth

List Connected Marketplaces

List connected marketplace stores for the authenticated organization. Results are scoped to the API key organization unless `organizationId` is supplied for session-authenticated calls.

Parameters

NameInTypeRequiredDescription
organizationIdquerystringNoOptional for API-key requests; required for session-authenticated requests across multiple organizations.
marketplacequeryshopee | lazada | tiktokNoOptional marketplace filter.
countryquerystringNoOptional country filter, for example singapore, malaysia, sg, or my.

Responses

StatusDescriptionContent Types
200Connected marketplace stores for the organization.application/json
400Bad Request-
401Unauthorized-
403Forbidden-
500Internal Server Error-
POST/api/v1/monitor
Bearer Auth

Run AI Shelf Share Monitor

Queue AI Shelf Share replay/monitoring for a product, query, or organization catalog.

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-
POST/api/v1/products/{productId}/publish
Bearer Auth

Publish Product

Queue marketplace publish jobs for a product by productId. OmniCommerce publishes to the marketplaces already enabled on the product and uses the product's store selection or a single/default connected store.

Parameters

NameInTypeRequiredDescription
productIdpathstringYesOmniCommerce product ID to publish.

Request Body

application/json

Required: No

{ organizationId?: string; visibility?: live | draft }

Responses

StatusDescriptionContent Types
202Publish jobs queued.application/json
400Bad Request - invalid payload, marketplace not enabled, or store selection required-
401Unauthorized-
403Forbidden-
404Product Not Found-
500Internal Server Error-
POST/api/v1/sync
Bearer Auth

Sync Product Commercial Fields

Update price, sale price, or stock quantity in OmniCommerce and queue marketplace sync workers where applicable.

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-
GET/api/v1/webhooks
Bearer Auth

List Developer Webhooks

List configured developer webhook subscriptions for the authenticated organization.

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-
POST/api/v1/webhooks
Bearer Auth

Create Developer Webhook

Create a developer webhook subscription for operation, product, sync, and visibility events.

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-

Oauth

1 endpoints
POST/api/v1/oauth/token
Public

Get Access Token

Exchange client credentials for an access token using OAuth 2.0 client_credentials grant. Tokens are valid for 1 hour.

Request Body

application/x-www-form-urlencoded

Required: Yes

{ grant_type: client_credentials; client_id: string; client_secret: string }

application/json

Required: Yes

{ grant_type: client_credentials; client_id: string; client_secret: string }

Responses

StatusDescriptionContent Types
200Token issued successfullyapplication/json
400Bad Request - Missing or invalid parametersapplication/json
401Unauthorized - Invalid client credentialsapplication/json

Organizations

1 endpoints
POST/api/v1/organizations
Bearer Auth

Create Organization

Create a new organization for the signed-in user. This endpoint uses first-party session authentication because API keys are scoped to an existing organization.

Request Body

application/json

Required: Yes

{ name: string; keepCurrentActiveOrganization?: boolean }

Responses

StatusDescriptionContent Types
201Organization createdapplication/json
400Bad Request - Invalid organization name or JSON-
401Unauthorized - Sign in is required-
500Internal Server Error-

Products

5 endpoints
GET/api/v1/products
Bearer Auth

List Products

List products for the authenticated organization with optional filters and pagination. Supports API key Bearer token authentication.

Parameters

NameInTypeRequiredDescription
statusquerydraft | active | archived | deletedNoFilter by product status.
marketplacequeryshopee | lazada | tiktokNoFilter by enabled marketplace.
countryquerystringNoFilter by marketplace country (e.g., Singapore, Malaysia).
qquerystringNoSearch query for product name or SKU.
minPricequerynumberNoMinimum price filter.
maxPricequerynumberNoMaximum price filter.
sortByqueryupdatedAt | createdAt | name | priceNoSort order for results.
limitqueryintegerNoResult limit per page. Values above the cap are clamped silently; the applied value is returned in `pagination.limit`. Defaults to 20.
offsetqueryintegerNoZero-based pagination offset. Use `pagination.nextOffset` from the previous response to page forward. Defaults to 0.

Responses

StatusDescriptionContent Types
200Successapplication/json
401Unauthorized - Invalid or missing Bearer token-
403Forbidden - Token not authorized for this organization-
500Internal Server Error-
POST/api/v1/products
Bearer Auth

Create and Enrich Product

Queue a single-product create/enrich workflow for the authenticated organization. The request mirrors bulk product import for one product: `product` contains developer-supplied fields, arbitrary extra fields are preserved for enrichment context, SKU is the unique upsert identifier, externally hosted HTTP(S) images are mirrored to managed R2 storage, and the API returns a job ID to poll with GET /api/v1/jobs/{jobId}. `targetMarketplaces` and `targetCountries` are optional; product creation and enrichment can run without marketplace publishing targets.

Request Body

application/json

Required: Yes

{ product: { id?: string; sku: string; title: string; name?: string, ... }; variants?: { sku?: string; price?: object; inventory?: object; variationAttributes?: object, ... }[]; variationSchema?: object; targetMarketplaces?: shopee | lazada | tiktok[], ... }

Responses

StatusDescriptionContent Types
202Product create/enrich workflow acceptedapplication/json
400Bad Request - Invalid product data-
401Unauthorized - Invalid or missing Bearer token-
403Forbidden - Token not authorized for this organization-
500Internal Server Error-
GET/api/v1/products/{productId}
Bearer Auth

Get Product

Retrieve a single product by ID for the authenticated organization. Supports API key Bearer token authentication. The response includes generated Agentic Commerce Optimization (ACO) profile metadata, FAQs, localization content, intent queries, cultural notes, signals, sources, and claims when present.

Parameters

NameInTypeRequiredDescription
productIdpathstringYes-

Responses

StatusDescriptionContent Types
200Successapplication/json
401Unauthorized - Invalid or missing Bearer token-
403Forbidden - Token not authorized for this organization-
404Product not found-
500Internal Server Error-
PATCH/api/v1/products/{productId}
Bearer Auth

Update Product

Update an existing product by ID. Only provided fields will be updated. Supports API key Bearer token authentication.

Parameters

NameInTypeRequiredDescription
productIdpathstringYes-

Request Body

application/json

Required: Yes

{ name?: string; description?: string; sku?: string; brand?: string, ... }

Responses

StatusDescriptionContent Types
200Product updated successfullyapplication/json
400Bad Request - Invalid update data-
401Unauthorized - Invalid or missing Bearer token-
403Forbidden - Token not authorized for this organization-
404Product not found-
500Internal Server Error-
DELETE/api/v1/products/{productId}
Bearer Auth

Delete Product

Soft-delete a product by ID. The product will be marked as deleted but not permanently removed. Call again on a deleted product to permanently delete it. Supports API key Bearer token authentication.

Parameters

NameInTypeRequiredDescription
productIdpathstringYes-

Responses

StatusDescriptionContent Types
200Product deleted successfullyapplication/json
401Unauthorized - Invalid or missing Bearer token-
403Forbidden - Token not authorized for this organization-
404Product not found-
500Internal Server Error-

Public Agent

8 endpoints
GET/api/v1/compare
Public

Compare Public Products

Compare 2 to 10 public products side-by-side across price, ACO readiness, marketplace coverage, and inventory.

Parameters

NameInTypeRequiredDescription
productsquerystringYesComma-separated product IDs (2..10).
languagequeryen | th | id | ms | vi | tlNoLocalization language. Defaults to en.

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-
GET/api/v1/directory
Public

List Public Merchants

Discover merchants with public products available through OmniCommerce's public agent APIs.

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-
GET/api/v1/feed/{domain}/llms.txt
Public

Get Merchant LLM Feed

Return a plain-text, LLM-optimized merchant feed keyed by website domain.

Parameters

NameInTypeRequiredDescription
domainpathstringYes-
limitqueryintegerNoMaximum number of merchant products to include in the feed.

Responses

StatusDescriptionContent Types
200Successtext/plain
404Merchant feed not found-
500Internal Server Error-
GET/api/v1/merchants/{merchantId}/manifest
Public

Get Public Merchant Manifest

Return machine-readable capability and endpoint metadata for a single public merchant.

Parameters

NameInTypeRequiredDescription
merchantIdpathstringYes-

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-
GET/api/v1/merchants/{merchantId}/products
Public

List Public Merchant Products

Browse a single merchant's public product feed with optional marketplace and localization filters.

Parameters

NameInTypeRequiredDescription
merchantIdpathstringYes-
platformqueryshopee | lazadaNoMarketplace platform filter.
countryquerystringNoMarketplace country hint (example: sg).
languagequeryen | th | id | ms | vi | tlNoLocalization language. Defaults to en.
limitqueryintegerNoResult limit (1..100). Defaults to 20.
offsetqueryintegerNoPagination offset (0..10000). Defaults to 0.

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-
POST/api/v1/search
Public

Search Public Merchant Products

Search across all public merchants and products with optional merchant, pricing, stock, marketplace, and localization filters.

Parameters

NameInTypeRequiredDescription
qquerystringNoNatural-language search query.
categoryquerystringNoOptional category-name filter.
brandquerystringNoOptional brand filter.
min_pricequerynumberNoMinimum listed price.
max_pricequerynumberNoMaximum listed price.
in_stockquerybooleanNoFilter by stock availability.
merchant_idsquerystringNoComma-separated merchant IDs to scope the search.
sortqueryrelevance | price_asc | price_descNoSort order.
platformqueryshopee | lazadaNoMarketplace platform filter.
countryquerystringNoMarketplace country hint (example: sg).
languagequeryen | th | id | ms | vi | tlNoLocalization language. Defaults to en.
include_intentquerybooleanNoInclude lightweight parsed query intent metadata.
limitqueryintegerNoResult limit (1..100). Defaults to 20.
offsetqueryintegerNoPagination offset (0..10000). Defaults to 0.

Responses

StatusDescriptionContent Types
200Successapplication/json
400Bad Request-
401Unauthorized-
402Insufficient Credits-
403Forbidden-
500Internal Server Error-