Chairish API

US vintage and design listings as JSON, with the dimensions buyers actually ask for

The Chairish API turns chairish.com, the US marketplace where independent dealers and makers consign vintage, antique and used design, into clean JSON in four actions.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Chairish endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
C
/chairish/v1

4 active endpoints. Every call is 3 credits.

  • POST/chairish/v1/search
  • POST/chairish/v1/detail
  • POST/chairish/v1/seller
  • POST/chairish/v1/filters

What Chairish endpoints does ReefAPI ship?

4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

4 endpoints

search

3 cr

Search or browse Chairish's live US marketplace of vintage, antique and used design.

required
—
optional
query, category, maker, keyword, styles, categories, colors, item_type, on_sale, ready_to_ship, featured, shipping, price_min, price_max, sort, page, max_results

detail

3 cr

The full listing page for one to five items.

required
item
optional
—

seller

3 cr

One dealer's storefront.

required
seller
optional
styles, categories, colors, item_type, on_sale, price_min, price_max, sort, page, max_results

filters

3 cr

The filter values Chairish itself serves for a scope, with its own counts.

required
—
optional
query, category, maker, keyword, seller

Every parameter, every allowed value →

Chairish API

4 of 4 endpoints, ready to run

View docs ↗

Chairish listings by collection, keyword, brand storefront or free text: item id, URL, title, the USD price with the pre-markdown price, condition, materials, colour, height/width/depth in inches, the dealer and the shipping type.

3 credits0 required · 6 optional
POST/chairish/v1/search
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

How the Chairish API works

Chairish is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 438 engines.

02
Call
POST /chairish/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
3 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

From a category to a priced, measured shortlist with the dealer behind it

Three calls. Read the filter vocabulary the category actually serves, search it with those values, then open the listings you care about in one batched call.

01filters
POST/chairish/v1/filters
{ "category": "rings" }

Returns Chairish's own filter values with counts - style labels, colour hex codes, category codes, price bands. This is where the values for the next call come from; a style passed as a URL slug returns zero results instead of an error, so the list matters. On some categories Chairish does not serve this list, and the response says so with filters_available false rather than implying there are no filters.

02search
POST/chairish/v1/search
{ "category": "rings", "styles": ["Art Deco"], "price_max": 2500, "sort": "price_desc", "max_results": 24 }

1,280 Art Deco rings of a category whose total is reported as 10,000 - and total_is_capped tells you that 10,000 is a ceiling, not a count. Each row carries the item id, the USD price with the pre-markdown figure, the materials, the condition, the dealer id and the dealer's city.

03detail
POST/chairish/v1/detail
{ "item": "35654342,37545900" }

Up to five listings in one call, each with the dealer's full description, the condition grade and the separate condition notes, and the whole detail table for that department - Period, Country of Origin, Materials, Styles, plus Ring Size and Primary Stone on jewellery or Seat Height and Number of Seats on seating.

A shortlist you can act on: 24 rows with a live USD price, the pre-markdown price where the dealer has discounted, the measurements in inches, the condition in the dealer's own words and a direct route to the dealer's other stock - from three calls and one key.

request
curl -X POST https://api.reefapi.com/chairish/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"category":"floor-lamps","max_results":12}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "chairish",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

On Chairish a total can be a ceiling, a wrong filter value looks like an empty result, and a marked-down piece has two prices

Chairish stops counting at 10,000, so a category total of exactly 10,000 is a ceiling rather than a number - and two such totals cannot be compared. Its filters do not take the slugs that appear in its URLs: a style is a label, a colour is a hex code, a category is a code, and a value it does not recognise comes back as zero results rather than an error. And a discounted piece publishes both figures. This API publishes the ceiling as a flag, translates every filter into the spelling the site actually honours, refuses the one filter pair the source answers wrongly, and returns the paid price and the pre-markdown price as two separate fields.

