- Payment-capture integrations must now treat captures abandoned in Snowbee as unavailable: list requests omit them, and update requests return
409 CAPTURE_ABANDONED.
Changelog
Changes to the SnowBee Public API and developer documentation.
- Product payloads now include only dynamic attributes applicable through the product's current template or global product attributes; previously stored values for attributes that are no longer applicable are omitted.
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.
- 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.