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.
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.
Chairish API
4 of 4 endpoints, ready to run
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.
// 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.
No OAuth app, no request signing, no per-site account. One key covers all 438 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
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.
{ "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.
{ "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.
{ "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.
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}'{
"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 returned | What this API does |
|---|---|---|
| A category with more than 10,000 listings | Exactly 10,000, on five unrelated categories; the same category split by item type summed to 12,793 | total_available plus total_is_capped true, so you never read the ceiling as a count |
| styles Art Deco on rings | 1,280 of 10,000+ | Returned, with the filter echoed in filters_applied |
| item_type new on rings | 5,644; vintage 7,149 | Returned |
| price_max 500 on rings | 2,566 of 10,000+ | Returned, with the band in filters_applied |
| colors FF0000 on accent chairs | 2,698 of 10,000+ | Returned |
| A style passed as a URL slug instead of a label | Zero results, HTTP 200, no error | The filters action publishes the exact labels and counts, so you never guess one |
| An unrecognised query parameter | The whole category, HTTP 200 | Never sent: only the site's own filter names reach the request |
| shipping together with styles | 2,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 category | Refused by the source; the real end of a shorter category is a clean 404 instead | page_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.
288 across 12 scopes and 5 departments (seating, lighting, rugs, art, jewellery)
288/288 - item id, URL, title, price, currency, price status, category path, dealer id, shipping type, ships-to countries, condition, description, photos
USD on 288/288. Zero prices: 0
68/288 rows carried both the paid price and the pre-markdown price
24/24 on chairs, floor lamps, Persian rugs, paintings, coffee tables, brand and keyword scopes; 3/24 on rings, which publish no dimension table
10/10 ids returned description, condition notes, period, item type, styles, materials, colour, the full detail table and the dealer block
10/10 ids identical between search and detail - same id, same type, same URL, same price
7/7 storefronts resolved with display name, town and state, year joined and the sales band
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
0 HTML tags or escaped entities across 288 rows and 10 listings, scanned field by field
99 pages of 48 rows = 4,752 listings per scope; asking beyond it is rejected with the arithmetic, not a silent empty page
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.
endpoints
credits per call
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.
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.
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.
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 →- 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 -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}'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"])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.
191 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Chairish, you are one call away from the rest of the category — no second contract, no second integration.
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.
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.