Bulk Update Product Prices and Stock
curl --request POST \
--url https://omnicommerce.ai/api/v1/products/bulk-update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"documentIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({documentIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']})
};
fetch('https://omnicommerce.ai/api/v1/products/bulk-update', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://omnicommerce.ai/api/v1/products/bulk-update"
payload = { "documentIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"ok": true,
"data": {
"success": true,
"succeededCount": 123,
"failedCount": 123,
"pendingCount": 123,
"status": "pending",
"imports": [
{
"kind": "price",
"importId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"documentIds": [
"<string>"
],
"scope": "price",
"results": [
{
"documentId": "<string>",
"success": true,
"pending": true,
"error": "<string>",
"price": {
"success": true,
"importId": "<string>",
"pending": true,
"error": "<string>"
},
"inventory": {
"success": true,
"importId": "<string>",
"pending": true,
"error": "<string>"
}
}
]
},
"apiVersion": "<string>",
"operationId": "<string>",
"status": "<string>"
}Catalog
Bulk Update Product Prices and Stock
Update existing catalog SKUs from 1–10 uploaded CSV or Excel documentIds, with up to 10,000 rows per file. Requires catalog:write and the corresponding product or inventory capabilities.
File and source selection
Exact SKU matching preserves zero values and rejects duplicate, ambiguous, or unknown SKUs. Inventory needs an authorized manual or CSV sourceId or locationId. Explicit column names override detection. syncToMarketplaces defaults to true. Use marketplaces to limit which existing listings are synced.
Track the results
Pass every saved import reference to products.bulkUpdateStatus. Results preserve document order. The workflow runs after the request returns. Applied inventory means source balances were saved and listing sync was queued.
POST
/
api
/
v1
/
products
/
bulk-update
Bulk Update Product Prices and Stock
curl --request POST \
--url https://omnicommerce.ai/api/v1/products/bulk-update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"documentIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({documentIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']})
};
fetch('https://omnicommerce.ai/api/v1/products/bulk-update', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://omnicommerce.ai/api/v1/products/bulk-update"
payload = { "documentIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"ok": true,
"data": {
"success": true,
"succeededCount": 123,
"failedCount": 123,
"pendingCount": 123,
"status": "pending",
"imports": [
{
"kind": "price",
"importId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"documentIds": [
"<string>"
],
"scope": "price",
"results": [
{
"documentId": "<string>",
"success": true,
"pending": true,
"error": "<string>",
"price": {
"success": true,
"importId": "<string>",
"pending": true,
"error": "<string>"
},
"inventory": {
"success": true,
"importId": "<string>",
"pending": true,
"error": "<string>"
}
}
]
},
"apiVersion": "<string>",
"operationId": "<string>",
"status": "<string>"
}Authorizations
Body
application/json