Request (measured 2026-10-06)What Chairish returnedWhat this API does
A category with more than 10,000 listingsExactly 10,000, on five unrelated categories; the same category split by item type summed to 12,793total_available plus total_is_capped true, so you never read the ceiling as a count
styles Art Deco on rings1,280 of 10,000+Returned, with the filter echoed in filters_applied
item_type new on rings5,644; vintage 7,149Returned
price_max 500 on rings2,566 of 10,000+Returned, with the band in filters_applied
colors FF0000 on accent chairs2,698 of 10,000+Returned
A style passed as a URL slug instead of a labelZero results, HTTP 200, no errorThe filters action publishes the exact labels and counts, so you never guess one
An unrecognised query parameterThe whole category, HTTP 200Never sent: only the site's own filter names reach the request
shipping together with styles2,798 - MORE rows than the style filter alone (1,280)Refused, with both numbers, because the answer would have been wider than the filter
Page 100 of any categoryRefused by the source; the real end of a shorter category is a clean 404 insteadpage_cap 99, last_page and has_more, and page 100 is rejected with the arithmetic before any call is made

Counts are from one minute on 2026-10-06 and move with the dealers' stock. The reachable window is 99 pages of 48 rows, that is 4,752 listings per scope, so deep inventory is reached by narrowing with a style, a colour, a price band or a sub-category. The filters action does not list values for every category - Chairish serves that list on some scopes and not others, and the response says which case you are in rather than implying the category has no filters.

What was measured on 2026-10-06

One live run, 59 calls, no fixtures. Every figure below is from that run and is recorded in the engine's build log.

Rows read

288 across 12 scopes and 5 departments (seating, lighting, rugs, art, jewellery)

Core fields present

288/288 - item id, URL, title, price, currency, price status, category path, dealer id, shipping type, ships-to countries, condition, description, photos

Currency

USD on 288/288. Zero prices: 0

Markdowns

68/288 rows carried both the paid price and the pre-markdown price

Dimensions in inches

24/24 on chairs, floor lamps, Persian rugs, paintings, coffee tables, brand and keyword scopes; 3/24 on rings, which publish no dimension table

Listing detail

10/10 ids returned description, condition notes, period, item type, styles, materials, colour, the full detail table and the dealer block

Round-trip

10/10 ids identical between search and detail - same id, same type, same URL, same price

Dealers

7/7 storefronts resolved with display name, town and state, year joined and the sales band

Filter values

Served on 4 of 8 scopes tested (17, 23, 15 and 10 filters); the other 4 return filters_available false rather than an empty guess

Markup in responses

0 HTML tags or escaped entities across 288 rows and 10 listings, scanned field by field

Reachable window

99 pages of 48 rows = 4,752 listings per scope; asking beyond it is rejected with the arithmetic, not a silent empty page

Latency

p50 1.08 s, slowest call 1.83 s across the 45 successful calls

What people build with Chairish

The jobs this data is most often used for.

4

endpoints

3

credits per call

01

Price research on a specific designer, brand or style - pull the live USD price, the pre-markdown price and the discount on every Herman Miller, Art Deco or Mid-Century Modern listing, and track how a segment is actually clearing.

02

Sourcing for a dealer or interior designer - filter a category by style, colour, price band and vintage-versus-new, then read the exact height, width and depth in inches to see what fits a room before anyone picks up a phone.

03

Competitive monitoring for a vintage marketplace or an auction house - watch a category's on-sale share, markdown depth and newly-listed flow, and follow named dealers through their storefronts.

04

Enriching a resale or valuation model - every listing carries period, country of origin, materials, condition grade, the dealer's own condition notes and the full description, which is the feature set a condition-and-provenance model needs.

What Chairish data costs

The cheapest call here is 3 credits, so $15/mo (Pro) buys 3,333 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 438 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/chairish/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"category":"floor-lamps","max_results":12}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/chairish/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "category": "floor-lamps",
  "max_results": 12
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Chairish.

Get a free key →
What does Chairish actually sell, and what does the API cover?▾

Vintage, antique and used design, plus a newly-made tail from the same dealers: seating, tables, casegoods and storage, beds, lighting of every kind, rugs in every standard size, fine art including paintings, prints, photography and sculpture, mirrors and wall accents, decor and objects, tableware and barware, textiles and pillows, outdoor furniture, and jewellery including rings, necklaces, earrings and watches. You scope a search by the collection path Chairish uses in its own URL - floor-lamps, accent-chairs, rings, rugs/persian, paintings/abstract - or by a brand or designer storefront, or by free text, or by one of the site's keyword pages. The filters action returns the nested category tree with live counts, so you never have to guess a path.

What currency are the prices in, and what happens with a discounted piece?▾

