Preview Demotion Impact
POST/api/v2/inventory/movements/preview-demotion-impact
Dry-run preview: given an outbound/adjust-down payload, compute which allocations (unallocated, soft-allocated, hard-allocated) would be consumed, and whether any hard-allocated fulfillments will require an explicit void confirmation before commit.
Named route: v2.inventory.movements.preview-demotion-impact
When to call: UI should invoke this BEFORE committing direction=ship or direction=adjust_down to surface any allocations that would be demoted, including hard-allocated fulfillments whose shipping labels may need to be voided.
Key response field: requires_void_confirmation (bool) — when true, the caller MUST include a matching void_confirmations[] entry in the commit payload for every hard-allocated fulfillment listed in lines[*].buckets.hard_allocated.fulfillments.
Response shape:
{
"data": {
"requires_void_confirmation": true,
"lines": [
{
"product_id": 123,
"product_sku": "SKU-ABC",
"product_name": "Widget",
"quantity_requested": 10,
"buckets": {
"unallocated": { quantity, ... },
"soft_allocated": { quantity, fulfillments: [...] },
"hard_allocated": { quantity, fulfillments: [ { fulfillment_id, provider, ... } ] }
}
}
]
}
}
Request
Responses
- 200
- 401
- 403
- 422
- 429
Successful response
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.