curl --request PATCH \
--url https://omnicommerce.sg/api/v1/products/{productId}/price \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"price": 29.9
}'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({price: 29.9})
};
fetch('https://omnicommerce.sg/api/v1/products/{productId}/price', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://omnicommerce.sg/api/v1/products/{productId}/price"
payload = { "price": 29.9 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"apiVersion": "developer_v1",
"ok": true,
"operationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "completed",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"warnings": [
"<string>"
],
"recommendations": [
"<string>"
],
"links": {},
"data": {
"changed": true,
"changedFields": [
"<string>"
],
"price": 123,
"salePrice": 123,
"currency": "<string>",
"syncToMarketplaces": true,
"jobIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"targets": [
{
"platform": "shopee",
"accountId": "<string>",
"status": "queued",
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"targetId": "<string>"
}
],
"emittedEvents": [
"product.price.changed"
]
},
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"apiVersion": "developer_v1",
"ok": true,
"operationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "completed",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"warnings": [
"<string>"
],
"recommendations": [
"<string>"
],
"links": {},
"data": {
"changed": true,
"changedFields": [
"<string>"
],
"price": 123,
"salePrice": 123,
"currency": "<string>",
"syncToMarketplaces": true,
"jobIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"targets": [
{
"platform": "shopee",
"accountId": "<string>",
"status": "queued",
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"targetId": "<string>"
}
],
"emittedEvents": [
"product.price.changed"
]
},
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Update Product Price
Update the canonical catalog price for a simple product or variant UUID. Multi-variant parent products must be updated through their variant IDs. A successful change emits product.price.changed to matching developer webhook subscriptions.
Authorization
Requires an API credential with catalog:write. OmniCommerce derives organizationId from that credential; the request body cannot select or override an organization.
Marketplace sync
The update is Omni-only by default. Set syncToMarketplaces to true to queue durable marketplace work. Omit targets to sync every enabled, published account for the product, or provide exact { platform, accountId } targets. Every explicit target is validated before the catalog changes. The response contains pollable job IDs and immediate per-target queue status; use GET /api/v1/jobs/{jobId} for progress.
curl --request PATCH \
--url https://omnicommerce.sg/api/v1/products/{productId}/price \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"price": 29.9
}'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({price: 29.9})
};
fetch('https://omnicommerce.sg/api/v1/products/{productId}/price', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://omnicommerce.sg/api/v1/products/{productId}/price"
payload = { "price": 29.9 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"apiVersion": "developer_v1",
"ok": true,
"operationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "completed",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"warnings": [
"<string>"
],
"recommendations": [
"<string>"
],
"links": {},
"data": {
"changed": true,
"changedFields": [
"<string>"
],
"price": 123,
"salePrice": 123,
"currency": "<string>",
"syncToMarketplaces": true,
"jobIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"targets": [
{
"platform": "shopee",
"accountId": "<string>",
"status": "queued",
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"targetId": "<string>"
}
],
"emittedEvents": [
"product.price.changed"
]
},
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"apiVersion": "developer_v1",
"ok": true,
"operationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "completed",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"warnings": [
"<string>"
],
"recommendations": [
"<string>"
],
"links": {},
"data": {
"changed": true,
"changedFields": [
"<string>"
],
"price": 123,
"salePrice": 123,
"currency": "<string>",
"syncToMarketplaces": true,
"jobIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"targets": [
{
"platform": "shopee",
"accountId": "<string>",
"status": "queued",
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"targetId": "<string>"
}
],
"emittedEvents": [
"product.price.changed"
]
},
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Authorizations
Bearer API key for server-to-server access. Session auth is also supported in first-party UI flows.
Path Parameters
OmniCommerce simple-product or variant UUID.
Body
- Option 1
- Option 2
New catalog list price. Provide price or salePrice.
x >= 0Optional sale price. Use null to clear it; it must be below the list price.
x >= 0Three-letter ISO currency code.
^[A-Za-z]{3}$Queue durable sync jobs after the Omni catalog update.
Exact enabled and published marketplace accounts. Requires syncToMarketplaces=true.
1 - 25 elementsShow child attributes
Show child attributes
Response
Catalog price updated; no marketplace job was queued.
developer_v1 true completed, accepted Show child attributes
Show child attributes
Show child attributes
Show child attributes