FurniOpsDocs
API referenceCatalogue

List the catalogue's variants with price levels and stock

The own catalogue's variants by ID, each with its price levels (wholesale, MAP, MSRP), its availability and what looks wrong with them, narrowed by every filter given. The network's rows are never listed here.

  • Scopesvariants:read
  • Rate classread
GET/v1/catalogue/variants

The own catalogue's variants by ID, each with its price levels (wholesale, MAP, MSRP), its availability and what looks wrong with them, narrowed by every filter given. The network's rows are never listed here.

Authorization

apiKey
AuthorizationBearer <token>

An API key (fo_live_… / fo_test_…) as a bearer token

In: header

Query Parameters

q?string

A SKU, GTIN or MPN (ignoring case and punctuation), or words of the product's title

Length2 <= length <= 100
product?string

Only this product's variants

Match^prod_[0-9A-Za-z]{22}$
availability?string

Only variants whose best location has this availability

Value in

  • "in_stock"
  • "low_stock"
  • "out_of_stock"
  • "backorder"
  • "preorder"
  • "discontinued"
  • "unknown"
issue?string

Only variants with this issue

Value in

  • "missing_msrp"
  • "missing_cost"
  • "map_above_msrp"
  • "cost_above_map"
  • "cost_above_msrp"
  • "no_availability"
  • "incoming_past_due"
limit?integer

Page size

Range1 <= value <= 100
Default20
starting_after?string

Opaque position returned by a previous page

Match^[A-Za-z0-9_-]{1,512}$
ending_before?string

Opaque position returned by a previous page

Match^[A-Za-z0-9_-]{1,512}$

Header Parameters

FurniOps-Version?string

Dated API version; pinned per organisation on first use and overridable per request

Value in

  • "2026-10-01"
  • "2026-10-04"
FurniOps-Mode?string

The data the request acts on: test is the organisation's sandbox. An OAuth token picks it (live by default); an API key's mode is fixed, and naming the other one is refused

Value in

  • "live"
  • "test"
If-None-Match?string

ETag of a cached representation; a match returns 304

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X GET "https://example.com/v1/catalogue/variants"
{  "object": "list",  "data": [    {      "object": "catalogue_variant",      "id": "string",      "product": "string",      "product_title": "string",      "title": "string",      "sku": "string",      "axes": {        "property1": "string",        "property2": "string"      },      "status": "active",      "price_levels": {        "currency": "usd",        "cost": 0,        "map": 0,        "msrp": 0,        "source": "string",        "observed_at": "2019-08-24T14:15:22Z"      },      "availability": {        "status": "in_stock",        "quantity": 0,        "incoming": [          {            "quantity": 1,            "eta": "2019-08-24"          }        ],        "lead_time_days": 0,        "location": "string",        "locations": 1,        "source": "string",        "observed_at": "2019-08-24T14:15:22Z"      },      "issues": [        "missing_msrp"      ],      "updated_at": "2019-08-24T14:15:22Z"    }  ],  "has_more": true,  "next_cursor": "string"}