StockroomAPIOpen the app
Reference

Catalog

Read-only mirror of the store's Shopify products, variants, locations and inventory levels. It may lag Shopify by a few seconds. To change catalog data, write to Shopify's Admin API.

#

List products

GETapi.stockroom.app/v2/products

Filter by status, vendor; include=variants embeds each product's variants.

Query
limitintegerquery
cursorstringquery
next_cursor from the previous page. A cursor that cannot be read is 400 invalid_cursor.
updated_at_minstring (date-time)query
updated_at_maxstring (date-time)query
created_at_minstring (date-time)query
created_at_maxstring (date-time)query
statusstringquery
activedraftarchived
vendorstringquery
includestringquery
variants
Responses
200
A page of products.
a page of Product in data, with next_cursor and has_more
Request
curl "https://api.stockroom.app/v2/products" \
  -H "Authorization: Bearer $STOCKROOM_KEY"
Response 200
{
  "data": [
    {
      "id": 1,
      "title": "Stoneware mug",
      "handle": "stoneware-mug",
      "vendor": "Acme",
      "product_type": "Kitchen",
      "status": "active",
      "tags": [],
      "options": [
        {}
      ],
      "image_url": "https://cdn.shopify.com/s/files/1/0001/products/mug-blue.jpg",
      "variants_count": 3,
      "variants": [],
      "shopify_updated_at": "2026-09-11T08:12:40Z",
      "created_at": "2026-09-01T10:00:00Z",
      "updated_at": "2026-09-11T08:12:44Z"
    }
  ],
  "next_cursor": "eyJpZCI6MTA0Mn0",
  "has_more": true
}
#

Get a product

GETapi.stockroom.app/v2/products/{id}

Variants are always embedded.

Path
idintegerpathrequired
The Shopify id.
Responses
200
The product.
Product in data
Request
curl "https://api.stockroom.app/v2/products/7011223344" \
  -H "Authorization: Bearer $STOCKROOM_KEY"
Response 200
{
  "data": {
    "id": 1,
    "title": "Stoneware mug",
    "handle": "stoneware-mug",
    "vendor": "Acme",
    "product_type": "Kitchen",
    "status": "active",
    "tags": [],
    "options": [
      {}
    ],
    "image_url": "https://cdn.shopify.com/s/files/1/0001/products/mug-blue.jpg",
    "variants_count": 3,
    "variants": [],
    "shopify_updated_at": "2026-09-11T08:12:40Z",
    "created_at": "2026-09-01T10:00:00Z",
    "updated_at": "2026-09-11T08:12:44Z"
  }
}
#

List variants

GETapi.stockroom.app/v2/variants

Filter by product_id, sku (exact), barcode (exact).

Query
limitintegerquery
cursorstringquery
next_cursor from the previous page. A cursor that cannot be read is 400 invalid_cursor.
updated_at_minstring (date-time)query
updated_at_maxstring (date-time)query
created_at_minstring (date-time)query
created_at_maxstring (date-time)query
product_idintegerquery
skustringquery
barcodestringquery
Responses
200
A page of variants.
a page of Variant in data, with next_cursor and has_more
Request
curl "https://api.stockroom.app/v2/variants" \
  -H "Authorization: Bearer $STOCKROOM_KEY"
Response 200
{
  "data": [
    {
      "id": 1,
      "product_id": 7011223344,
      "inventory_item_id": 44811223344,
      "title": "Stoneware mug",
      "product_title": "Stoneware mug",
      "sku": "MUG-BLU",
      "barcode": "0123456789012",
      "position": 1,
      "price": "12.50",
      "compare_at_price": null,
      "unit_cost": "12.50",
      "unit_cost_currency": "USD",
      "weight_grams": 250,
      "inventory_tracked": true,
      "inventory_policy": "deny",
      "taxable": true,
      "image_url": "https://cdn.shopify.com/s/files/1/0001/products/mug-blue.jpg",
      "shopify_updated_at": "2026-09-11T08:12:40Z",
      "created_at": "2026-09-01T10:00:00Z",
      "updated_at": "2026-09-11T08:12:44Z"
    }
  ],
  "next_cursor": "eyJpZCI6MTA0Mn0",
  "has_more": true
}
#

Get a variant

