curl --request GET \
--url https://omnicommerce.sg/api/v1/analytics/products \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://omnicommerce.sg/api/v1/analytics/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://omnicommerce.sg/api/v1/analytics/products"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"ok": true,
"apiVersion": "developer_v1",
"operationId": "<string>",
"status": "accepted",
"warnings": [
"<string>"
],
"recommendations": [
"<string>"
],
"links": {},
"data": {
"filters": {
"from": "<string>",
"to": "<string>",
"marketplace": "<string>",
"country": "<string>",
"store": "<string>",
"currency": "<string>",
"timeZone": "<string>",
"q": "<string>"
},
"products": [
{
"productId": "<string>",
"variantId": "<string>",
"sku": "<string>",
"productName": "<string>",
"thumbnailUrl": "<string>",
"platform": "<string>",
"accountId": "<string>",
"externalProductId": "<string>",
"gmv": 123,
"netSales": 123,
"orders": 0,
"unitsSold": 123,
"revenueShare": 123,
"velocity": 123,
"gmvChangePercent": 123,
"impressions": 123,
"pageviews": 123,
"visitors": 123,
"clicks": 123,
"atcUsers": 123,
"atcUnits": 123,
"viewToOrderCvr": 123,
"visitorValue": 123,
"listingStatus": "<string>",
"channelsLive": 0,
"catalogCurrency": "<string>",
"marketPrices": [
{
"marketplace": "<string>",
"storeId": "<string>",
"storeName": "<string>",
"productId": "<string>",
"sellerSku": "<string>",
"variation": "<string>",
"country": "<string>",
"currency": "<string>",
"price": 1,
"salePrice": 1,
"saleStartDate": "<string>",
"saleEndDate": "<string>",
"status": "<string>"
}
],
"listPrice": 123,
"salePrice": 123,
"discountPct": 123,
"promoLift": 123,
"completenessScore": 123,
"lastPublishedAt": "<string>",
"available": 123,
"daysOfCover": 123,
"stockoutRisk": "<string>",
"cogs": 123,
"cogsCoverage": 123,
"platformFees": 123,
"adsFees": 123,
"contributionProfit": 123,
"contributionMargin": 123,
"returnRate": 123,
"refundAmount": 123,
"adsSpend": 123,
"adsRoas": 123,
"adsAcos": 123,
"contentGmv": 123,
"peerPriceP50": 123,
"searchRank": 123,
"alerts": [
{
"code": "<string>",
"severity": "info",
"message": "<string>"
}
]
}
],
"insights": [
{
"id": "<string>",
"code": "<string>",
"severity": "info",
"category": "conversion",
"title": "<string>",
"summary": "<string>",
"impactLabel": "<string>",
"impactScore": 123,
"productId": "<string>",
"productName": "<string>"
}
],
"coverage": {
"sales": true,
"traffic": true,
"ads": true,
"content": true,
"inventory": true,
"profit": true,
"market": true
}
},
"jobId": "<string>",
"productId": "<string>"
}Get Product Analytics
Per-product sales, traffic, price, stock, profit, and ad performance, ranked by net sales, with ranked insights. Pass productId for specific products, for example on a product page. Matches the Products page. Requires analytics:read.
Amounts are in data.filters.currency. Only orders in that currency are counted; nothing is converted. A range covers at most 366 days.
curl --request GET \
--url https://omnicommerce.sg/api/v1/analytics/products \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://omnicommerce.sg/api/v1/analytics/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://omnicommerce.sg/api/v1/analytics/products"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"ok": true,
"apiVersion": "developer_v1",
"operationId": "<string>",
"status": "accepted",
"warnings": [
"<string>"
],
"recommendations": [
"<string>"
],
"links": {},
"data": {
"filters": {
"from": "<string>",
"to": "<string>",
"marketplace": "<string>",
"country": "<string>",
"store": "<string>",
"currency": "<string>",
"timeZone": "<string>",
"q": "<string>"
},
"products": [
{
"productId": "<string>",
"variantId": "<string>",
"sku": "<string>",
"productName": "<string>",
"thumbnailUrl": "<string>",
"platform": "<string>",
"accountId": "<string>",
"externalProductId": "<string>",
"gmv": 123,
"netSales": 123,
"orders": 0,
"unitsSold": 123,
"revenueShare": 123,
"velocity": 123,
"gmvChangePercent": 123,
"impressions": 123,
"pageviews": 123,
"visitors": 123,
"clicks": 123,
"atcUsers": 123,
"atcUnits": 123,
"viewToOrderCvr": 123,
"visitorValue": 123,
"listingStatus": "<string>",
"channelsLive": 0,
"catalogCurrency": "<string>",
"marketPrices": [
{
"marketplace": "<string>",
"storeId": "<string>",
"storeName": "<string>",
"productId": "<string>",
"sellerSku": "<string>",
"variation": "<string>",
"country": "<string>",
"currency": "<string>",
"price": 1,
"salePrice": 1,
"saleStartDate": "<string>",
"saleEndDate": "<string>",
"status": "<string>"
}
],
"listPrice": 123,
"salePrice": 123,
"discountPct": 123,
"promoLift": 123,
"completenessScore": 123,
"lastPublishedAt": "<string>",
"available": 123,
"daysOfCover": 123,
"stockoutRisk": "<string>",
"cogs": 123,
"cogsCoverage": 123,
"platformFees": 123,
"adsFees": 123,
"contributionProfit": 123,
"contributionMargin": 123,
"returnRate": 123,
"refundAmount": 123,
"adsSpend": 123,
"adsRoas": 123,
"adsAcos": 123,
"contentGmv": 123,
"peerPriceP50": 123,
"searchRank": 123,
"alerts": [
{
"code": "<string>",
"severity": "info",
"message": "<string>"
}
]
}
],
"insights": [
{
"id": "<string>",
"code": "<string>",
"severity": "info",
"category": "conversion",
"title": "<string>",
"summary": "<string>",
"impactLabel": "<string>",
"impactScore": 123,
"productId": "<string>",
"productName": "<string>"
}
],
"coverage": {
"sales": true,
"traffic": true,
"ads": true,
"content": true,
"inventory": true,
"profit": true,
"market": true
}
},
"jobId": "<string>",
"productId": "<string>"
}Authorizations
Bearer API key for server-to-server access. Session auth is also supported in first-party UI flows.
Query Parameters
Required for session auth. API keys already belong to one organization.
160First day of the range (YYYY-MM-DD). Defaults to 29 days before to.
^\d{4}-\d{2}-\d{2}$Last day of the range, inclusive (YYYY-MM-DD). Defaults to today.
^\d{4}-\d{2}-\d{2}$IANA time zone that defines each day, for example Asia/Kuala_Lumpur. Defaults to Asia/Singapore.
80Comma-separated marketplaces, for example shopee,lazada.
200Comma-separated countries. One country selects its currency.
200Comma-separated store (account) ids from GET /api/v1/marketplaces/connected.
1000ISO currency. Only orders in this currency are counted; amounts are not converted. Defaults to the single country's currency, otherwise SGD.
3Search product name or SKU.
200Comma-separated product or variant UUIDs, up to 50, to report only those products.
2000Products to return, ranked by net sales.
1 <= x <= 100Response
Get Product Analytics
"developer_v1"accepted, completed, failed Show child attributes
Show child attributes
Show child attributes
Show child attributes