Chairish is a US marketplace and lists in US dollars: currency was USD on 288 of 288 rows read on 2026-10-06. The amount and the currency code are always read as a pair out of the row's own data, so a figure can never be relabelled. When a dealer has marked a piece down you get three fields: price is what a buyer pays, original_price is the pre-markdown figure, and discount_percent is the percentage Chairish itself prints - not one we recompute. 68 of those 288 rows were markdowns.

Can a price ever come back as zero?▾

No. price_status is one of published, sold, not_purchasable or not_published, and price is null for the last of those - never 0, and never a guess. Across 288 rows, 285 were published and 3 were not_purchasable, which on Chairish means a lot listed at auction rather than for immediate purchase: it has an amount, but you cannot buy at it, and that is a different thing from sold. Zero prices: 0 of 288.

How complete are the dimensions?▾

Height, width and depth come back as numbers in inches, exactly as Chairish publishes them, with no conversion applied. Measured fill on 24 rows per category: 24 of 24 on accent chairs, floor lamps, Persian rugs, paintings, coffee tables, a brand storefront and a keyword page. The honest exception is jewellery - Chairish ring listings carry no dimension table, so the figures came back on 3 of 24 and are null on the rest rather than invented. The detail action additionally returns the site's own display string, for example 22.5ʺW × 23.75ʺD × 41ʺH, and a chair also carries Seat Height and Number of Seats as separate rows.

How much does one listing return?▾

The dealer's full description, every photo, the price pair, the condition grade and the dealer's separate condition notes, and Chairish's entire detail table. That table is different in every department, so it is returned whole in details and projected into attributes rather than squeezed into a fixed shape: a chair carries Number of Seats and Seat Height, a lamp carries Lamp Shade and Power Sources, a rug carries Rug Construction and Pattern, a painting carries Art Subject and Frame Type, a ring carries Primary Stone, Primary Stone Shape, Primary Stone Creation and Ring Size. Period, country of origin, item type, styles, materials, colour, brand and designer are promoted to named fields because they mean the same thing in every department. Measured on 10 listings across five departments: description, condition notes, period, item type, styles, materials, colour, the detail table and the dealer block came back on 10 of 10.

What do you get about the dealer?▾

Every search row carries the dealer id and a direct link to their storefront, plus the city, state and country the piece ships from. The seller action resolves a storefront by its handle or by that same dealer id and returns the dealer's display name, their town and state, the year they joined Chairish and the sales band the site prints - for example 10+ sales, 250+ sales, 2.5k+ sales - together with their live inventory in the same row shape as search, filterable the same way. Verified on 7 dealers: 7 of 7 resolved with name, location, year and band. A dealer who exists but currently lists nothing comes back with has_live_inventory false rather than as an error; an unknown handle is NOT_FOUND.

Does it return shipping costs?▾

No, and it does not pretend to. Chairish computes a shipping quote from the buyer's own postal code, which is not something this API sends, so instead of a fabricated number you get what the listing itself publishes: shipping_type - white-glove, standard-parcel, freight, local-pickup-only or arranged-by-seller - the list of countries the piece ships to, whether free local pickup is offered, and the dealer's own city and state so you can judge distance yourself. Those were present on 288 of 288 rows.

What does Chairish not publish, that this API therefore does not return?▾

Four things, all of them null rather than guessed. There is no trade or private-sale price, because those sit behind a signed-in buyer. There is no sold price and no sold archive, because sold listings leave the public browse surface. There is no exact dealer sales count - Chairish prints a band and that band is what you get. And there are no reviews or ratings on a listing. The reachable window also stops at 4,752 listings per scope, which is the source's limit, not a choice; narrowing the search is how you get past it.

What is the Chairish API?▾

Chairish API is a ReefAPI endpoint group for us marketplace for vintage and used design: furniture, lighting, rugs, art, decor and jewellery with usd prices, period, materials, dimensions in inches, condition and the dealer. It returns live JSON through POST requests under /chairish/v1.

Is the Chairish API free to try?▾

Yes. ReefAPI starts with 1,000 free credits, no card required. Chairish calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Chairish login or account?▾

No login to Chairish is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Chairish data?▾

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Chairish API use?▾

Chairish actions currently cost 3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Chairish from an AI assistant or MCP client?▾

Yes. Connect ReefAPI once through MCP and your assistant can call chairish actions with the same key, credit pool and JSON envelope used by normal REST requests.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 437 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-10-06.