Chairish APIchairish.com ↗
Access Chairish listings, seller profiles, reviews, and search suggestions via API. Get product details including price, images, availability, and category data.
What is the Chairish API?
The Chairish API covers 7 endpoints for browsing and researching vintage and pre-owned furniture and decor listings on Chairish.com. Use search_products to run full-text queries across the catalog and get back paginated arrays of listings with title, price, category taxonomy, and seller identifiers, or use get_product_details to pull complete product records including images, availability, brand, and description for any individual item.
curl -X GET 'https://api.parse.bot/scraper/0140bca7-e5fb-4079-85b9-6029f2932dcd/search_products?page=1&query=chair' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace chairish-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.chairish_api import Chairish, Product, ProductDetail, Shop, ShopProfile, Review, Suggestion
chairish = Chairish()
# Search for products
for product in chairish.products.search(query="mid century chair", limit=5):
print(product.title, product.price, product.taxonomy)
# Browse a category
for product in chairish.products.by_category(category="furniture", limit=3):
print(product.title, product.price, product.url)
# Get full product details from a search result
for product in chairish.products.search(query="walnut table", limit=1):
slug = product.url.split("/")[-1]
detail = product.details(slug=slug)
print(detail.title, detail.price, detail.availability, detail.brand)
if detail.seller:
print(detail.seller.name, detail.seller.id)
# Search for shops and get profile + reviews
for shop in chairish.shops.search(query="vintage", limit=3):
print(shop.name, shop.url)
# Get a shop profile and browse reviews using the constructible pattern
my_shop = chairish.shop(id="2dfzah")
profile = my_shop.profile()
print(profile.name, profile.description, profile.location)
for review in my_shop.reviews.list(limit=5):
print(review.author, review.rating, review.content)
# Get autocomplete suggestions
for suggestion in chairish.suggestions.search(query="art deco", limit=5):
print(suggestion.display, suggestion.is_shop)
Full-text search over Chairish product listings. Returns paginated results with basic product info including title, price, category taxonomy, and seller GUID. Pagination via page number; total_count may be null if the site does not surface it for the query.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| queryrequired | string | Search keyword (e.g. 'chair', 'modern rugs'). |
{
"type": "object",
"fields": {
"items": "array of product listing objects",
"total_count": "integer total number of results, or null if unavailable"
},
"sample": {
"data": {
"items": [
{
"id": "35701720",
"url": "https://www.chairish.com/product/35701720/vintage-cane-back-florals-chairs-a-pair",
"image": "https://chairish-prod.freetls.fastly.net/image/product/master/468d9758-72ec-4197-9069-71db8d4086fb/vintage-cane-back-florals-chairs-a-pair-9078?aspect=fit&width=320&height=320",
"price": "1495",
"title": "Vintage Cane Back Florals Chairs, a Pair",
"taxonomy": "Furniture/Seating/Accent Chairs/Side Chairs",
"dimensions": null,
"dealer_guid": "2dfzah",
"is_purchasable": true
}
],
"total_count": null
},
"status": "success"
}
}About the Chairish API
Product Search and Category Browsing
The search_products endpoint accepts a query string and an optional page integer, returning an items array and a total_count (which may be null for some queries). The list_category_products endpoint works the same way but accepts a category slug — values like furniture, art, rugs, and lighting map to Chairish's top-level navigation. Both endpoints return the same product listing shape, so results can be handled with the same data pipeline.
Product and Seller Details
get_product_details requires both a product_id (numeric string) and a slug (URL path segment), both of which are available from search or category listing results. The response includes price, availability, brand, category, a description string, an images array, and a seller object with the seller's name, URL, and shop ID. That shop ID feeds directly into get_seller_profile, which returns the shop's name, location, description, active items array, and total_count. To get the short alphanumeric dealer GUID needed for get_seller_reviews, use the value surfaced in search_products or list_category_products results rather than the shop slug.
Reviews and Search Discovery
get_seller_reviews returns paginated review objects, each containing rating, content, author, date, purchased_item, and purchased_item_url, along with a total_reviews string and an average_rating string at the response level. The search_shops endpoint searches dealers by keyword and returns id, name, and url for each match. search_suggestions takes a partial query and returns a choices array with display, url, is_maker, is_shop, and optionally is_official_shop flags — useful for autocomplete-style interfaces or disambiguation before running a full search.
The Chairish API is a managed, monitored endpoint for chairish.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when chairish.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official chairish.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price-monitoring tool that tracks Chairish listing prices by category slug over time using
list_category_products. - Aggregate seller reputation data by combining
get_seller_reviewsratings with shop metadata fromget_seller_profile. - Power a product comparison app that pulls full specs, images, and availability from
get_product_detailsfor multiple items. - Create a dealer discovery feature using
search_shopsto find sellers by name and surface their active inventory. - Implement an autocomplete search widget backed by
search_suggestionsto help users refine queries before fetching full results. - Research market pricing for vintage furniture categories by crawling
list_category_productsacross slugs likelightingandrugs. - Generate seller due-diligence reports combining profile location, description, listing count, and aggregated review scores.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Chairish have an official developer API?+
What identifiers does `get_product_details` require, and where do they come from?+
product_id (a numeric string like '35701720') and a slug (the URL path segment like 'vintage-cane-back-florals-chairs-a-pair'). Both fields are present in items returned by search_products and list_category_products, so a typical workflow fetches listings first and then passes those values into get_product_details.Why does `get_seller_reviews` use a different ID than `get_seller_profile`?+
get_seller_profile uses the shop slug (e.g. 'stark-studio-rugs'), while get_seller_reviews uses a short alphanumeric dealer GUID (e.g. '2dfzah'). The GUID is returned in search_products and list_category_products results. The two identifiers are not interchangeable, so you need to capture the GUID from listing results if you plan to query reviews.Is `total_count` always available in search and category endpoints?+
search_products and list_category_products include a total_count field, but it may return null for certain queries where Chairish does not surface that count. Pagination still works via the page parameter regardless of whether total_count is populated.