How to
Bulk update sale prices
Reset sale prices from a previous promotion and apply new sale prices across markets using the bulk update prices API.
Overview
Perform a bulk reset of sale prices from a previous promotion and apply new sale prices for the current promotion across one or more markets.
Prerequisites
- Management API access (
X-ApiKey+Basic auth credentials) - Market ID(s) where the promotion runs
- Knowledge of Geins standard price list IDs:
- Sale price lists have IDs ending in
1 - Campaign price lists (ID ending in
2) cannot be updated; such entries will be ignored and can only be updated by the campaign service - Standard ID formula:
Market ID × 1000000 + Price list type- Ordinary =
0 - Sale =
1 - Campaign =
2
- Ordinary =
- Examples:
- Market 1, Sale →
1000001 - Market 2, Sale →
2000001
- Market 1, Sale →
- Sale price lists have IDs ending in
- Access to Merchant Center for verification
Goal
- Remove/clear sale prices that belonged to the previous promotion
- Set new sale prices for the current promotion
- Do this reliably in bulk with the Management API
Architecture at a glance
- Prepare two payloads (reset payload, new-sale payload) → call Management API bulk update → verify results
APIs used
- Management API: (bulk update price list prices):
PUT /api/pricelist/price
Plan
- Create a reset payload to clear previous promotion sale values. Use -1 as value to remove Sale price.
- Create a new-sale payload with the new sale prices.
- Run a dry-run against a test market or small SKU set.
- Execute bulk update in batches for production markets.
- Verify.
Step-by-step
Build reset payload for previous promotion
- For each sale price entry to clear, prepare an update that:
- Sets the sale price to -1
- Example:
[
{ "priceListId": 1000001, "productId": "10001", "price": -1, "currency": "SEK" },
{ "priceListId": 1000001, "productId": "10002", "price": -1, "currency": "SEK" }
]
curl -L 'https://mgmtapi.geins.io/API/pricelist/price' \
-X PUT \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H "X-ApiKey: {MGMT_API_KEY}" \
-u "{MGMT_USERNAME}:{MGMT_PASSWORD}" \
-d '[
{ "priceListId": 1000001, "productId": "10001", "price": -1, "currency": "SEK" },
{ "priceListId": 1000001, "productId": "10002", "price": -1, "currency": "SEK" }
]'
- Use a dry-run on a small sample to confirm the API accepts the reset format.
Build new-sale payload for current promotion
- Prepare updates with new sale price values and currency:
[
{ "priceListId": 1000001, "productId": "10003", "price": 49.99, "currency": "SEK" },
{ "priceListId": 1000001, "productId": "10004", "price": 29.99, "currency": "SEK" }
]
curl -L 'https://mgmtapi.geins.io/API/pricelist/price' \
-X PUT \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H "X-ApiKey: {MGMT_API_KEY}" \
-u "{MGMT_USERNAME}:{MGMT_PASSWORD}" \
-d '[
{ "priceListId": 1000001, "productId": "10003", "price": 49.99, "currency": "SEK" },
{ "priceListId": 1000001, "productId": "10004", "price": 29.99, "currency": "SEK" }
]'
Execute updates in safe batches
- Run the reset payload first in a dry-run or small production batch, verify results.
- Next, apply the new-sale payload in batches (e.g., 500–2000 records per request. Do not exceed 5000 records per request.).
- Monitor success/failure responses; retry transient failures.
Verify and publish
- Spot-check Products in each market and compare to the backup.
- Confirm storefront/checkout pricing reflects changes.
- Compare counts: number of records updated vs expected from export.
response.json
{
"Message": "Update success.",
"Invalid": null,
"NotFound": null,
"UpdateCount": 2
}
If errors occurred, review `Invalid` and `NotFound` arrays in the response for troubleshooting.
Related