| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v202206/inventory/products | Retrieve product inventory list |
| GET | /api/v202206/inventory/cartons | Retrieve carton inventory list |
| GET | /api/v202206/inventory/pallets | Retrieve pallet inventory list |
| GET | /api/v202105/inventories | Retrieves a list of inventory |
| GET | /api/v202608/lot-inventories | Retrieve real-time lot inventory |
| GET | /api/v202608/inventory-snapshots | Retrieve SKU-level inventory snapshot (by date) |
| GET | /api/v202608/lot-inventory-snapshots | Retrieve Lot-level inventory snapshot (by date) |
[NEW] v202608 Patch (2026-09): Existing GET /api/v202206/inventory/productsparams now support a newconditionfilter (already merged into the params table below).New GET /api/v202608/lot-inventories: real-time lot inventory queryNew GET /api/v202608/inventory-snapshots: SKU-level historical snapshotNew GET /api/v202608/lot-inventory-snapshots: Lot-level historical snapshotThe 3 new endpoints are read-only — for real-time lot inventory query + historical reconciliation replay.
| Key | Value |
|---|---|
| Authorization | Bearer eyJ0eXAiOiJKV1QiLCJhbGciOi ... |
| Type | Name | Description | Required/Optional | Schema |
|---|---|---|---|---|
| query | api | The API type Available Values: index.by-default | required | enum |
| query | customer_sku | The customer SKU | optional | string |
| query | warehouse_id | The warehouse ID | optional | integer |
| query | condition | Filter by inventory state Available Values: New, Open Box, Used, Customized, Parts, Damaged | optional | enum |
| query | next_token | The next page data | optional | string |
| Key | Value |
|---|---|
| errcode | 0/4000 |
| errmsg | ok/Error Info |
| data | Data Properties |
| Name | Description | Schema |
|---|---|---|
| product_id | The shipsage product id | integer |
| sku | The shipsage sku | integer |
| customer_sku | The customer sku | string |
| bundled | Whether to bundle the product, if the value is 1 then 'qty_bundle_available' is required Available Values: 0: basic, 1: Bundle | enum |
| warehouse_id | The warehouse id | integer |
| warehouse_name | The destination warehouse | string |
| condition | The state of the inventory, whether it is new, used, or damaged, etc. The same SKU may have multiple conditions in the same warehouse. When multiple conditions have inventory, they will be displayed in separate rows. Available Values: New, Open Box,Used,Customized,Parts,Damaged | enum |
| qty_allocated | Allocated or occupied qty | integer |
| qty_hold | Quantity waiting for put on the shelves | integer |
| qty_bundle_available | Bundle available qty, Whether or not there is a value depends on whether the value of 'bundled' is 1 | integer |
| qty_on_hand | On hand qty | integer |
| qty_available | Available qty | integer |
| qty_receibing_area | qty in the receiving area (This field is deprecated) | integer |
| qty_frozen | Frozen qty | integer |
| qty_conditioned | The Conditioned qty (This field is deprecated) | integer |
| qty_in_transit | In Transit qty | integer |
[
{
"warehouse_id": 101,
"warehouse_name": "SG-SMF1",
"product_id": 136251,
"sku": 230924,
"customer_sku": "0905",
"bundled": 0,
"condition": "New",
"qty_on_hand": 23,
"qty_hold": 5,
"qty_frozen": 0,
"qty_allocated": 0,
"qty_receiving_area": 0,
"qty_in_transit": 0,
"qty_available": 18,
"qty_bundle_available": 0,
"qty_conditioned": 0
},
{
"warehouse_id": 101,
"warehouse_name": "SG-SMF1",
"product_id": 136251,
"sku": 230924,
"customer_sku": "0905",
"bundled": 0,
"condition": "Open Box",
"qty_on_hand": 1,
"qty_hold": 0,
"qty_frozen": 0,
"qty_allocated": 0,
"qty_receiving_area": 0,
"qty_in_transit": 0,
"qty_available": 1,
"qty_bundle_available": 0,
"qty_conditioned": 0
}
]| Type | Name | Description | Required/Optional | Schema |
|---|---|---|---|---|
| query | api | The API type Available Values: index.by-default | required | enum |
| query | barcode | The carton barcode | optional | string |
| query | warehouse_id | The warehouse ID | optional | integer |
| query | next_token | The next page data | optional | string |
| Key | Value |
|---|---|
| errcode | 0/4000 |
| errmsg | ok/Error Info |
| data | Data Properties |
| Name | Description | Schema |
|---|---|---|
| barcode | The carton barcode | integer |
| asn_id | The ASN ID | integer |
| content | The real thing in the carton | string |
| warehouse_id | The warehouse id | integer |
| warehouse_name | The destination warehouse | string |
| qty_allocated | Allocated or occupied qty | integer |
| qty_hold | Holding qty (not used yet) | integer |
| qty_on_hand | On hand qty | integer |
| qty_available | Available qty | integer |
| qty_receibing_area | Qty in the receiving area | integer |
| qty_frozen | Frozen qty | integer |
| created_at | The Inventory create time timezone:PST | datetime |
| updated_at | The Inventory update time timezone:PST | datetime |
[
{
"warehouse_id": 101,
"warehouse_name": "Tracy",
"asn_id": "18505",
"barcode": "XS000000187204",
"qty_on_hand": 1,
"qty_allocated": 1,
"qty_hold": 0,
"qty_frozen": 0,
"qty_available": 1,
"qty_receiving_area": 0,
"content": "PL-WF002-01A-VC*18",
"created_at": "2022-06-29 10:44:10",
"updated_at": "2022-07-08 01:47:06"
},
{
"warehouse_id": 101,
"warehouse_name": "Tracy",
"asn_id": "18505",
"barcode": "XS000000187205",
"qty_on_hand": 0,
"qty_allocated": 0,
"qty_hold": 0,
"qty_frozen": 0,
"qty_available": 0,
"qty_receiving_area": 0,
"content": "PL-WF002-01A-VC*18",
"created_at": "2022-06-29 10:44:10",
"updated_at": "2022-06-29 10:44:10"
}
]| Type | Name | Description | Required/Optional | Schema |
|---|---|---|---|---|
| query | api | The API type Available Values: index.by-default | required | enum |
| query | barcode | The pallet barcode | optional | string |
| query | warehouse_id | The warehouse ID | optional | integer |
| query | next_token | The next page data | optional | string |
| Key | Value |
|---|---|
| errcode | 0/4000 |
| errmsg | ok/Error Info |
| data | Data Properties |
| Name | Description | Schema |
|---|---|---|
| barcode | The pallet barcode | integer |
| asn_id | The ASN ID | integer |
| content | The real thing in the pallet | string |
| warehouse_id | The warehouse id | integer |
| warehouse_name | The destination warehouse | string |
| qty_allocated | allocated or occupied qty | integer |
| qty_hold | Holding qty (not used yet) | integer |
| qty_on_hand | On hand qty | integer |
| qty_available | Available qty | integer |
| qty_receibing_area | qty in the receiving area | integer |
| qty_frozen | Frozen qty | integer |
| created_at | The Inventory create time timezone:PST | datetime |
| updated_at | The Inventory update time timezone:PST | datetime |
[
{
"warehouse_id": 101,
"warehouse_name": "Tracy",
"asn_id": "19926",
"barcode": "PL001211",
"qty_on_hand": 1,
"qty_allocated": 1,
"qty_hold": 0,
"qty_frozen": 0,
"qty_available": 1,
"qty_receiving_area": 0,
"content": "",
"created_at": "2022-07-08 12:24:18",
"updated_at": "2022-07-08 20:17:54"
},
{
"warehouse_id": 101,
"warehouse_name": "Tracy",
"asn_id": "19926",
"barcode": "PL001322",
"qty_on_hand": 1,
"qty_allocated": 0,
"qty_hold": 0,
"qty_frozen": 0,
"qty_available": 1,
"qty_receiving_area": 0,
"content": "",
"created_at": "2022-07-08 12:24:21",
"updated_at": "2022-07-08 12:24:58"
}
]| Type | Name | Description | Required/Optional | Schema |
|---|---|---|---|---|
| query | api | The API type Available Values: index.by-default | required | enum |
| query | customer_sku | The customer SKU | optional | string |
| query | next_token | The next page data | optional | string |
| Key | Value |
|---|---|
| errcode | 0/4000 |
| errmsg | ok/Error Info |
| data | Data Properties |
| Name | Description | Schema |
|---|---|---|
| product_id | The shipsage product id | integer |
| product_name | Product name | string |
| sku | The shipsage sku | integer |
| customer_sku | The customer sku | string |
| bundled | Whether to bundle the product, if the value is 1 then 'qty_bundle_available' is required Available Values: 0: basic, 1: Bundle | enum |
| qty_bundle_available | Bundle available qty, Whether or not there is a value depends on whether the value of 'bundled' is 1 | integer |
| qty_onhand | On hand qty | integer |
| qty_available | Available qty | integer |
| qty_pending | Pending qty | integer |
| qty_intransit | In Transit qty | integer |
| qty_conditioned | Conditioned qty | integer |
[
{
"product_id": 1,
"product_name": "NEW Electric Fuel Pump EP7123 FOR Dodge Duango, Ram 1500, Ram 2500 _Fuel Pump",
"sku": 100005,
"customer_sku": "100005",
"bundled": 0,
"qty_bundle_available": 0,
"qty_onhand": 100,
"qty_available": 90,
"qty_pending": 10,
"qty_intransit": 20
},
{
"product_id": 2,
"product_name": "New Electric Fuel Pump E8016S for Volvo Audi Nissan Ford Dodge BMW _Fuel Pump",
"sku": 100006,
"customer_sku": "100006",
"bundled": 1,
"qty_bundle_available": 50,
"qty_onhand": 0,
"qty_available": 0,
"qty_pending": 0,
"qty_intransit": 0
}
]| Type | Name | Description | Required/Optional | Data Type |
|---|---|---|---|---|
| query | api | API type Available values: index.by-default | Required | enum |
| query | warehouse_id | Warehouse id | Optional | integer |
| query | customer_sku | Customer SKU code (exact match) | Optional | string |
| query | sku | System SKU code (exact match) | Optional | integer |
| query | lot_id | ShipSage internal lot number | Optional | integer |
| query | condition | Inventory condition Available values: New, Open Box, Used, Customized, Parts, Damaged, Disposal, Stored, Unclaimed | Optional | enum |
| query | lot_rule | Product-level Lot rule Available values: fifo (first-in-first-out by receive date, physically segregated by location), fefo (first-expire-first-out by expiration date, physically segregated by location), none (SKU without lot management enabled) | Optional | string |
| query | receive_date_from | Receive date from | Optional | date |
| query | receive_date_to | Receive date to | Optional | date |
| query | expiration_date_from | Expiration date from | Optional | date |
| query | expiration_date_to | Expiration date to | Optional | date |
| query | aged_days_min | Aged days minimum | Optional | integer |
| query | aged_days_max | Aged days maximum | Optional | integer |
| query | updated_at_from | Updated time from (for incremental pulling) Timezone: Pacific Standard Time | Optional | datetime |
| query | updated_at_to | Updated time to Timezone: Pacific Standard Time | Optional | datetime |
| query | has_available_qty | Whether to return only rows with available qty > 0 (default 1) Available values: 0: all, 1: available only | Optional | enum |
| query | sort_by | Sort field (default receive_date)Available values: receive_date, expiration_date, aged_days | Optional | enum |
| query | sort_order | Sort direction (default asc)Available values: asc, desc | Optional | enum |
| query | next_token | Token for the next page | Optional | string |
GET /api/v202608/lot-inventories?api=index.by-default&warehouse_id=100&customer_sku=CUS-SKU-001&condition=New&lot_rule=fefo&expiration_date_from=2027-01-01&has_available_qty=1&sort_by=expiration_date&sort_order=asc| Key | Value |
|---|---|
| errcode | 0/4000 |
| errmsg | ok/Error Info |
| data | Data Properties |
| Name | Description | Data Type |
|---|---|---|
| lot_id | ShipSage internal lot number | integer |
| warehouse_id | Warehouse id | integer |
| warehouse_name | Warehouse name | string |
| condition | Inventory condition. Available values: New / Open Box / Used / Customized / Parts / Damaged / Disposal / Stored / Unclaimed | string |
| sku | System SKU code | integer |
| customer_sku | Customer SKU code | string |
| bundled | Whether it is a bundle product Available values: 0: No, 1: Yes | integer |
| lot_rule | Product-level Lot rule (fifo / fefo / null) | string |
| receive_date | Receive date | date |
| expiration_date | Expiration date | date |
| aged_date | Aged start date | date |
| aged_days | Aged days (from aged_date to today) | integer |
| qty_on_hand | Total on-hand quantity | integer |
| qty_allocated | Allocated quantity | integer |
| qty_hold | Quantity waiting to be put away | integer |
| qty_frozen | Frozen quantity | integer |
| qty_available | Available quantity | integer |
{
"errcode": 0,
"errmsg": "ok",
"data": {
"items": [
{
"lot_id": 5511,
"warehouse_id": 100,
"warehouse_name": "SG-MDW1",
"condition": "New",
"sku": 3001,
"customer_sku": "CUS-SKU-001",
"bundled": 0,
"lot_rule": "fefo",
"receive_date": "2026-06-15",
"expiration_date": "2027-06-15",
"aged_date": "2026-06-15",
"aged_days": 60,
"qty_on_hand": 500,
"qty_allocated": 120,
"qty_hold": 0,
"qty_frozen": 0,
"qty_available": 380
}
],
"next_token": null
}
}GET /api/v202206/inventory/products (except for snapshot-specific fields).snapshot_date is required. Historical snapshots are returned only when data exists for the requested date; an empty array is returned otherwise.| Type | Name | Description | Required/Optional | Data Type |
|---|---|---|---|---|
| query | api | API type Available values: index.by-default | Required | enum |
| query | snapshot_date | Snapshot date (YYYY-MM-DD format) | Required | date |
| query | warehouse_id | Warehouse id | Optional | integer |
| query | customer_sku | Customer SKU code (exact match) | Optional | string |
| query | condition | Inventory condition Available values: New, Open Box, Used, Customized, Parts, Damaged, Disposal, Stored, Unclaimed | Optional | enum |
| query | has_available_qty | Whether to return only rows with available qty > 0 (default 1) Available values: 0: all, 1: available only | Optional | enum |
| query | next_token | Token for the next page | Optional | string |
GET /api/v202608/inventory-snapshots?api=index.by-default&snapshot_date=2026-08-11&warehouse_id=100&customer_sku=CUS-SKU-001&condition=New&has_available_qty=1| Key | Value |
|---|---|
| errcode | 0/4000 |
| errmsg | ok/Error Info |
| data | Data Properties |
| Name | Description | Data Type |
|---|---|---|
| snapshot_date | The business date this snapshot corresponds to. Represents the inventory state as of the end of that day. For example, 2026-08-11 represents the inventory at the end of August 11, 2026. | date |
| snapshot_at | The actual time when the snapshot data was generated. The system automatically runs the snapshot task around midnight each day (between 23:50 on the snapshot_date and 00:10 on the following day), "freezing" the inventory state at the end of the day. So when snapshot_date = 2026-08-11, snapshot_at is typically between 2026-08-11 23:50 and 2026-08-12 00:10.Timezone: Pacific Standard Time | datetime |
| warehouse_id | Warehouse id | integer |
| warehouse_name | Warehouse name | string |
| condition | Inventory condition. Available values: New / Open Box / Used / Customized / Parts / Damaged / Disposal / Stored / Unclaimed | string |
| sku | System SKU code | integer |
| customer_sku | Customer SKU code | string |
| bundled | Whether it is a bundle product Available values: 0: No, 1: Yes | integer |
| qty_on_hand | Total on-hand quantity | integer |
| qty_hold | Quantity waiting to be put away | integer |
| qty_frozen | Frozen quantity | integer |
| qty_allocated | Allocated quantity | integer |
| qty_in_transit | In-transit quantity | integer |
| qty_available | Available quantity | integer |
{
"errcode": 0,
"errmsg": "ok",
"data": {
"items": [
{
"snapshot_date": "2026-08-11",
"snapshot_at": "2026-08-12 00:00:00",
"warehouse_id": 100,
"warehouse_name": "SG-MDW1",
"condition": "New",
"sku": 3001,
"customer_sku": "CUS-SKU-001",
"bundled": 0,
"qty_on_hand": 500,
"qty_hold": 5,
"qty_frozen": 0,
"qty_allocated": 120,
"qty_in_transit": 200,
"qty_available": 380
}
],
"next_token": null
}
}snapshot_date is required.| Type | Name | Description | Required/Optional | Data Type |
|---|---|---|---|---|
| query | api | API type Available values: index.by-default | Required | enum |
| query | snapshot_date | Snapshot date (YYYY-MM-DD format) | Required | date |
| query | warehouse_id | Warehouse id | Optional | integer |
| query | customer_sku | Customer SKU code | Optional | string |
| query | sku | System SKU code | Optional | integer |
| query | lot_id | ShipSage internal lot number | Optional | integer |
| query | condition | Inventory condition Available values: New, Open Box, Used, Customized, Parts, Damaged, Disposal, Stored, Unclaimed | Optional | enum |
| query | lot_rule | Product-level Lot rule Available values: fifo, fefo, none | Optional | enum |
| query | receive_date_from | Receive date from | Optional | date |
| query | receive_date_to | Receive date to | Optional | date |
| query | expiration_date_from | Expiration date from | Optional | date |
| query | expiration_date_to | Expiration date to | Optional | date |
| query | has_available_qty | Whether to return only rows with available qty > 0 (default 1) Available values: 0: all, 1: available only | Optional | enum |
| query | sort_by | Sort field (default receive_date)Available values: receive_date, expiration_date | Optional | enum |
| query | sort_order | Sort direction (default asc) | Optional | enum |
| query | next_token | Token for the next page | Optional | string |
GET /api/v202608/lot-inventory-snapshots?api=index.by-default&snapshot_date=2026-08-11&warehouse_id=100&customer_sku=CUS-SKU-001&condition=New&lot_rule=fefo&has_available_qty=1&sort_by=expiration_date| Key | Value |
|---|---|
| errcode | 0/4000 |
| errmsg | ok/Error Info |
| data | Data Properties |
| Name | Description | Data Type |
|---|---|---|
| snapshot_date | The business date this snapshot corresponds to. Represents the inventory state as of the end of that day. For example, 2026-08-11 represents the inventory at the end of August 11, 2026. | date |
| snapshot_at | Timestamp of the last recorded action for this lot within the snapshot business date (corresponds to MAX(action_date) in the warehouse history table on the snapshot day) — the moment this lot snapshot was captured. snapshot_date is the date portion of this value.Timezone: Pacific Standard Time | datetime |
| lot_id | ShipSage internal lot number | integer |
| warehouse_id | Warehouse id | integer |
| warehouse_name | Warehouse name | string |
| condition | Inventory condition. Available values: New / Open Box / Used / Customized / Parts / Damaged / Disposal / Stored / Unclaimed | string |
| sku | System SKU code | integer |
| customer_sku | Customer SKU code | string |
| bundled | Whether it is a bundle product (0/1) | integer |
| lot_rule | Product-level Lot rule (fifo / fefo / null) | string |
| receive_date | Receive date | date |
| expiration_date | Expiration date | date |
| aged_date | Aged start date | date |
| aged_days | Aged days (from aged_date to snapshot date) | integer |
| qty_on_hand | Total on-hand quantity | integer |
| qty_allocated | Allocated quantity | integer |
| qty_hold | Quantity waiting to be put away | integer |
| qty_frozen | Frozen quantity | integer |
| qty_available | Available quantity | integer |
{
"errcode": 0,
"errmsg": "ok",
"data": {
"items": [
{
"snapshot_date": "2026-08-11",
"snapshot_at": "2026-08-12 00:00:00",
"lot_id": 5511,
"warehouse_id": 100,
"warehouse_name": "SG-MDW1",
"condition": "New",
"sku": 3001,
"customer_sku": "CUS-SKU-001",
"bundled": 0,
"lot_rule": "fefo",
"receive_date": "2026-06-15",
"expiration_date": "2027-06-15",
"aged_date": "2026-06-15",
"aged_days": 57,
"qty_on_hand": 500,
"qty_allocated": 120,
"qty_hold": 0,
"qty_frozen": 0,
"qty_available": 380
}
],
"next_token": null
}
}