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

20 operations across 3 API domains.

Quick Navigation

Protocol docs and discovery endpoints for developers and agents.

Oauth

1 endpoints
POST/api/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

Products

12 endpoints
POST/api/products/deactivate
Bearer Auth

Delist Products

Delist products from marketplaces (Shopee/Lazada) and mark product status as draft.

Request Body

application/json

Required: Yes

{ organizationId: string; productIds: string[]; platform?: shopee | lazada }

Responses

StatusDescriptionContent Types
200Delist operation completedapplication/json
400Bad Request - Invalid payload values-
401Unauthorized-
403Forbidden-
500Internal Server Error-
POST/api/products/delist
Bearer Auth

Delist Products (Alias)

Alias of `/api/products/deactivate` for delisting products from marketplaces.

Request Body

application/json

Required: Yes

{ organizationId: string; productIds: string[]; platform?: shopee | lazada }

Responses

StatusDescriptionContent Types
200Delist operation completedapplication/json
400Bad Request - Invalid payload values-
401Unauthorized-
403Forbidden-
500Internal Server Error-
POST/api/products/price
Bearer Auth

Update Product Price

Update product price and optional sale price, then trigger marketplace price sync for published listings.

Request Body

application/json

Required: Yes

{ organizationId: string; productId: string; price?: number; salePrice?: number }

Responses

StatusDescriptionContent Types
200Price update acceptedapplication/json
400Bad Request - Invalid payload values-
401Unauthorized-
403Forbidden-
404Product not found-
500Internal Server Error-
POST/api/products/publish
Bearer Auth

Queue Product Publish

Queue marketplace publish jobs for one or more products. Supports live and draft visibility modes.

Request Body

application/json

Required: Yes

{ productIds: string[]; platforms?: shopee | lazada[]; visibility?: live | draft }

Responses

StatusDescriptionContent Types
200Publish jobs queuedapplication/json
400Bad Request - Invalid payload or product selection-
401Unauthorized-
403Forbidden-
500Internal Server Error-
GET/api/products/publish-status
Bearer Auth

Get Publish Job Status

Fetch latest publish status for one product or a set of publish job IDs.

Parameters

NameInTypeRequiredDescription
productIdquerystringNoProduct ID to query status for.
jobIdquerystringNoSingle publish job ID.
jobIdsquerystringNoComma-separated publish job IDs.
platformsquerystringNoComma-separated platform filter (shopee,lazada).

Responses

StatusDescriptionContent Types
200Status resultsapplication/json
400Bad Request - Missing productId or jobId/jobIds, or invalid platform filter-
401Unauthorized-
500Internal Server Error-
POST/api/products/stock
Bearer Auth

Update Product Stock

Update product stock quantity, then trigger marketplace stock sync for published listings.

Request Body

application/json

Required: Yes

{ organizationId: string; productId: string; quantity: integer }

Responses

StatusDescriptionContent Types
200Stock update acceptedapplication/json
400Bad Request - Invalid payload values-
401Unauthorized-
403Forbidden-
404Product not found-
500Internal Server Error-
GET/api/products/sync-status
Bearer Auth

Get Async Sync Status

Poll async marketplace sync jobs (price/stock) by job ID or product ID.

Parameters

NameInTypeRequiredDescription
organizationIdquerystringYesOrganization ID scope.
jobIdquerystringNoSingle async sync job ID.
jobIdsquerystringNoComma-separated async sync job IDs.
productIdquerystringNoProduct ID filter. Returns latest async sync statuses for the product.

Responses

StatusDescriptionContent Types
200Sync status resultsapplication/json
400Bad Request - Missing organizationId or productId/jobId/jobIds-
401Unauthorized-
403Forbidden-
500Internal Server Error-
GET/api/v1/products
Bearer Auth

List Products

List products for the authenticated organization with optional filters and pagination. Supports OAuth 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 (1..100). Defaults to 20.
offsetqueryintegerNoPagination offset. 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 Product

Create a new product draft for the authenticated organization. Supports OAuth Bearer token authentication.

Request Body

application/json

Required: Yes

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

Responses

StatusDescriptionContent Types
201Product created successfullyapplication/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 OAuth Bearer token authentication.

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 OAuth 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 OAuth 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

7 endpoints
GET/api/compare
Public

Compare Public Products

Compare 2 to 10 public products side-by-side across price, GEO 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/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/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/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/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-
GET/api/merchants/{merchantId}/search
Public

Search Within Public Merchant Catalog

Search within a single merchant's public product feed using the same filter model as the cross-merchant search API.

Parameters

NameInTypeRequiredDescription
merchantIdpathstringYes-
qquerystringNoNatural-language search query.
categoryquerystringNoOptional category-name filter.
brandquerystringNoOptional brand filter.
min_pricequerynumberNoMinimum listed price.
max_pricequerynumberNoMaximum listed price.
in_stockquerybooleanNoFilter by stock availability.
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-
GET/api/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-