RetailStoreUpdatedevents are now sent when a retail store is released and when click & collect is connected to a company with existing released stores, so integrations can callGET /retail_storesand discover newly available collection stores without a periodic full refresh.
Changelog
Changes to the SnowBee Public API and developer documentation.
- Demand Planning API sales-forecast and replenishment-parameter batches are now processed after upload, normally within a few minutes. Batch status progresses from
PENDINGtoPROCESSINGand thenCOMPLETEDorFAILEDwith applied, skipped, and rejected item counts. - Added
GET /demand_planning/sales_forecastsfor reading the current forecast horizon per retail or ecom store and SKU. Results are paginated by store and include the forecast run'sgeneratedAttimestamp so integrations can verify applied uploads. - Breaking (experimental Demand Planning API): Demand Planning response timestamps, including
generatedAtand batch receipt, start, and completion times, are now ISO 8601 strings with an offset instead of epoch-second numbers. Clients parsing these fields as numbers must update.
- Added an experimental tenant-wide Demand Planning API for uploading idempotent sales-forecast and replenishment-parameter batches and reading stores, current replenishment parameters, batch limits, and batch status. Uploaded batches are validated and stored but remain
PENDINGuntil processing goes live. - Public API clients are now limited to 1,800 requests per minute per client. Requests above the limit return
429withRetry-Afterand rate-limit headers. - OAuth server metadata, OpenID configuration, and signing keys are now available from standard
/.well-knownendpoints for machine-readable authentication discovery.
- In
GET /orders/{orderIdOrNumber}, receipt and refund net/gross amounts now reconcile currency rounding when the final quantity of a sales order line is captured or returned. Earlier partial amounts stay unchanged; receipts across captures add up to the fully invoiced sales order amounts, and refunds across return orders add up to the original invoice amounts when the full quantity is returned. No integration changes are required.
- Public API order line items can now include
campaignCode. Send it on every line sold under a campaign. ForNORMALcampaigns,netUnitPricemust equal the SKU'scampaignPrice; any additional voucher or coupon share belongs innetUnitOrderDiscountAmount. If the campaign code is not released, does not cover the SKU on the order date, or the line price does not match the campaign rules, the order request is rejected with400. THREE_FOR_TWOorder lines can also namecampaignCode. The line should be priced at the basket's blended per-unit answer, at most the SKU's normal price; the campaign is recorded for reporting, while the line is stored in the same shape as a cash-register 3-for-2 sale.- Existing order integrations that omit
campaignCodestill work, but SnowBee no longer guesses campaign attribution from price. Lines without a campaign code may be recorded as plain sales even when the webshop intended a campaign sale.
- The public API
/healthchecknow probes database health and returns failure status when the API cannot reach its backing database, instead of always returningOK.
GET /campaignsnow exposescampaignTypeon the campaign rather than on every SKU. The type applies to the whole campaign and tells integrations how to interpret each SKU'scampaignPrice.
- SKU inventory lookup now accepts either a SnowBee SKU ID or the SKU number in
GET /skus/{skuId}/inventory. Resolution remains limited to the authenticated e-commerce store assortment and still returns404when the identifier is not available there. - B2C customer lookup by email is available at
GET /customers/by_email/{email}. The email path segment should be URL-encoded; matching is case-insensitive and a missing customer returns404.