curl --request GET \
--url https://api.tassyir.io/apps/2026-10/inventory-levels \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tassyir.io/apps/2026-10/inventory-levels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"inventoryItemId": "<string>",
"variantId": "<string>",
"productId": "<string>",
"onHand": 0,
"inTransit": 0,
"damaged": 0,
"low": true,
"lowStockThreshold": 0,
"locations": [
{
"locationId": "<string>",
"onHand": 0,
"inTransit": 0,
"damaged": 0
}
],
"updatedAt": "2023-11-07T05:31:56Z",
"currency": "<string>",
"unitCost": "<string>"
}
],
"nextCursor": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 400,
"detail": "<string>",
"code": "INVALID_CURSOR",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 401,
"detail": "<string>",
"code": "APP_TOKEN_INVALID",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 403,
"detail": "<string>",
"code": "FORBIDDEN",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 422,
"detail": "<string>",
"code": "SUBSCRIPTION_REQUIRED",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 429,
"detail": "<string>",
"code": "BUSINESS_RATE_LIMITED",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 460,
"detail": "<string>",
"code": "STORE_SCOPE_FORBIDDEN",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 500,
"detail": "<string>",
"code": "INTERNAL_ERROR",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 503,
"detail": "<string>",
"code": "API_BUSY",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}List stock levels
One per tracked variant. unitCost only for a caller holding read_costs.
Needs the read_inventory scope (permission inventory:read).
curl --request GET \
--url https://api.tassyir.io/apps/2026-10/inventory-levels \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tassyir.io/apps/2026-10/inventory-levels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"inventoryItemId": "<string>",
"variantId": "<string>",
"productId": "<string>",
"onHand": 0,
"inTransit": 0,
"damaged": 0,
"low": true,
"lowStockThreshold": 0,
"locations": [
{
"locationId": "<string>",
"onHand": 0,
"inTransit": 0,
"damaged": 0
}
],
"updatedAt": "2023-11-07T05:31:56Z",
"currency": "<string>",
"unitCost": "<string>"
}
],
"nextCursor": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 400,
"detail": "<string>",
"code": "INVALID_CURSOR",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 401,
"detail": "<string>",
"code": "APP_TOKEN_INVALID",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 403,
"detail": "<string>",
"code": "FORBIDDEN",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 422,
"detail": "<string>",
"code": "SUBSCRIPTION_REQUIRED",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 429,
"detail": "<string>",
"code": "BUSINESS_RATE_LIMITED",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 460,
"detail": "<string>",
"code": "STORE_SCOPE_FORBIDDEN",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 500,
"detail": "<string>",
"code": "INTERNAL_ERROR",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 503,
"detail": "<string>",
"code": "API_BUSY",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}Authorizations
An app access token from POST /apps/oauth/token, valid 1 hour. An offline token acts as the app; an online token acts as the app on behalf of one dashboard user (the intersection of both permission sets).
Query Parameters
Only the stock items of this product (one per variant).
^\d{1,24}$Only this store's rows. A store outside the installation's stores is 460 STORE_SCOPE_FORBIDDEN.
^\d{1,24}$Return only these top-level fields, separated by commas; the id is always kept. The response schema describes the whole resource. An unknown name is 400 INVALID_FIELDS. Fields: inventoryItemId, variantId, productId, onHand, inTransit, damaged, low, lowStockThreshold, locations, updatedAt, currency, unitCost.
1000Page size, 1 to 100 (default 50). A value outside that range is 400, never clamped.
1 <= x <= 100The nextCursor of the previous page, unchanged, with the same filters. Opaque; bound to this list and its filters (400 INVALID_CURSOR otherwise).
512