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
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
| Status | Description | Content Types |
|---|---|---|
| 200 | Token issued successfully | application/json |
| 400 | Bad Request - Missing or invalid parameters | application/json |
| 401 | Unauthorized - Invalid client credentials | application/json |
Products
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
| Status | Description | Content Types |
|---|---|---|
| 200 | Delist operation completed | application/json |
| 400 | Bad Request - Invalid payload values | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
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
| Status | Description | Content Types |
|---|---|---|
| 200 | Delist operation completed | application/json |
| 400 | Bad Request - Invalid payload values | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
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
| Status | Description | Content Types |
|---|---|---|
| 200 | Price update accepted | application/json |
| 400 | Bad Request - Invalid payload values | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Product not found | - |
| 500 | Internal Server Error | - |
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
| Status | Description | Content Types |
|---|---|---|
| 200 | Publish jobs queued | application/json |
| 400 | Bad Request - Invalid payload or product selection | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
Get Publish Job Status
Fetch latest publish status for one product or a set of publish job IDs.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| productId | query | string | No | Product ID to query status for. |
| jobId | query | string | No | Single publish job ID. |
| jobIds | query | string | No | Comma-separated publish job IDs. |
| platforms | query | string | No | Comma-separated platform filter (shopee,lazada). |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Status results | application/json |
| 400 | Bad Request - Missing productId or jobId/jobIds, or invalid platform filter | - |
| 401 | Unauthorized | - |
| 500 | Internal Server Error | - |
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
| Status | Description | Content Types |
|---|---|---|
| 200 | Stock update accepted | application/json |
| 400 | Bad Request - Invalid payload values | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Product not found | - |
| 500 | Internal Server Error | - |
Get Async Sync Status
Poll async marketplace sync jobs (price/stock) by job ID or product ID.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| organizationId | query | string | Yes | Organization ID scope. |
| jobId | query | string | No | Single async sync job ID. |
| jobIds | query | string | No | Comma-separated async sync job IDs. |
| productId | query | string | No | Product ID filter. Returns latest async sync statuses for the product. |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Sync status results | application/json |
| 400 | Bad Request - Missing organizationId or productId/jobId/jobIds | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
List Products
List products for the authenticated organization with optional filters and pagination. Supports OAuth Bearer token authentication.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| status | query | draft | active | archived | deleted | No | Filter by product status. |
| marketplace | query | shopee | lazada | tiktok | No | Filter by enabled marketplace. |
| country | query | string | No | Filter by marketplace country (e.g., Singapore, Malaysia). |
| q | query | string | No | Search query for product name or SKU. |
| minPrice | query | number | No | Minimum price filter. |
| maxPrice | query | number | No | Maximum price filter. |
| sortBy | query | updatedAt | createdAt | name | price | No | Sort order for results. |
| limit | query | integer | No | Result limit (1..100). Defaults to 20. |
| offset | query | integer | No | Pagination offset. Defaults to 0. |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 401 | Unauthorized - Invalid or missing Bearer token | - |
| 403 | Forbidden - Token not authorized for this organization | - |
| 500 | Internal Server Error | - |
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
| Status | Description | Content Types |
|---|---|---|
| 201 | Product created successfully | application/json |
| 400 | Bad Request - Invalid product data | - |
| 401 | Unauthorized - Invalid or missing Bearer token | - |
| 403 | Forbidden - Token not authorized for this organization | - |
| 500 | Internal Server Error | - |
Get Product
Retrieve a single product by ID for the authenticated organization. Supports OAuth Bearer token authentication.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| productId | path | string | Yes | - |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 401 | Unauthorized - Invalid or missing Bearer token | - |
| 403 | Forbidden - Token not authorized for this organization | - |
| 404 | Product not found | - |
| 500 | Internal Server Error | - |
Update Product
Update an existing product by ID. Only provided fields will be updated. Supports OAuth Bearer token authentication.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| productId | path | string | Yes | - |
Request Body
application/json
Required: Yes
{ name?: string; description?: string; sku?: string; brand?: string, ... }
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Product updated successfully | application/json |
| 400 | Bad Request - Invalid update data | - |
| 401 | Unauthorized - Invalid or missing Bearer token | - |
| 403 | Forbidden - Token not authorized for this organization | - |
| 404 | Product not found | - |
| 500 | Internal Server Error | - |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| productId | path | string | Yes | - |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Product deleted successfully | application/json |
| 401 | Unauthorized - Invalid or missing Bearer token | - |
| 403 | Forbidden - Token not authorized for this organization | - |
| 404 | Product not found | - |
| 500 | Internal Server Error | - |
Public Agent
Compare Public Products
Compare 2 to 10 public products side-by-side across price, GEO readiness, marketplace coverage, and inventory.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| products | query | string | Yes | Comma-separated product IDs (2..10). |
| language | query | en | th | id | ms | vi | tl | No | Localization language. Defaults to en. |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
List Public Merchants
Discover merchants with public products available through OmniCommerce's public agent APIs.
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
Get Merchant LLM Feed
Return a plain-text, LLM-optimized merchant feed keyed by website domain.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| domain | path | string | Yes | - |
| limit | query | integer | No | Maximum number of merchant products to include in the feed. |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | text/plain |
| 404 | Merchant feed not found | - |
| 500 | Internal Server Error | - |
Get Public Merchant Manifest
Return machine-readable capability and endpoint metadata for a single public merchant.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| merchantId | path | string | Yes | - |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
List Public Merchant Products
Browse a single merchant's public product feed with optional marketplace and localization filters.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| merchantId | path | string | Yes | - |
| platform | query | shopee | lazada | No | Marketplace platform filter. |
| country | query | string | No | Marketplace country hint (example: sg). |
| language | query | en | th | id | ms | vi | tl | No | Localization language. Defaults to en. |
| limit | query | integer | No | Result limit (1..100). Defaults to 20. |
| offset | query | integer | No | Pagination offset (0..10000). Defaults to 0. |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| merchantId | path | string | Yes | - |
| q | query | string | No | Natural-language search query. |
| category | query | string | No | Optional category-name filter. |
| brand | query | string | No | Optional brand filter. |
| min_price | query | number | No | Minimum listed price. |
| max_price | query | number | No | Maximum listed price. |
| in_stock | query | boolean | No | Filter by stock availability. |
| sort | query | relevance | price_asc | price_desc | No | Sort order. |
| platform | query | shopee | lazada | No | Marketplace platform filter. |
| country | query | string | No | Marketplace country hint (example: sg). |
| language | query | en | th | id | ms | vi | tl | No | Localization language. Defaults to en. |
| include_intent | query | boolean | No | Include lightweight parsed query intent metadata. |
| limit | query | integer | No | Result limit (1..100). Defaults to 20. |
| offset | query | integer | No | Pagination offset (0..10000). Defaults to 0. |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
Search Public Merchant Products
Search across all public merchants and products with optional merchant, pricing, stock, marketplace, and localization filters.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| q | query | string | No | Natural-language search query. |
| category | query | string | No | Optional category-name filter. |
| brand | query | string | No | Optional brand filter. |
| min_price | query | number | No | Minimum listed price. |
| max_price | query | number | No | Maximum listed price. |
| in_stock | query | boolean | No | Filter by stock availability. |
| merchant_ids | query | string | No | Comma-separated merchant IDs to scope the search. |
| sort | query | relevance | price_asc | price_desc | No | Sort order. |
| platform | query | shopee | lazada | No | Marketplace platform filter. |
| country | query | string | No | Marketplace country hint (example: sg). |
| language | query | en | th | id | ms | vi | tl | No | Localization language. Defaults to en. |
| include_intent | query | boolean | No | Include lightweight parsed query intent metadata. |
| limit | query | integer | No | Result limit (1..100). Defaults to 20. |
| offset | query | integer | No | Pagination offset (0..10000). Defaults to 0. |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