GETapi.stockroom.app/v2/variants/{id}
Path
idintegerpathrequired
The Shopify id.
Responses
200
The variant.
Variant in data
Request
curl "https://api.stockroom.app/v2/variants/40011223344" \
  -H "Authorization: Bearer $STOCKROOM_KEY"
Response 200
{
  "data": {
    "id": 1,
    "product_id": 7011223344,
    "inventory_item_id": 44811223344,
    "title": "Stoneware mug",
    "product_title": "Stoneware mug",
    "sku": "MUG-BLU",
    "barcode": "0123456789012",
    "position": 1,
    "price": "12.50",
    "compare_at_price": null,
    "unit_cost": "12.50",
    "unit_cost_currency": "USD",
    "weight_grams": 250,
    "inventory_tracked": true,
    "inventory_policy": "deny",
    "taxable": true,
    "image_url": "https://cdn.shopify.com/s/files/1/0001/products/mug-blue.jpg",
    "shopify_updated_at": "2026-09-11T08:12:40Z",
    "created_at": "2026-09-01T10:00:00Z",
    "updated_at": "2026-09-11T08:12:44Z"
  }
}
#

List locations

GETapi.stockroom.app/v2/locations

The locations Stockroom shows the store - active ones the store has not hidden in Stockroom's settings.

Query
limitintegerquery
cursorstringquery
next_cursor from the previous page. A cursor that cannot be read is 400 invalid_cursor.
updated_at_minstring (date-time)query
updated_at_maxstring (date-time)query
created_at_minstring (date-time)query
created_at_maxstring (date-time)query
Responses
200
A page of locations.
a page of Location in data, with next_cursor and has_more
Request
curl "https://api.stockroom.app/v2/locations" \
  -H "Authorization: Bearer $STOCKROOM_KEY"
Response 200
{
  "data": [
    {
      "id": 1,
      "name": "Acme Supply Co",
      "active": true,
      "fulfillment_service": "manual",
      "address": {
        "line1": "500 Congress Ave",
        "line2": null,
        "city": "Austin",
        "province_code": "TX",
        "zip": "78701",
        "country": "United States",
        "country_code": "US",
        "phone": "+1 512 555 0142"
      },
      "created_at": "2026-09-01T10:00:00Z",
      "updated_at": "2026-09-11T08:12:44Z"
    }
  ],
  "next_cursor": "eyJpZCI6MTA0Mn0",
  "has_more": true
}
#

Get a location

GETapi.stockroom.app/v2/locations/{id}
Path
idintegerpathrequired
The Shopify id.
Responses
200
The location.
Location in data
Request
curl "https://api.stockroom.app/v2/locations/61234567890" \
  -H "Authorization: Bearer $STOCKROOM_KEY"
Response 200
{
  "data": {
    "id": 1,
    "name": "Acme Supply Co",
    "active": true,
    "fulfillment_service": "manual",
    "address": {
      "line1": "500 Congress Ave",
      "line2": null,
      "city": "Austin",
      "province_code": "TX",
      "zip": "78701",
      "country": "United States",
      "country_code": "US",
      "phone": "+1 512 555 0142"
    },
    "created_at": "2026-09-01T10:00:00Z",
    "updated_at": "2026-09-11T08:12:44Z"
  }
}
#

List inventory levels

GETapi.stockroom.app/v2/inventory_levels

One row per item per location, as Shopify last reported it. Filter by inventory_item_id and location_id.

Query
limitintegerquery
cursorstringquery
next_cursor from the previous page. A cursor that cannot be read is 400 invalid_cursor.
updated_at_minstring (date-time)query
updated_at_maxstring (date-time)query
created_at_minstring (date-time)query
created_at_maxstring (date-time)query
inventory_item_idintegerquery
location_idintegerquery
Responses
200
A page of levels.
a page of InventoryLevel in data, with next_cursor and has_more
Request
curl "https://api.stockroom.app/v2/inventory_levels" \
  -H "Authorization: Bearer $STOCKROOM_KEY"
Response 200
{
  "data": [
    {
      "id": 1,
      "inventory_item_id": 44811223344,
      "location_id": 61234567890,
      "available": 42,
      "on_hand": 42,
      "committed": 0,
      "incoming": 24,
      "shopify_updated_at": "2026-09-11T08:12:40Z",
      "updated_at": "2026-09-11T08:12:44Z"
    }
  ],
  "next_cursor": "eyJpZCI6MTA0Mn0",
  "has_more": true
}