O2M Logo
One to Many
List stock
Was this page helpful?

List stock

Get the stock of your items, with a breakdown per warehouse.

Overview

Returns the stock of your items: the number on sale, the units on hand, each stock state, and the same per warehouse.

Request

GET/stock

Needs the permission stock:read

cURL
curl "https://api.o2m.in/api/v1/stock?limit=50" \
  -H "X-Access-Key: $O2M_ACCESS_KEY" \
  -H "X-Secret-Key: $O2M_SECRET_KEY"

Query parameters

ParameterTypeRequiredDescription
skustringNoOne exact SKU.
warehouse_idstringNoShow only this warehouse's numbers. sellable stays company-wide.
updated_sincedate and timeNoOnly items whose stock changed at or after this time, for example 2026-10-02T10:00:00Z.
limitnumberNoRows per page, from 1 to 500. The default is 100.
cursorstringNoThe next value of the page before. See Pagination.

Response

200 with items and next.

Response
{
  "items": [
    {
      "sku": "MUG-BLUE",
      "title": "Blue mug",
      "product_id": "MP-000123",
      "variant_id": null,
      "sellable": 15,
      "on_hand": 15,
      "available": 15,
      "committed": 0,
      "qc_hold": 0,
      "damaged": 0,
      "quarantine": 0,
      "reserved": 0,
      "incoming": 0,
      "in_transit": 0,
      "warehouses": [
        {
          "id": "1",
          "code": "DEFAULT",
          "name": "Default warehouse",
          "on_hand": 10,
          "available": 10,
          "committed": 0,
          "qc_hold": 0,
          "damaged": 0,
          "quarantine": 0,
          "reserved": 0,
          "incoming": 0,
          "in_transit": 0
        },
        {
          "id": "2",
          "code": "BLR",
          "name": "Bengaluru",
          "on_hand": 5,
          "available": 5,
          "committed": 0,
          "qc_hold": 0,
          "damaged": 0,
          "quarantine": 0,
          "reserved": 0,
          "incoming": 0,
          "in_transit": 0
        }
      ],
      "client": null,
      "updated_at": "2026-10-02T09:30:00.000Z"
    }
  ],
  "next": null
}
FieldTypeDescription
skustringThe item's SKU.
titlestringThe product name.
product_idstringThe product's ID in O2M.
variant_idstring or nullThe variant's ID, or null for a product without variants.
sellablenumberThe number O2M offers to your sales channels, across the whole company. A warehouse filter does not change it.
on_handnumberUnits physically in the warehouses this request covers.
availablenumberOn hand and free to sell.
committednumberOn hand and held for orders.
qc_holdnumberWaiting for a quality check.
damagednumberDamaged and not sellable.
quarantinenumberExpired, recalled or not found.
reservednumberKept aside by hand.
incomingnumberOrdered from a supplier and not yet received.
in_transitnumberOn the way between warehouses.
warehousesarrayThe same numbers per warehouse, each with id, code and name.
clientstring or nullThe code of the 3PL client that owns the item, or null.
updated_atstring or nullWhen the stock last changed.

Good to know  An item O2M has not yet started tracking per warehouse shows its stock as sellable and available, with an empty warehouses list. It is left out when you filter by updated_since.

Errors

StatusCodeMessageWhat to do
403—This key cannot read that warehouseThe key is limited to other warehouses.
422—updated_since must be a date and time, for example 2026-10-02T10:00:00ZCorrect the value.
422—warehouse_id must be a warehouse idUse an id from List warehouses.

Every endpoint can also return the common errors: a missing or invalid key, a missing permission, the rate limit, or a temporary failure.