PUT/v1/tenants/{tenantId}/demand_planning/replenishment_parameter_batches/{batchId}
Upload a batch of replenishment parameters Experimental
The batch id is generated by the client. Retrying the same id with the same payload is safe and returns 200 with the existing status; the same id with a different payload is a 409. The body may be gzip-compressed (Content-Encoding: gzip). Format errors are reported as a 400 that lists every problem with its path in the document; nothing is stored in that case. Whether stores and SKUs exist is checked when the batch is processed and reported per item in the batch status. Limits are published at GET /limits. A corrected batch is a new run: new batch id, newer generatedAt, and its own batchIndex/batchTotal (or none). Send batches sequentially; the per-client rate limit makes parallel uploads no faster.
Parameters
tenantIdrequiredbatchIdrequiredClient-generated UUID for this batch
Content-Encodingoptionalgzip when the body is compressed
Request body (required)
application/jsonA batch of replenishment parameters from one planning run
batchIndexoptional1-based position of this batch within the run. Set together with batchTotal or not at all.
- Format: int32
Example1batchTotaloptionalNumber of batches in the run
- Format: int32
Example3extoptionalPartner-owned fields. Never interpreted by Snowbee.
Show dictionary values
Each dictionary key maps to .
generatedAtrequiredTimestamp of the planning run that produced every item in the batch. Identical for all batches of one run; a later run must have a later value.
- Format: ISO 8681 timestamp
Example"2026-08-28T03:12:00Z"itemCountrequiredMust equal the length of items
- Format: int32
Example5000itemsrequiredShow item fields
extoptionalPartner-owned fields. Never interpreted by Snowbee.
Show dictionary values
Each dictionary key maps to .
maximumInventoryrequiredMaximum inventory as a decimal string with at most 4 decimals
Example"12"reorderPointrequiredReorder point as a decimal string with at most 4 decimals. Must be less than maximumInventory.
Example"3"retailStoreNumberrequired- Example
"1001" skuNumberrequired- Example
"10025"
Responses
Same batch already stored
application/jsonbatchIdrequiredClient-generated batch id
Example"0192a3b4-5c6d-7e8f-9012-3456789abcde"batchIndexoptional- Format: int32
Example12batchKindrequired- Allowed values
"SALES_FORECAST""REPLENISHMENT_PARAMETERS" batchTotaloptional- Format: int32
Example140completedTimeoptional- Format: ISO 8681 timestamp
Example"2025-10-28T12:37:42Z"countsoptionalNull until the batch has been processed
Show child fields
apiUpdatesDisabledrequiredItems skipped because the retail store is not set to take updates from the API in Snowbee (replenishment parameters only)
- Format: int32
Example0appliedrequiredItems written to Snowbee
- Format: int32
Example4996itemsrequired- Format: int32
Example5000lockedrequiredItems skipped because the line is locked in Snowbee (replenishment parameters only)
- Format: int32
Example0rejectedrequiredItems not applied; listed in rejectedItems
- Format: int32
Example4supersededrequiredItems skipped because a newer generatedAt was already applied for the same key
- Format: int32
Example0unchangedrequiredItems skipped because they match the values the store already uses (replenishment parameters only)
- Format: int32
Example0
errorMessageoptionalWhy the batch FAILED
generatedAtrequired- Format: ISO 8681 timestamp
Example"2026-08-28T03:12:00Z"itemCountrequired- Format: int32
Example5000progressrequired- Allowed values
"PENDING""PROCESSING""COMPLETED""COMPLETED_WITH_REJECTED_ITEMS""FAILED" receivedTimerequiredWhen Snowbee stored the batch
- Format: ISO 8681 timestamp
Example"2026-08-28T03:12:04.120Z"rejectedItemsoptionalFirst rejected items; null until processed. See rejectedItemsTruncated.
Show item fields
coderequiredOne of: UNKNOWN_RETAIL_STORE, RETAIL_STORE_NOT_RELEASED, UNKNOWN_ECOM_STORE, ECOM_STORE_NOT_RELEASED, UNKNOWN_SKU, SKU_NOT_IN_ASSORTMENT, REPLENISHMENT_TYPE_MANUAL
Example"UNKNOWN_SKU"ecomStoreNumberoptional- Example
"9001" indexrequired0-based index into items
- Format: int32
Example17messageoptionalretailStoreNumberoptional- Example
"1001" skuNumberoptional- Example
"10025"
rejectedItemsTruncatedrequiredTrue when more items were rejected than are listed
ExamplefalsestartedTimeoptional- Format: ISO 8681 timestamp
Example"2025-10-28T12:37:42Z"warningsoptionalWarnings recorded at receipt and during processing
Show item fields
A non-fatal observation about the batch
coderequiredUNKNOWN_FIELD: a field Snowbee does not know and did not apply
Example"UNKNOWN_FIELD"countoptionalHow many times the observation occurred
- Format: int32
Example5000fieldoptionalPath of the field, with [] for array elements
Example"items[].campaignQuantity"messageoptional
New batch stored
application/jsonbatchIdrequiredClient-generated batch id
Example"0192a3b4-5c6d-7e8f-9012-3456789abcde"batchIndexoptional- Format: int32
Example12batchKindrequired- Allowed values
"SALES_FORECAST""REPLENISHMENT_PARAMETERS" batchTotaloptional- Format: int32
Example140completedTimeoptional- Format: ISO 8681 timestamp
Example"2025-10-28T12:37:42Z"countsoptionalNull until the batch has been processed
Show child fields
apiUpdatesDisabledrequiredItems skipped because the retail store is not set to take updates from the API in Snowbee (replenishment parameters only)
- Format: int32
Example0appliedrequiredItems written to Snowbee
- Format: int32
Example4996itemsrequired- Format: int32
Example5000lockedrequiredItems skipped because the line is locked in Snowbee (replenishment parameters only)
- Format: int32
Example0rejectedrequiredItems not applied; listed in rejectedItems
- Format: int32
Example4supersededrequiredItems skipped because a newer generatedAt was already applied for the same key
- Format: int32
Example0unchangedrequiredItems skipped because they match the values the store already uses (replenishment parameters only)
- Format: int32
Example0
errorMessageoptionalWhy the batch FAILED
generatedAtrequired- Format: ISO 8681 timestamp
Example"2026-08-28T03:12:00Z"itemCountrequired- Format: int32
Example5000progressrequired- Allowed values
"PENDING""PROCESSING""COMPLETED""COMPLETED_WITH_REJECTED_ITEMS""FAILED" receivedTimerequiredWhen Snowbee stored the batch
- Format: ISO 8681 timestamp
Example"2026-08-28T03:12:04.120Z"rejectedItemsoptionalFirst rejected items; null until processed. See rejectedItemsTruncated.
Show item fields
coderequiredOne of: UNKNOWN_RETAIL_STORE, RETAIL_STORE_NOT_RELEASED, UNKNOWN_ECOM_STORE, ECOM_STORE_NOT_RELEASED, UNKNOWN_SKU, SKU_NOT_IN_ASSORTMENT, REPLENISHMENT_TYPE_MANUAL
Example"UNKNOWN_SKU"ecomStoreNumberoptional- Example
"9001" indexrequired0-based index into items
- Format: int32
Example17messageoptionalretailStoreNumberoptional- Example
"1001" skuNumberoptional- Example
"10025"
rejectedItemsTruncatedrequiredTrue when more items were rejected than are listed
ExamplefalsestartedTimeoptional- Format: ISO 8681 timestamp
Example"2025-10-28T12:37:42Z"warningsoptionalWarnings recorded at receipt and during processing
Show item fields
A non-fatal observation about the batch
coderequiredUNKNOWN_FIELD: a field Snowbee does not know and did not apply
Example"UNKNOWN_FIELD"countoptionalHow many times the observation occurred
- Format: int32
Example5000fieldoptionalPath of the field, with [] for array elements
Example"items[].campaignQuantity"messageoptional
400Validation failed; details is a SbPublicApiValidationErrorDetails
Validation failed; details is a SbPublicApiValidationErrorDetails
application/jsondetailsoptionalStructured details; shape depends on error
errorrequired- Example
"VALIDATION_ERROR" messagerequiredHuman-readable error message
Example"3 of 5000 items failed validation"resolutionrequiredSuggested next action
Example"Correct the invalid items and retry the complete batch"
401Response
application/jsonerrorrequiredStable error code
Example"INVALID_REQUEST"messagerequiredHuman-readable error message
Example"Invalid customer ID format"resolutionrequiredSuggested next action
Example"Correct the customer ID and retry the request"
403Response
application/jsonerrorrequiredStable error code
Example"INVALID_REQUEST"messagerequiredHuman-readable error message
Example"Invalid customer ID format"resolutionrequiredSuggested next action
Example"Correct the customer ID and retry the request"
409Batch id already used with a different payload
Batch id already used with a different payload
application/jsonerrorrequiredStable error code
Example"INVALID_REQUEST"messagerequiredHuman-readable error message
Example"Invalid customer ID format"resolutionrequiredSuggested next action
Example"Correct the customer ID and retry the request"
413A limit was exceeded; details is a SbPublicApiLimitExceededDetails
A limit was exceeded; details is a SbPublicApiLimitExceededDetails
application/jsondetailsoptionalStructured details; shape depends on error
errorrequired- Example
"VALIDATION_ERROR" messagerequiredHuman-readable error message
Example"3 of 5000 items failed validation"resolutionrequiredSuggested next action
Example"Correct the invalid items and retry the complete batch"
415Content-Type must be application/json
Content-Type must be application/json
application/jsonerrorrequiredStable error code
Example"INVALID_REQUEST"messagerequiredHuman-readable error message
Example"Invalid customer ID format"resolutionrequiredSuggested next action
Example"Correct the customer ID and retry the request"