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.
Endpoints
Jump directly to an endpoint in the reference below.
Developer Platform
Evaluate SKU Readiness
Score a persisted product or inline SKU payload for agentic commerce readiness, engine eligibility, and recommended fixes.
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
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
| Status | Description | Content Types |
|---|---|---|
| 200 | Ghost mannequin image generated. | application/json |
| 400 | Bad Request - invalid JSON or imageUrl | - |
| 401 | Unauthorized | - |
| 403 | Forbidden - missing catalog:enrich scope | - |
| 502 | Image generation failed or the generated image could not be retrieved. | - |
Get Developer Job Status
Fetch shared async status for developer-platform operations, including import, enrichment, and sync jobs.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| jobId | path | string | Yes | - |
| organizationId | query | string | No | Required for session-authenticated requests; derived from API keys. |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| jobId | path | string | Yes | - |
Request Body
application/json
Required: No
{ organizationId?: string }
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
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
| Status | Description | Content Types |
|---|---|---|
| 200 | Semantic category recommendations with attribute metadata and suggested attribute values. | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Product Not Found | - |
| 422 | Product has no searchable category text | - |
| 500 | Internal Server Error | - |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| organizationId | query | string | No | Optional for API-key requests; required for session-authenticated requests across multiple organizations. |
| marketplace | query | shopee | lazada | tiktok | No | Optional marketplace filter. |
| country | query | string | No | Optional country filter, for example singapore, malaysia, sg, or my. |
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Connected marketplace stores for the organization. | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
Run AI Shelf Share Monitor
Queue AI Shelf Share replay/monitoring for a product, query, or organization catalog.
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| productId | path | string | Yes | OmniCommerce product ID to publish. |
Request Body
application/json
Required: No
{ organizationId?: string; visibility?: live | draft }
Responses
| Status | Description | Content Types |
|---|---|---|
| 202 | Publish jobs queued. | application/json |
| 400 | Bad Request - invalid payload, marketplace not enabled, or store selection required | - |
| 401 | Unauthorized | - |
| 403 | Forbidden | - |
| 404 | Product Not Found | - |
| 500 | Internal Server Error | - |
Sync Product Commercial Fields
Update price, sale price, or stock quantity in OmniCommerce and queue marketplace sync workers where applicable.
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
List Developer Webhooks
List configured developer webhook subscriptions for the authenticated organization.
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
Create Developer Webhook
Create a developer webhook subscription for operation, product, sync, and visibility events.
Responses
| Status | Description | Content Types |
|---|---|---|
| 200 | Success | application/json |
| 400 | Bad Request | - |
| 401 | Unauthorized | - |
| 402 | Insufficient Credits | - |
| 403 | Forbidden | - |
| 500 | Internal Server Error | - |
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 |
Organizations
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
| Status | Description | Content Types |
|---|---|---|
| 201 | Organization created | application/json |
| 400 | Bad Request - Invalid organization name or JSON | - |
| 401 | Unauthorized - Sign in is required | - |
| 500 | Internal Server Error | - |
Products
List Products
List products for the authenticated organization with optional filters and pagination. Supports API key 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 per page. Values above the cap are clamped silently; the applied value is returned in `pagination.limit`. Defaults to 20. |
| offset | query | integer | No | Zero-based pagination offset. Use `pagination.nextOffset` from the previous response to page forward. 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 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
| Status | Description | Content Types |
|---|---|---|
| 202 | Product create/enrich workflow accepted | 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 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
| 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 API key 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 API key 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, ACO 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 | - |
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 | - |
