Inventory Groups require inventory scopes. Reads use read_inventory; writes use write_inventory. Creating an inventory group requires name and sku; slug is optional and is generated from the name when omitted. Every location visible to the token is immediately part of the group's inventory view and reads as zero until inventory or a threshold is first written; there is no separate location-assignment step. Set, adjust, threshold, and bulk-mutation writes create missing stock levels atomically. Group responses include aggregate stock, linked product counts, and overall low-stock state. Successful stock changes update the movement ledger and fire inventory_levels/update atomically, while a failed write changes nothing. Low-stock alerts fire inventory/low_stock for a location or for the whole group. Subscribing to these events and to inventory_groups/* requires read_inventory. App tokens see merchant-managed locations and their own app-managed locations, never another app's locations. Stock at an app-managed location is writable only by that location's owning active app installation; merchants see those rows for operational context but cannot change them. Single and bulk group deletion never discard stock or detach references: non-zero quantity, reservations, linked products, linked variants, or pending/in-transit transfers block deletion, bulk delete is all-or-nothing, and movement history is preserved.
Endpoints#
Inventory Group limits
Fetch inventory group limits and field constraints.
Returns the field lengths, quantity caps, stock thresholds, page-size caps, and sort columns enforced by the inventory service.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
List inventory groups
List store inventory groups.
Returns paginated inventory groups with aggregate stock, linked product counts, and low-stock state. quantity is physical on hand. reserved is all held stock, the sum of checkout_held (units shoppers are paying for right now; the hold is released if payment doesn't complete in time), order_committed (units promised to placed orders that haven't shipped yet) and other_held (units set aside for stock transfers between locations). available = quantity - reserved. total counts matching results; store_total counts all inventory groups in the store. Reset page to 1 when filters or sorting change.
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number. |
limit
|
integer |
Page size. |
search
|
string |
Search inventory groups by name, slug, or SKU. |
low_stock_only
|
boolean |
When true, return only low-stock groups. |
location_id
|
uuid |
Filter to groups with stock at this location. |
sort_by
|
string |
Sort field from the Inventory Group list contract.
Allowed values
namequantitycreated_at |
sort_direction
|
string |
Sort direction from the Inventory Group list contract.
Allowed values
ascdesc |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_PAGEPage must be at least 1.
-
400VALIDATION_LIST_INVALID_LIMITLimit is outside the inventory group contract.
-
400VALIDATION_LIST_INVALID_SORT_BYSort field is not allowed for this endpoint.
-
400VALIDATION_LIST_INVALID_SORT_DIRECTIONSort direction must be asc or desc.
-
400VALIDATION_SEARCH_TOO_LONGSearch exceeds the inventory group search limit.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
Get inventory group
Fetch one inventory group by id.
Returns the inventory group, its aggregate stock, linked products and variants count, and per-location stock rows. quantity is physical on hand. reserved is all held stock, the sum of checkout_held (units shoppers are paying for right now; the hold is released if payment doesn't complete in time), order_committed (units promised to placed orders that haven't shipped yet) and other_held (units set aside for stock transfers between locations). available = quantity - reserved.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
List linked products
List simple products linked directly to one inventory group.
Returns simple products whose inventory source is this group. Variable product parents are not repeated here; their linked variants are returned by the linked variants endpoint. Link or unlink a product through the Product create/update inventory fields, not by mutating this read-only relationship list.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number. |
limit
|
integer |
Page size. |
search
|
string |
Search linked products by product title or product SKU. |
sort_by
|
string |
Sort by
Allowed values
namequantitycreated_at |
sort_direction
|
string |
Sort direction:
Allowed values
ascdesc |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_PAGEPage must be at least 1.
-
400VALIDATION_LIST_INVALID_LIMITLimit is outside the inventory group contract.
-
400VALIDATION_LIST_INVALID_SORT_BYSort field is not allowed for this endpoint.
-
400VALIDATION_LIST_INVALID_SORT_DIRECTIONSort direction must be asc or desc.
-
400VALIDATION_SEARCH_TOO_LONGSearch exceeds the inventory group search limit.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
List linked variants
List product variants linked directly to one inventory group.
Returns variants whose inventory source is this group together with their parent product identity. Link or unlink a variant through the Product create/update variant inventory fields, not by mutating this read-only relationship list.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number. |
limit
|
integer |
Page size. |
search
|
string |
Search linked variants by product title, variant title, or variant SKU. |
sort_by
|
string |
Sort by
Allowed values
namequantitycreated_at |
sort_direction
|
string |
Sort direction:
Allowed values
ascdesc |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_PAGEPage must be at least 1.
-
400VALIDATION_LIST_INVALID_LIMITLimit is outside the inventory group contract.
-
400VALIDATION_LIST_INVALID_SORT_BYSort field is not allowed for this endpoint.
-
400VALIDATION_LIST_INVALID_SORT_DIRECTIONSort direction must be asc or desc.
-
400VALIDATION_SEARCH_TOO_LONGSearch exceeds the inventory group search limit.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
Create inventory group
Create inventory group.
Creates a stock pool. name and sku are required. slug is optional on create and is generated from the name when omitted. SKU uniqueness is checked across products, variants, and inventory groups.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
required
|
string |
Inventory Group name. |
sku
required
|
string |
Unique SKU for the stock pool. |
slug
|
string |
Optional slug. Omit to generate from name. |
description
|
string |
Optional internal description. |
overall_low_stock_threshold
|
integer |
Optional threshold for total available stock across all locations. Null disables the overall alert. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest JSON could not be parsed.
-
400INVENTORY_GROUP_NAME_REQUIREDName is empty after normalization.
-
400INVENTORY_GROUP_NAME_TOO_LONGName exceeds the Inventory Group contract max length.
-
400INVENTORY_GROUP_NAME_INVALID_CHARSName contains invalid characters.
-
400INVENTORY_GROUP_SKU_REQUIREDSKU is empty after normalization.
-
400INVENTORY_GROUP_SKU_TOO_LONGSKU exceeds the Inventory Group contract max length.
-
400INVENTORY_GROUP_SKU_INVALID_CHARSSKU contains invalid characters.
-
400INVENTORY_GROUP_SKU_INVALID_FORMATSKU contains characters outside the shared SKU contract.
-
400INVENTORY_GROUP_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400INVENTORY_GROUP_SLUG_INVALID_FORMATSlug is not valid for inventory group URLs.
-
400INVENTORY_GROUP_SLUG_TOO_LONGSlug exceeds the Inventory Group contract max length.
-
400INVENTORY_GROUP_SLUG_GENERATION_FAILEDA slug could not be generated from the name.
-
409INVENTORY_GROUP_UNIQUE_SLUG_GENERATION_FAILEDA unique slug could not be generated for this store.
-
400INVENTORY_GROUP_DESCRIPTION_TOO_LONGDescription exceeds the Inventory Group contract max length.
-
400INVENTORY_GROUP_DESCRIPTION_INVALID_CHARSDescription contains invalid characters.
-
400INVENTORY_GROUP_THRESHOLD_NEGATIVELow-stock threshold cannot be negative.
-
400INVENTORY_GROUP_THRESHOLD_TOO_LARGELow-stock threshold exceeds the contract maximum.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
409INVENTORY_GROUP_DUPLICATEAnother inventory group in this store already uses this slug. SKU conflicts return the SKU_IN_USE codes.
-
409SKU_IN_USE_BY_PRODUCTSKU is already used by a product.
-
409SKU_IN_USE_BY_VARIANTSKU is already used by a product variant.
-
409SKU_IN_USE_BY_GROUPSKU is already used by another inventory group.
-
409SKU_IN_USESKU is already used by another SKU-backed resource.
-
409INVENTORY_GROUP_LIMIT_REACHEDStore Inventory Group cap has been reached.
Update inventory group
Update inventory group.
Updates provided fields. Omitted fields stay unchanged. Omit slug to keep the current slug; unlike create, update does not generate a slug. Send null to clear overall_low_stock_threshold; send an empty description to clear it.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
|
string |
Inventory Group name. |
sku
|
string |
Unique SKU for the stock pool. |
slug
|
string |
Optional slug. Omit to keep the current slug; an empty string is invalid. |
description
|
string |
Optional internal description. |
overall_low_stock_threshold
|
integer |
Optional threshold for total available stock across all locations. Null disables the overall alert. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest JSON could not be parsed.
-
400INVENTORY_GROUP_NAME_REQUIREDName is empty after normalization.
-
400INVENTORY_GROUP_NAME_TOO_LONGName exceeds the Inventory Group contract max length.
-
400INVENTORY_GROUP_NAME_INVALID_CHARSName contains invalid characters.
-
400INVENTORY_GROUP_SKU_REQUIREDSKU is empty after normalization.
-
400INVENTORY_GROUP_SKU_TOO_LONGSKU exceeds the Inventory Group contract max length.
-
400INVENTORY_GROUP_SKU_INVALID_CHARSSKU contains invalid characters.
-
400INVENTORY_GROUP_SKU_INVALID_FORMATSKU contains characters outside the shared SKU contract.
-
400INVENTORY_GROUP_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400INVENTORY_GROUP_SLUG_INVALID_FORMATSlug is not valid for inventory group URLs.
-
400INVENTORY_GROUP_SLUG_TOO_LONGSlug exceeds the Inventory Group contract max length.
-
400INVENTORY_GROUP_SLUG_GENERATION_FAILEDA slug could not be generated from the name.
-
409INVENTORY_GROUP_UNIQUE_SLUG_GENERATION_FAILEDA unique slug could not be generated for this store.
-
400INVENTORY_GROUP_DESCRIPTION_TOO_LONGDescription exceeds the Inventory Group contract max length.
-
400INVENTORY_GROUP_DESCRIPTION_INVALID_CHARSDescription contains invalid characters.
-
400INVENTORY_GROUP_THRESHOLD_NEGATIVELow-stock threshold cannot be negative.
-
400INVENTORY_GROUP_THRESHOLD_TOO_LARGELow-stock threshold exceeds the contract maximum.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
409INVENTORY_GROUP_DUPLICATEAnother inventory group in this store already uses this slug. SKU conflicts return the SKU_IN_USE codes.
-
409SKU_IN_USE_BY_PRODUCTSKU is already used by a product.
-
409SKU_IN_USE_BY_VARIANTSKU is already used by a product variant.
-
409SKU_IN_USE_BY_GROUPSKU is already used by another inventory group.
-
409SKU_IN_USESKU is already used by another SKU-backed resource.
-
409INVENTORY_GROUP_LIMIT_REACHEDStore Inventory Group cap has been reached.
Delete inventory group
Delete inventory group.
Deletes the group only when every location has zero quantity and zero reservations and no products, variants, or active transfers still reference it. Stock and reservations are never discarded implicitly; adjust each location to zero first. Movement history is preserved after deletion.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
409INVENTORY_GROUP_DELETE_HAS_PRODUCTSInventory Group still has linked products.
-
409INVENTORY_GROUP_DELETE_HAS_INVENTORYInventory Group still has non-zero quantity or reservations. Adjust every location to zero first.
-
409INVENTORY_GROUP_DELETE_HAS_VARIANTSInventory Group still has linked variants.
-
409INVENTORY_GROUP_DELETE_HAS_TRANSFERSInventory Group still has pending or in-transit transfers.
Bulk delete inventory groups
Delete multiple inventory groups atomically.
Validates and locks every requested group before deleting any. If an id is missing, duplicated, any group has non-zero quantity or reservations, or any group still has linked products, linked variants, or a pending/in-transit transfer, the entire request fails and nothing is detached or deleted. Adjust every location to zero first. Movement history is preserved. Successful deletion releases each group SKU and queues its audit and delete-webhook records in the same transaction.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
group_ids
required
|
array<string> |
Store-scoped inventory group ids to delete. Duplicates are rejected. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest JSON could not be parsed or contains unknown fields.
-
400INVENTORY_GROUP_BULK_NO_IDSNo inventory group ids were provided.
-
400INVENTORY_GROUP_BULK_DELETE_TOO_MANYBatch exceeds the inventory group bulk-delete cap.
-
400INVENTORY_GROUP_BULK_DUPLICATE_IDThe request contains a duplicate inventory group id.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
409INVENTORY_GROUP_DELETE_HAS_PRODUCTSInventory Group still has linked products.
-
409INVENTORY_GROUP_DELETE_HAS_INVENTORYInventory Group still has non-zero quantity or reservations. Adjust every location to zero first.
-
409INVENTORY_GROUP_DELETE_HAS_VARIANTSInventory Group still has linked variants.
-
409INVENTORY_GROUP_DELETE_HAS_TRANSFERSInventory Group still has pending or in-transit transfers.
Set inventory group quantity
Set absolute stock at one location.
Writes an absolute quantity at a visible location. No location-assignment step is required: a location without stored group inventory reads as zero and this request creates its stock level atomically. App-managed locations are writable only by their owning active installation. The new quantity cannot be below reserved stock. Send expected_quantity to make the write a compare-and-set: when the current on-hand quantity differs the request is refused with 409 STOCK_LEVEL_EXPECTED_QUANTITY_MISMATCH and nothing changes. Successful changes update the stock ledger and aggregate stock together and fire inventory_levels/update — a failure leaves nothing partially written. Send a stable Idempotency-Key when retrying.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Idempotency-Key
|
string |
Optional on the first attempt and required for a safe retry. Scoped to the calling app or merchant actor, at most 200 characters. An identical replay within 7 days returns the original result without a second stock write, audit entry or webhook; reuse with different input returns 409 |
Body parameters
| Name | Type | Description |
|---|---|---|
location_id
required
|
uuid |
Location id. |
quantity
required
|
integer |
Absolute quantity at the location. |
expected_quantity
|
integer |
Optional compare-and-set guard: the on-hand quantity you counted against. A mismatch returns 409 and changes nothing. |
reason
required
|
string |
Inventory movement reason. |
notes
|
string |
Optional movement note. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest JSON could not be parsed.
-
400INVENTORY_GROUP_LOCATION_REQUIREDLocation is required.
-
400INVENTORY_GROUP_LOCATIONS_REQUIREDAt least one location is required.
-
400INVENTORY_GROUP_LOCATIONS_NOT_FOUNDOne or more locations do not exist in this store.
-
400INVENTORY_GROUP_LOCATION_DUPLICATEThe same location appears more than once.
-
400INVENTORY_GROUP_QUANTITY_NEGATIVEQuantity cannot be negative.
-
400INVENTORY_GROUP_QUANTITY_TOO_LARGEQuantity exceeds the contract maximum.
-
400INVENTORY_GROUP_QUANTITY_BELOW_RESERVEDQuantity cannot be set below reserved stock.
-
400INVENTORY_GROUP_ADJUST_NEGATIVEAdjustment would make quantity negative.
-
400INVENTORY_GROUP_ADJUST_BELOW_RESERVEDAdjustment would make quantity lower than reserved stock.
-
400INVENTORY_GROUP_ADJUST_TOO_LARGEAdjustment would exceed the contract maximum.
-
400INVENTORY_GROUP_THRESHOLD_NEGATIVELow-stock threshold cannot be negative.
-
400INVENTORY_GROUP_THRESHOLD_TOO_LARGELow-stock threshold exceeds the contract maximum.
-
400INVENTORY_GROUP_THRESHOLD_REQUIREDSet-threshold was sent without low_stock_threshold. Send null to clear it.
-
400INVENTORY_GROUP_REASON_REQUIREDMovement reason is required.
-
400INVENTORY_GROUP_REASON_INVALIDMovement reason is not allowed.
-
400INVENTORY_GROUP_NOTES_TOO_LONGMovement notes exceed the contract max length.
-
400INVENTORY_GROUP_NOTES_INVALID_CHARSMovement notes contain invalid characters.
-
403LOCATION_APP_MANAGED_NO_EDITThe location belongs to another app or its owning installation is inactive.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
404INVENTORY_GROUP_STOCK_NOT_FOUNDNo stock row exists for the requested location.
-
409INVENTORY_GROUP_STOCK_EXISTSStock already exists at one of the selected locations.
-
400INVENTORY_GROUP_STOCK_MAX_LOCATIONSThe bulk stock batch exceeds the contract maximum.
-
400STOCK_LEVEL_EXPECTED_QUANTITY_INVALIDAn expected quantity is negative.
-
400STOCK_LEVEL_EXPECTED_QUANTITY_SET_ONLYExpected quantities were sent with an action other than set_quantity.
-
409STOCK_LEVEL_EXPECTED_QUANTITY_MISMATCHThe current on-hand quantity differs from the expected quantity; nothing changed.
-
400STOCK_WRITE_IDEMPOTENCY_KEY_TOO_LONGIdempotency-Key exceeds 200 characters.
-
409STOCK_WRITE_IDEMPOTENCY_CONFLICTThe idempotency key was already used for a different stock write.
-
409LOCATION_ARCHIVED_NO_EDITThe write would change stock at an archived location.
Adjust inventory group quantity
Add or subtract stock at one location.
Applies a signed adjustment at a visible location. No location-assignment step is required: a positive adjustment creates a missing zero stock level atomically; a negative adjustment against zero is rejected. App-managed locations are writable only by their owning active installation. Adjustments cannot make quantity negative or below reserved stock. Successful changes update the stock ledger and aggregate stock together and fire inventory_levels/update — a failure leaves nothing partially written. Send a stable Idempotency-Key when retrying: a replay returns the original result without adjusting twice.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Idempotency-Key
|
string |
Optional on the first attempt and required for a safe retry. Scoped to the calling app or merchant actor, at most 200 characters. An identical replay within 7 days returns the original result without a second stock write, audit entry or webhook; reuse with different input returns 409 |
Body parameters
| Name | Type | Description |
|---|---|---|
location_id
required
|
uuid |
Location id. |
adjustment
required
|
integer |
Signed quantity delta. |
reason
required
|
string |
Inventory movement reason. |
notes
|
string |
Optional movement note. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest JSON could not be parsed.
-
400INVENTORY_GROUP_LOCATION_REQUIREDLocation is required.
-
400INVENTORY_GROUP_LOCATIONS_REQUIREDAt least one location is required.
-
400INVENTORY_GROUP_LOCATIONS_NOT_FOUNDOne or more locations do not exist in this store.
-
400INVENTORY_GROUP_LOCATION_DUPLICATEThe same location appears more than once.
-
400INVENTORY_GROUP_QUANTITY_NEGATIVEQuantity cannot be negative.
-
400INVENTORY_GROUP_QUANTITY_TOO_LARGEQuantity exceeds the contract maximum.
-
400INVENTORY_GROUP_QUANTITY_BELOW_RESERVEDQuantity cannot be set below reserved stock.
-
400INVENTORY_GROUP_ADJUST_NEGATIVEAdjustment would make quantity negative.
-
400INVENTORY_GROUP_ADJUST_BELOW_RESERVEDAdjustment would make quantity lower than reserved stock.
-
400INVENTORY_GROUP_ADJUST_TOO_LARGEAdjustment would exceed the contract maximum.
-
400INVENTORY_GROUP_THRESHOLD_NEGATIVELow-stock threshold cannot be negative.
-
400INVENTORY_GROUP_THRESHOLD_TOO_LARGELow-stock threshold exceeds the contract maximum.
-
400INVENTORY_GROUP_THRESHOLD_REQUIREDSet-threshold was sent without low_stock_threshold. Send null to clear it.
-
400INVENTORY_GROUP_REASON_REQUIREDMovement reason is required.
-
400INVENTORY_GROUP_REASON_INVALIDMovement reason is not allowed.
-
400INVENTORY_GROUP_NOTES_TOO_LONGMovement notes exceed the contract max length.
-
400INVENTORY_GROUP_NOTES_INVALID_CHARSMovement notes contain invalid characters.
-
403LOCATION_APP_MANAGED_NO_EDITThe location belongs to another app or its owning installation is inactive.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
404INVENTORY_GROUP_STOCK_NOT_FOUNDNo stock row exists for the requested location.
-
409INVENTORY_GROUP_STOCK_EXISTSStock already exists at one of the selected locations.
-
400INVENTORY_GROUP_STOCK_MAX_LOCATIONSThe bulk stock batch exceeds the contract maximum.
-
400STOCK_LEVEL_EXPECTED_QUANTITY_INVALIDAn expected quantity is negative.
-
400STOCK_LEVEL_EXPECTED_QUANTITY_SET_ONLYExpected quantities were sent with an action other than set_quantity.
-
409STOCK_LEVEL_EXPECTED_QUANTITY_MISMATCHThe current on-hand quantity differs from the expected quantity; nothing changed.
-
400STOCK_WRITE_IDEMPOTENCY_KEY_TOO_LONGIdempotency-Key exceeds 200 characters.
-
409STOCK_WRITE_IDEMPOTENCY_CONFLICTThe idempotency key was already used for a different stock write.
-
409LOCATION_ARCHIVED_NO_EDITThe write would change stock at an archived location.
Set inventory group low-stock threshold
Set or clear the per-location low-stock threshold.
Sets a low-stock threshold at a visible location. No location-assignment step is required; setting a threshold creates the zero stock level atomically when needed. App-managed locations are writable only by their owning active installation. low_stock_threshold is required: send a number to set it or null to clear it; omitting it is refused with INVENTORY_GROUP_THRESHOLD_REQUIRED. Threshold changes fire inventory_levels/update and may trigger low-stock notifications and webhooks.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
location_id
required
|
uuid |
Location id. |
low_stock_threshold
required
|
integer |
Per-location threshold. Required: send a number to set it or null to clear it; 0 is valid. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest JSON could not be parsed.
-
400INVENTORY_GROUP_LOCATION_REQUIREDLocation is required.
-
400INVENTORY_GROUP_LOCATIONS_REQUIREDAt least one location is required.
-
400INVENTORY_GROUP_LOCATIONS_NOT_FOUNDOne or more locations do not exist in this store.
-
400INVENTORY_GROUP_LOCATION_DUPLICATEThe same location appears more than once.
-
400INVENTORY_GROUP_QUANTITY_NEGATIVEQuantity cannot be negative.
-
400INVENTORY_GROUP_QUANTITY_TOO_LARGEQuantity exceeds the contract maximum.
-
400INVENTORY_GROUP_QUANTITY_BELOW_RESERVEDQuantity cannot be set below reserved stock.
-
400INVENTORY_GROUP_ADJUST_NEGATIVEAdjustment would make quantity negative.
-
400INVENTORY_GROUP_ADJUST_BELOW_RESERVEDAdjustment would make quantity lower than reserved stock.
-
400INVENTORY_GROUP_ADJUST_TOO_LARGEAdjustment would exceed the contract maximum.
-
400INVENTORY_GROUP_THRESHOLD_NEGATIVELow-stock threshold cannot be negative.
-
400INVENTORY_GROUP_THRESHOLD_TOO_LARGELow-stock threshold exceeds the contract maximum.
-
400INVENTORY_GROUP_THRESHOLD_REQUIREDSet-threshold was sent without low_stock_threshold. Send null to clear it.
-
400INVENTORY_GROUP_REASON_REQUIREDMovement reason is required.
-
400INVENTORY_GROUP_REASON_INVALIDMovement reason is not allowed.
-
400INVENTORY_GROUP_NOTES_TOO_LONGMovement notes exceed the contract max length.
-
400INVENTORY_GROUP_NOTES_INVALID_CHARSMovement notes contain invalid characters.
-
403LOCATION_APP_MANAGED_NO_EDITThe location belongs to another app or its owning installation is inactive.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
404INVENTORY_GROUP_STOCK_NOT_FOUNDNo stock row exists for the requested location.
-
409INVENTORY_GROUP_STOCK_EXISTSStock already exists at one of the selected locations.
-
400INVENTORY_GROUP_STOCK_MAX_LOCATIONSThe bulk stock batch exceeds the contract maximum.
-
400STOCK_LEVEL_EXPECTED_QUANTITY_INVALIDAn expected quantity is negative.
-
400STOCK_LEVEL_EXPECTED_QUANTITY_SET_ONLYExpected quantities were sent with an action other than set_quantity.
-
409STOCK_LEVEL_EXPECTED_QUANTITY_MISMATCHThe current on-hand quantity differs from the expected quantity; nothing changed.
-
400STOCK_WRITE_IDEMPOTENCY_KEY_TOO_LONGIdempotency-Key exceeds 200 characters.
-
409STOCK_WRITE_IDEMPOTENCY_CONFLICTThe idempotency key was already used for a different stock write.
-
409LOCATION_ARCHIVED_NO_EDITThe write would change stock at an archived location.
List inventory group movements
List stock movement history for one inventory group.
Returns the movement ledger used to reconcile inventory_levels/update webhook delivery. Rows are retained for the service retention window returned by the endpoint. Order-backed reference_type and reference_id are included only when the token also has read_orders.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number. |
limit
|
integer |
Page size. |
search
|
string |
Search movement notes or location names. |
location_id
|
uuid |
Filter movements to one location. |
reason
|
string |
Filter by movement reason. |
from_date
|
string |
Inclusive start date in the store timezone, YYYY-MM-DD. Cannot be in the future. |
to_date
|
string |
Inclusive end date in the store timezone, YYYY-MM-DD. Cannot be in the future or before from_date. |
sort_by
|
string |
Sort by
Allowed values
namequantitycreated_at |
sort_direction
|
string |
Sort direction.
Allowed values
ascdesc |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_PAGEPage must be at least 1.
-
400VALIDATION_LIST_INVALID_LIMITLimit is outside the inventory group contract.
-
400VALIDATION_LIST_INVALID_SORT_BYSort field is not allowed for this endpoint.
-
400VALIDATION_LIST_INVALID_SORT_DIRECTIONSort direction must be asc or desc.
-
400VALIDATION_SEARCH_TOO_LONGSearch exceeds the inventory group search limit.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
400INVENTORY_GROUP_REASON_INVALIDMovement reason is not allowed.
-
400INVENTORY_FROM_DATE_INVALIDFrom date must use YYYY-MM-DD and cannot be in the future.
-
400INVENTORY_TO_DATE_INVALIDTo date must use YYYY-MM-DD and cannot be in the future.
-
400INVENTORY_DATE_RANGE_INVALIDFrom date is after to date.
List current inventory group commitments
List open order-inventory commitments for one inventory group.
Returns open, successfully applied reservation slices at locations visible to the token, newest first. Each row is stock held for one order line at one location: state provisional while the shopper is paying (it counts in checkout_held until expires_at) or committed once the order is placed and paid or confirmed (it counts in order_committed). state is the authoritative applied state, not a pending desired state. Released and fulfilled stock is not listed; read commitment activity for that history. While an order's stock change is still being applied its rows are left out, so the rows add up to a location's checkout_held and order_committed once it applies. source_type (product, variant or group), source_id and sku name the item. Pages are keyed: pass the response's next_cursor as cursor to read the next page with the same filters; an empty next_cursor means there are no more rows. Order ids, item ids, and order numbers are included only when the token also has read_orders; internal transition status, errors, and operation ids are never exposed through the Store API. App tokens see merchant-managed locations and their own app-managed locations, never another app's locations.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Query parameters
| Name | Type | Description |
|---|---|---|
cursor
|
string |
Opaque |
limit
|
integer |
Page size, 1 to 100. Defaults to 50. |
location_id
|
uuid |
Filter commitments to one visible location. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_LIMITLimit must be between 1 and 100.
-
400INVALID_INPUTA filter is invalid: the error names
cursororlocation_id.
List inventory group commitment activity
List applied order-inventory commitment activity for one inventory group.
Returns the append-only lifecycle ledger for successfully applied provisional holds, commitments, releases, reacquisitions, fulfillment consumption, and cancelled fulfillments, newest first. Filter dates resolve in the store timezone. event_type is provisional_held (a checkout hold started), committed (units committed to a placed order), released (held units became available again), reacquired (released units were held again), fulfilled (units left stock with a fulfillment) or fulfillment_reversed (a cancelled fulfillment put its units back). reason says why: order_created (an order was placed or an edit added units), payment_captured (the payment completed; with reacquired, a late payment held the same units again after its hold had been released), payment_retry (the shopper retried a payment), payment_failed or provider_init_failed (the payment failed or could not be started), checkout_hold_expired (the checkout hold duration ran out), order_released (the order was cancelled or removed), order_edited (an order edit or refund removed units), order_edit_abandoned (an unsaved order edit was discarded), order_create_failed (an order that could not be completed returned units sold on commit), order_fulfilled (units shipped), sold_without_shipping (items that don't need shipping left stock when the order was committed) or fulfillment_cancelled (a fulfillment was cancelled). reserved_after, checkout_held_after and order_committed_after are the location's numbers right after the event. source_type, source_id and sku name the item. Pages are keyed: pass the response's next_cursor as cursor to read the next page with the same filters; an empty next_cursor means there are no more rows. This is separate from physical stock movement history. Order ids, item ids, and order numbers are included only when the token also has read_orders; internal pending-operation and error details are never exposed through the Store API. App tokens see merchant-managed locations and their own app-managed locations, never another app's locations.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Query parameters
| Name | Type | Description |
|---|---|---|
cursor
|
string |
Opaque |
limit
|
integer |
Page size, 1 to 100. Defaults to 50. |
location_id
|
uuid |
Filter activity to one visible location. |
event_type
|
string |
Filter by |
from_date
|
string |
Inclusive start date, YYYY-MM-DD in the store timezone. |
to_date
|
string |
Inclusive end date, YYYY-MM-DD in the store timezone. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_LIMITLimit must be between 1 and 100.
-
400INVALID_INPUTA filter is invalid: the error names
cursor,location_id,event_type,from_dateorto_date.
List inventory group stock
List inventory at each visible location for one inventory group.
Returns every active location visible to the token, plus inactive locations that retain stored stock. Locations without a persisted level are returned with zero quantity and reservations; there is no separate assignment step. quantity is physical on hand. reserved is all held stock, the sum of checkout_held (units shoppers are paying for right now; the hold is released if payment doesn't complete in time), order_committed (units promised to placed orders that haven't shipped yet) and other_held (units set aside for stock transfers between locations). available = quantity - reserved. App tokens see merchant-managed locations and their own app-managed locations, never another app's locations. Ownership fields let clients render non-writable app-managed rows correctly.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number. |
limit
|
integer |
Page size. |
search
|
string |
Search stock rows by location name. |
sort_by
|
string |
Sort by
Allowed values
namequantitycreated_at |
sort_direction
|
string |
Sort direction.
Allowed values
ascdesc |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_PAGEPage must be at least 1.
-
400VALIDATION_LIST_INVALID_LIMITLimit is outside the inventory group contract.
-
400VALIDATION_LIST_INVALID_SORT_BYSort field is not allowed for this endpoint.
-
400VALIDATION_LIST_INVALID_SORT_DIRECTIONSort direction must be asc or desc.
-
400VALIDATION_SEARCH_TOO_LONGSearch exceeds the inventory group search limit.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
Initialize inventory group inventory at locations
Create initial stored stock levels at multiple locations.
Initializes locations that do not yet have persisted group stock. This endpoint is an optional batch-create convenience, not an assignment prerequisite; GET .../stock already returns visible missing levels as zero, and normal set/adjust/threshold writes create them automatically. A location with persisted state cannot be initialized again. App tokens may target merchant-managed locations and locations owned by their own active installation, never another app's location. The batch validates every target and commits atomically. Send a stable Idempotency-Key when retrying.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Idempotency-Key
|
string |
Optional on the first attempt and required for a safe retry. Scoped to the calling app or merchant actor, at most 200 characters. An identical replay within 7 days returns the original result without a second stock write, audit entry or webhook; reuse with different input returns 409 |
Body parameters
| Name | Type | Description |
|---|---|---|
stock
required
|
array<object> |
Stock rows to create. Each row needs location_id and quantity; low_stock_threshold is optional. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest JSON could not be parsed.
-
400INVENTORY_GROUP_LOCATION_REQUIREDLocation is required.
-
400INVENTORY_GROUP_LOCATIONS_REQUIREDAt least one location is required.
-
400INVENTORY_GROUP_LOCATIONS_NOT_FOUNDOne or more locations do not exist in this store.
-
400INVENTORY_GROUP_LOCATION_DUPLICATEThe same location appears more than once.
-
400INVENTORY_GROUP_QUANTITY_NEGATIVEQuantity cannot be negative.
-
400INVENTORY_GROUP_QUANTITY_TOO_LARGEQuantity exceeds the contract maximum.
-
400INVENTORY_GROUP_QUANTITY_BELOW_RESERVEDQuantity cannot be set below reserved stock.
-
400INVENTORY_GROUP_ADJUST_NEGATIVEAdjustment would make quantity negative.
-
400INVENTORY_GROUP_ADJUST_BELOW_RESERVEDAdjustment would make quantity lower than reserved stock.
-
400INVENTORY_GROUP_ADJUST_TOO_LARGEAdjustment would exceed the contract maximum.
-
400INVENTORY_GROUP_THRESHOLD_NEGATIVELow-stock threshold cannot be negative.
-
400INVENTORY_GROUP_THRESHOLD_TOO_LARGELow-stock threshold exceeds the contract maximum.
-
400INVENTORY_GROUP_THRESHOLD_REQUIREDSet-threshold was sent without low_stock_threshold. Send null to clear it.
-
400INVENTORY_GROUP_REASON_REQUIREDMovement reason is required.
-
400INVENTORY_GROUP_REASON_INVALIDMovement reason is not allowed.
-
400INVENTORY_GROUP_NOTES_TOO_LONGMovement notes exceed the contract max length.
-
400INVENTORY_GROUP_NOTES_INVALID_CHARSMovement notes contain invalid characters.
-
403LOCATION_APP_MANAGED_NO_EDITThe location belongs to another app or its owning installation is inactive.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
404INVENTORY_GROUP_STOCK_NOT_FOUNDNo stock row exists for the requested location.
-
409INVENTORY_GROUP_STOCK_EXISTSStock already exists at one of the selected locations.
-
400INVENTORY_GROUP_STOCK_MAX_LOCATIONSThe bulk stock batch exceeds the contract maximum.
-
400STOCK_LEVEL_EXPECTED_QUANTITY_INVALIDAn expected quantity is negative.
-
400STOCK_LEVEL_EXPECTED_QUANTITY_SET_ONLYExpected quantities were sent with an action other than set_quantity.
-
409STOCK_LEVEL_EXPECTED_QUANTITY_MISMATCHThe current on-hand quantity differs from the expected quantity; nothing changed.
-
400STOCK_WRITE_IDEMPOTENCY_KEY_TOO_LONGIdempotency-Key exceeds 200 characters.
-
409STOCK_WRITE_IDEMPOTENCY_CONFLICTThe idempotency key was already used for a different stock write.
-
409LOCATION_ARCHIVED_NO_EDITThe write would change stock at an archived location.
Bulk manage inventory group inventory
Apply one inventory action to selected locations.
Atomically applies set_quantity, adjust_quantity, or set_threshold to every selected location and creates missing zero levels on first write. Every location is validated with the same ownership rules as a single write; a duplicate, invisible location, another app's managed location, inactive owning installation, limit violation, or below-reserved result aborts the entire request. Quantity actions require a reason. With set_quantity, expected_quantities maps location ids to the on-hand quantity you counted against; any mismatch refuses the whole request with 409 STOCK_LEVEL_EXPECTED_QUANTITY_MISMATCH. Use clear_threshold: true to clear thresholds. Send a stable Idempotency-Key when retrying.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Idempotency-Key
|
string |
Optional on the first attempt and required for a safe retry. Scoped to the calling app or merchant actor, at most 200 characters. An identical replay within 7 days returns the original result without a second stock write, audit entry or webhook; reuse with different input returns 409 |
Body parameters
| Name | Type | Description |
|---|---|---|
location_ids
required
|
array<string> |
Selected location ids. Duplicates are rejected. |
action
required
|
string |
One of set_quantity, adjust_quantity, or set_threshold. |
quantity
|
integer |
Absolute quantity used by set_quantity. |
expected_quantities
|
object |
Optional with set_quantity: location id → on-hand quantity you counted against. A mismatch at any location returns 409 and changes nothing. |
adjustment
|
integer |
Signed delta used by adjust_quantity. |
low_stock_threshold
|
integer |
Threshold used by set_threshold; 0 is valid. |
clear_threshold
|
boolean |
Set true with set_threshold to clear selected thresholds. |
reason
|
string |
Required movement reason for quantity actions. |
notes
|
string |
Optional movement note for quantity actions. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest JSON could not be parsed.
-
400INVENTORY_GROUP_LOCATION_REQUIREDLocation is required.
-
400INVENTORY_GROUP_LOCATIONS_REQUIREDAt least one location is required.
-
400INVENTORY_GROUP_LOCATIONS_NOT_FOUNDOne or more locations do not exist in this store.
-
400INVENTORY_GROUP_LOCATION_DUPLICATEThe same location appears more than once.
-
400INVENTORY_GROUP_QUANTITY_NEGATIVEQuantity cannot be negative.
-
400INVENTORY_GROUP_QUANTITY_TOO_LARGEQuantity exceeds the contract maximum.
-
400INVENTORY_GROUP_QUANTITY_BELOW_RESERVEDQuantity cannot be set below reserved stock.
-
400INVENTORY_GROUP_ADJUST_NEGATIVEAdjustment would make quantity negative.
-
400INVENTORY_GROUP_ADJUST_BELOW_RESERVEDAdjustment would make quantity lower than reserved stock.
-
400INVENTORY_GROUP_ADJUST_TOO_LARGEAdjustment would exceed the contract maximum.
-
400INVENTORY_GROUP_THRESHOLD_NEGATIVELow-stock threshold cannot be negative.
-
400INVENTORY_GROUP_THRESHOLD_TOO_LARGELow-stock threshold exceeds the contract maximum.
-
400INVENTORY_GROUP_THRESHOLD_REQUIREDSet-threshold was sent without low_stock_threshold. Send null to clear it.
-
400INVENTORY_GROUP_REASON_REQUIREDMovement reason is required.
-
400INVENTORY_GROUP_REASON_INVALIDMovement reason is not allowed.
-
400INVENTORY_GROUP_NOTES_TOO_LONGMovement notes exceed the contract max length.
-
400INVENTORY_GROUP_NOTES_INVALID_CHARSMovement notes contain invalid characters.
-
403LOCATION_APP_MANAGED_NO_EDITThe location belongs to another app or its owning installation is inactive.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
404INVENTORY_GROUP_STOCK_NOT_FOUNDNo stock row exists for the requested location.
-
409INVENTORY_GROUP_STOCK_EXISTSStock already exists at one of the selected locations.
-
400INVENTORY_GROUP_STOCK_MAX_LOCATIONSThe bulk stock batch exceeds the contract maximum.
-
400STOCK_LEVEL_EXPECTED_QUANTITY_INVALIDAn expected quantity is negative.
-
400STOCK_LEVEL_EXPECTED_QUANTITY_SET_ONLYExpected quantities were sent with an action other than set_quantity.
-
409STOCK_LEVEL_EXPECTED_QUANTITY_MISMATCHThe current on-hand quantity differs from the expected quantity; nothing changed.
-
400STOCK_WRITE_IDEMPOTENCY_KEY_TOO_LONGIdempotency-Key exceeds 200 characters.
-
409STOCK_WRITE_IDEMPOTENCY_CONFLICTThe idempotency key was already used for a different stock write.
-
409LOCATION_ARCHIVED_NO_EDITThe write would change stock at an archived location.
Clear stored inventory group inventory state
Clear an empty persisted stock level at one location.
Deletes only the empty storage row and its threshold; it does not remove the location from the group's inventory view. A subsequent stock read still returns that visible location with zero quantity, and the next write recreates the level. Quantity and reservations must both be zero. App-managed locations are writable only by their owning active installation; merchants and other apps cannot clear their state.
Path parameters
| Name | Type | Description |
|---|---|---|
groupId
required
|
uuid |
Inventory Group id. |
locationId
required
|
uuid |
Location id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
403LOCATION_APP_MANAGED_NO_EDITThe location belongs to another app or its owning installation is inactive.
-
404INVENTORY_GROUP_NOT_FOUNDInventory Group does not exist in this store.
-
404INVENTORY_GROUP_STOCK_NOT_FOUNDNo stock row exists for the requested location.
-
409INVENTORY_GROUP_STOCK_HAS_QUANTITYStock location still has quantity or reservations.
Fields#
Field |
Type |
Create |
Update |
Required |
Translatable |
|---|---|---|---|---|---|
|
text |
Yes |
Yes |
create |
No |
|
slug |
Yes |
Yes |
No |
|
|
text |
Yes |
Yes |
create |
No |
|
textarea |
Yes |
Yes |
No |
|
|
integer |
Yes |
Yes |
No |
|
|
integer |
No |
No |
No |
|
|
integer |
No |
No |
No |
|
|
integer |
No |
No |
No |
|
|
integer |
No |
No |
No |
|
|
integer |
No |
No |
No |
|
|
integer |
No |
No |
No |
|
|
boolean |
No |
No |
No |
|
|
integer |
No |
No |
No |
|
|
integer |
No |
No |
No |
|
|
integer |
No |
No |
No |
|
|
datetime |
No |
No |
No |
|
|
datetime |
No |
No |
No |
Webhook events#
Subscribe to these events to keep your integration in sync with inventory groups. Each event shows the required Store API scope and store permission, the available payload fields, and an example payload. Subscription setup is validated against those permissions; delivery is always restricted to the subscription's store.
Inventory group created
Fired when an inventory group is created.
Payload fields
| Field | Type | Description |
|---|---|---|
resource_type |
string |
Always present |
resource_id |
string |
Always present |
occurred_at |
string |
Always present |
previous.id |
string |
Always present |
previous.name |
string |
Selectable in the Payload builder |
previous.slug |
string |
Selectable in the Payload builder |
previous.sku |
string |
Selectable in the Payload builder |
previous.description |
string |
Selectable in the Payload builder |
previous.quantity |
integer |
Selectable in the Payload builder |
previous.reserved |
integer |
Selectable in the Payload builder |
previous.checkout_held |
integer |
Selectable in the Payload builder |
previous.order_committed |
integer |
Selectable in the Payload builder |
previous.other_held |
integer |
Selectable in the Payload builder |
previous.low_stock_threshold |
integer |
Selectable in the Payload builder |
previous.overall_low_stock_threshold |
integer |
Selectable in the Payload builder |
current.id |
string |
Always present |
current.name |
string |
Selectable in the Payload builder |
current.slug |
string |
Selectable in the Payload builder |
current.sku |
string |
Selectable in the Payload builder |
current.description |
string |
Selectable in the Payload builder |
current.quantity |
integer |
Selectable in the Payload builder |
current.reserved |
integer |
Selectable in the Payload builder |
current.checkout_held |
integer |
Selectable in the Payload builder |
current.order_committed |
integer |
Selectable in the Payload builder |
current.other_held |
integer |
Selectable in the Payload builder |
current.low_stock_threshold |
integer |
Selectable in the Payload builder |
current.overall_low_stock_threshold |
integer |
Selectable in the Payload builder |
changed_fields |
array |
Selectable in the Payload builder |
Inventory group updated
Fired when an inventory group's fields change, including the group-wide low-stock threshold that follows a per-location threshold change. Stock quantity changes fire the stock level event, not this one.
Payload fields
| Field | Type | Description |
|---|---|---|
resource_type |
string |
Always present |
resource_id |
string |
Always present |
occurred_at |
string |
Always present |
previous.id |
string |
Always present |
previous.name |
string |
Selectable in the Payload builder |
previous.slug |
string |
Selectable in the Payload builder |
previous.sku |
string |
Selectable in the Payload builder |
previous.description |
string |
Selectable in the Payload builder |
previous.quantity |
integer |
Selectable in the Payload builder |
previous.reserved |
integer |
Selectable in the Payload builder |
previous.checkout_held |
integer |
Selectable in the Payload builder |
previous.order_committed |
integer |
Selectable in the Payload builder |
previous.other_held |
integer |
Selectable in the Payload builder |
previous.low_stock_threshold |
integer |
Selectable in the Payload builder |
previous.overall_low_stock_threshold |
integer |
Selectable in the Payload builder |
current.id |
string |
Always present |
current.name |
string |
Selectable in the Payload builder |
current.slug |
string |
Selectable in the Payload builder |
current.sku |
string |
Selectable in the Payload builder |
current.description |
string |
Selectable in the Payload builder |
current.quantity |
integer |
Selectable in the Payload builder |
current.reserved |
integer |
Selectable in the Payload builder |
current.checkout_held |
integer |
Selectable in the Payload builder |
current.order_committed |
integer |
Selectable in the Payload builder |
current.other_held |
integer |
Selectable in the Payload builder |
current.low_stock_threshold |
integer |
Selectable in the Payload builder |
current.overall_low_stock_threshold |
integer |
Selectable in the Payload builder |
changed_fields |
array |
Selectable in the Payload builder |
Inventory group deleted
Fired when an inventory group is deleted.
Payload fields
| Field | Type | Description |
|---|---|---|
resource_type |
string |
Always present |
resource_id |
string |
Always present |
occurred_at |
string |
Always present |
previous.id |
string |
Always present |
previous.name |
string |
Selectable in the Payload builder |
previous.slug |
string |
Selectable in the Payload builder |
previous.sku |
string |
Selectable in the Payload builder |
previous.description |
string |
Selectable in the Payload builder |
previous.quantity |
integer |
Selectable in the Payload builder |
previous.reserved |
integer |
Selectable in the Payload builder |
previous.checkout_held |
integer |
Selectable in the Payload builder |
previous.order_committed |
integer |
Selectable in the Payload builder |
previous.other_held |
integer |
Selectable in the Payload builder |
previous.low_stock_threshold |
integer |
Selectable in the Payload builder |
previous.overall_low_stock_threshold |
integer |
Selectable in the Payload builder |
current.id |
string |
Always present |
current.name |
string |
Selectable in the Payload builder |
current.slug |
string |
Selectable in the Payload builder |
current.sku |
string |
Selectable in the Payload builder |
current.description |
string |
Selectable in the Payload builder |
current.quantity |
integer |
Selectable in the Payload builder |
current.reserved |
integer |
Selectable in the Payload builder |
current.checkout_held |
integer |
Selectable in the Payload builder |
current.order_committed |
integer |
Selectable in the Payload builder |
current.other_held |
integer |
Selectable in the Payload builder |
current.low_stock_threshold |
integer |
Selectable in the Payload builder |
current.overall_low_stock_threshold |
integer |
Selectable in the Payload builder |
changed_fields |
array |
Selectable in the Payload builder |