Skip to content

ListWarehouses returns the warehouses bound to the caller's integration, and the identifier to use for each.

You call thisinventory:self

GET
/v2/inventory/warehouses
curl --request GET \
--url https://api.zentail.com/v2/inventory/warehouses \
--header 'Authorization: Bearer <token>'

This is the discovery call. Every write keys on warehouse_unique_id, which is the caller’s own identifier rather than Zentail’s internal id, so without this a client would have to be told its identifiers out of band and would silently break when they changed. Call it once at startup.

Distinct from IntegrationStatus, which is prose for a human deciding whether the integration is healthy. This is structured data for a machine deciding what to send.

A successful response.

Media typeapplication/json
object
warehouses

Only warehouses the caller can actually name. A warehouse bound to the integration with no identifier set is omitted, because there is no value a caller could send to address it; IntegrationStatus is where that shows up as a problem to fix.

Array<object>
object
warehouseUniqueId

Send this as warehouse_unique_id on an InventoryUpdate. Never empty.

string
name

Operator-facing label, for logs and support conversations. Not a key, not stable, and not safe to match on.

string
Examplegenerated
{
"warehouses": [
{
"warehouseUniqueId": "example",
"name": "example"
}
]
}

An unexpected error response.

Media typeapplication/json
object
code
integer format: int32
message
string
details
Array<object>
object
@type
string
key
additional properties
Examplegenerated
{
"code": 1,
"message": "example",
"details": [
{
"@type": "example"
}
]
}

Sourceinventory-api-proto@3d411202 via [email protected]

Built0c509dd3

This page describes the source document as deployed: the version inventory pinned in its release r2026.09.24.01. A change merged upstream shows up here once it has deployed and the pins are next refreshed.

API changelog