Items
Items
Before you create items, you'll want to set up locations and layouts in your dashboard so that you'll be able to add inventory levels for the item.
Your inventory for items is tracked in a property called levels, which will give you information about the location and optionally the layout the item is in.
Create Item
The only property you need to create an item is name, by which this item will be searchable. However, we recommend adding a few more properties:
Example
Update Item
You can update an item by using its ID. All properties available at create time (name, sku, gtin, description, dimensions, metadata, is_asset, etc.) can also be updated via this endpoint.
When updating inventory, you increment and decrement quantities by passing in positive and negative integers.
You can reset a value by passing the integer inside of an array as shown in the example below. It's not recommended to reset values, since incrementing and decrementing will get you the same result, but this is an escape hatch if you need it and thus the ergonomics of an array prevent accidental usage of an otherwise potentially dangerous feature.
Lastly, you can optionally provide a layout value to be more specific about the item's exact whereabouts in that location. If the item already has a layout associated with it, it will keep adding to that layout unless you explicitly tell it not to. The best rule of thumb is either use layouts for everything, or don't use them at all.
Example
Retrieve Item
Get a single item using its id.
Location Based Retrieval
Get a single item with inventory from a given location only. For example, to see the inventory levels of an item with id item_czhgjrk5JaVvyATPDbyURp at the location loc_hj7gjrk5JaVvyATPDbyURp
Delete Item
You can delete an item by using its ID, SKU, GTIN, or UPC. Deleted items are soft-deleted — they are marked as deleted but can be restored later. Any assets linked to the item will be archived automatically.
Deleted items will no longer appear in list or retrieve responses. Shipments, manifests, or fulfillments that are completed will not be impacted.
Confirmation required for items with assets: If the item has active (non-archived) assets, you must confirm the deletion by passing the item's
nameinconfirm_nameor itsskuinconfirm_skuin the request body. Without this, the API will return a400error indicating how many active assets exist.
Example
Delete with Confirmation
Restore Item
You can restore a previously deleted item by using its ID, SKU, GTIN, or UPC. The item will be returned to its original state. Any assets that were archived during deletion will be unarchived.
Restoration will fail if an active item already exists with the same SKU, GTIN, or UPC.
Note: If you create a new item with the same SKU, GTIN, or UPC as a previously deleted item, the deleted item will be automatically restored and updated with the new data instead of creating a duplicate.
Example
Inventory Levels
Inventory levels track the quantity of an item at a specific location and optionally a layout within that location.
List Inventory Levels
List all inventory levels for a given item. Requires the items:read scope.
Path Parameters
Response Fields
Each level object in the data array contains:
Example
Retrieve Inventory Level
Retrieve a specific inventory level by its ID. Requires the items:read scope.
Path Parameters
Example
Create Inventory Levels
Create or update inventory levels for an item. The request body must be an array of level objects. Quantities are incremented or decremented by passing positive or negative integers. To reset a quantity to an exact value, pass the integer inside an array (e.g., [100]). Requires the items:write scope. Returns 201 on success.
Path Parameters
Body Parameters (array of objects)
Example
Update Inventory Level
Update a specific inventory level. The level ID from the URL is injected into the request body. This endpoint uses the same controller as the create endpoint, so all the same quantity fields and reset-via-array behavior apply. Requires the items:write scope.
Path Parameters
Body Parameters
Example
Delete Inventory Level
Delete an inventory level. The level can only be deleted if all its quantities (available_qty, defective_qty, reserved_qty, manifested_qty) are zero. If any quantity is greater than zero, the request will fail with a 400 error. Requires the items:write scope.
Path Parameters
Example
Images
Manage images for an item. Images can be provided as URLs or base64-encoded strings.
Add/Manage Item Images
Add, remove, or set images for an item. Requires the items:write scope. You can pass images in several formats:
- Array of URLs/base64 strings -- adds the images to the item
- Object with
add,remove,setarrays -- granular control over images
The images, image_urls, and image_url fields are all accepted (in that priority order).
Path Parameters
Body Parameters
Example: Add images
Example: Add and remove images
Delete Item Image
Delete a specific image from an item by its image ID. This internally calls the item update controller with the image marked for removal. Requires the items:write scope.
Path Parameters
Example
Transactional Units
Transactional units define alternative units of measure for an item beyond its base unit. For example, an item measured in "pieces" might also have a "box" unit with a conversion factor of 12 (1 box = 12 pieces). Each item can have up to 50 transactional units. The base unit is created automatically and cannot be modified or deleted via these endpoints.
List Transactional Units
List all transactional units for an item, including the base unit. Requires the items:read scope. Supports pagination.
Path Parameters
Query Parameters
Response Fields
Each transactional unit object in the data array contains:
Example
Write Transactional Units
Create or update transactional units for an item. Units are matched by id first, then by name (case-insensitive). If a match is found, the unit is updated; otherwise, a new unit is created. Requires the items:write scope.
Constraints:
- Unit names must be unique within the payload
- Cannot modify or target the base transactional unit
- Cannot use a name that conflicts with the base unit name
- Maximum of 50 total transactional units per item
Path Parameters
Body Parameters
Example
Delete Transactional Unit
Delete a specific transactional unit. The base transactional unit cannot be deleted. Requires the items:write scope.
Path Parameters
Example
Assets
Assets are individual, trackable instances of an item. Each asset gets a unique serial number and can be tracked at a specific location and layout. Assets require the item to have is_asset set to true.
Create Asset
Create a new asset under an item. The item_id is automatically set from the URL path. Requires the assets:write scope.
If no serial_number or sequence_id is provided, a serial number is generated automatically. If a sequence_id is provided, the serial number is derived from that sequence.
Path Parameters
Body Parameters
Example
Update Asset
Update an existing asset under an item. The item_id is set from the URL path. Requires the assets:write scope. All body parameters from the create endpoint are also accepted here for updating.