Wayfair API

Wayfair as JSON, priced per option

The Wayfair API returns wayfair.com, the largest US online home-goods retailer, as clean JSON in seven actions.

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

7 active endpoints, on 1, 2 and 4 credit tiers.

  • POST/wayfair/v1/search
  • POST/wayfair/v1/category/products
  • POST/wayfair/v1/brand/products
  • POST/wayfair/v1/filters
  • POST/wayfair/v1/product/detail
  • POST/wayfair/v1/product/reviews
  • POST/wayfair/v1/product/options

What Wayfair endpoints does ReefAPI ship?

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

7 endpoints

search

2 cr

Search Wayfair by keyword and read the whole result grid.

required
query
optional
page, filters, max_rotations

category/products

2 cr

Browse one Wayfair category.

required
category
optional
page, filters, max_rotations

brand/products

2 cr

Every listing Wayfair publishes for one of its house or partner brands (Mercer41, Latitude Ru…

required
brand
optional
page, max_rotations

filters

1 cr

Every facet Wayfair offers for a keyword or a category, with the ids needed to build a filter…

required
—
optional
query, category, filters, max_rotations

product/detail

2 cr

The full Wayfair product record for one SKU (and, when given, one option).

required
sku
optional
option_id, max_rotations

product/reviews

2 cr

The review block Wayfair serves on a product page.

required
sku
optional
option_id, max_rotations

product/options

4 cr

Every option of a listing WITH ITS OWN PRICE.

required
sku
optional
max_options, max_rotations

Every parameter, every allowed value →

Wayfair API

6 of 7 endpoints, ready to run

View docs ↗

Wayfair's whole result grid for a keyword: 48 listings with SKU, title, brand, price, was-price, sale badge, rating, review count, the selected colour, the sibling options, stock message, delivery promise and images.

2 credits1 required · 2 optional
POST/wayfair/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 Wayfair API works

Wayfair 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 294 engines.

02
Call
POST /wayfair/v1/…

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

03
Pay
1 or 2 or 4 credits 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.

Get the facet ids first, then the price that actually applies

Two things decide whether a Wayfair pull is right: narrowing with Wayfair's own facet ids instead of guessing, and remembering that the price on a row belongs to one colour. Both are one call each.

01filters
POST/wayfair/v1/filters
{"category": "413892"}

1 credit. Every facet of Sofas with its ids, the price buckets, the sort ids the page offers and the child categories. Take the token you want, for example 2470~7175 for Genuine Leather.

02products
POST/wayfair/v1/category/products
{"category": "413892", "filters": ["2470~7175", "125355~399409"]}

2 credits for 48 rows. Sofas narrowed from 278,015 listings to 1,173, genuine leather and seats three, with 0 of 48 rows in common with the unfiltered first page. Read total_results before you page, and de-duplicate on sku.

03detail
POST/wayfair/v1/product/detail
{"sku": "<a row's sku>"}

2 credits. The specification table, structured dimensions and weight, assembly, warranty, certifications and breadcrumbs, none of which is on the grid. The SKU round-trips from the grid exactly, lower case included.

04options
POST/wayfair/v1/product/options
{"sku": "W111515578", "max_options": 4}

4 credits, because it reads one page per option. What each colour actually costs, with price_min, price_max and prices_vary. On 12 listings, all 11 that have options priced them differently.

A result set narrowed by Wayfair's own ids rather than a keyword guess, a product record with the fields the grid never carries, and a price per option instead of one number that is wrong for every colour but one.

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

On Wayfair the price belongs to the colour, not to the product

Wayfair sells the same item under many option combinations and prices each one separately. A single price for a listing is therefore the price of one option, the one the page happened to be showing. Every row and every product record names the option its price is for, and product/options reads each option's own price. These four were read one page per option on 2026-09-24.

Option of listing W111515578option_idPrice
Gray1945754497$264.99
Cream1945743990$289.99
Light Gray1945754502$499.99
Green1945754496$269.99

The dearest fabric of that sofa costs 89% more than the cheapest. On 12 listings priced this way, all 11 that have options priced them differently, with one spanning $589.99 to $1,640.00 across six options and the twelfth sold in a single configuration. options[].price is null on search, category/products, brand/products and product/detail on purpose: copying the shown price down to the siblings would invent prices out of one.

wayfair.com in USD, and the two things you cannot ask for

Measured 2026-09-24 by driving the engine against live wayfair.com: 12 calls per action, 1,440 listing rows, 12 products from 12 different result sets and 60 reviews. Three of these lines go against us.

One country, one currency, seven actions

wayfair.com, the United States site, priced in USD, with the catalogue and the prices identical on every reading, so there is nothing to configure. Keyword search, category browse and brand pages all return the same 48-listing row shape; filters returns the facet tree; product/detail, product/reviews and product/options read one listing.

The price belongs to the colour, not to the product

One sofa measured $264.99 in Gray, $289.99 in Cream, $499.99 in Light Gray and $269.99 in Green. Across 12 listings, all 11 that have options priced them differently, one of them spanning $589.99 to $1,640.00 over six options. A row's price is the price of its selected option, and the siblings come back with their id, URL, image and stock status but a null price until product/options reads their own pages.

What arrives on every listing row

Over 1,440 rows, 576 from search, 480 from category browse and 384 from brand pages, the SKU, title, brand, URL, currency, rating, review count, price, option count, stock message, images and variant id came back on all of them. The was-price on 80 to 82%, a sale badge on 32 to 42% because that is how many items are on sale, the sibling options on 62 to 79% and the delivery promise on 95 to 99%. Wayfair's quick-view marketing copy is on 97 to 99% of search and category rows and on none of the brand rows, because a brand card does not carry that block.

What arrives on a product record

Over 12 products, the SKU, title, price, currency, rating, review count, was-price, stock status, delivery, description, specification table, dimensions, breadcrumbs, images, lead image, listing status and minimum order quantity came back 12 times out of 12. Brand, brand id, warranty and the option groups on 11, assembly on 8, certifications on 2. Nine to 28 specification rows per product with a median of 17, 6 to 18 images with a median of 9, and 0 to 25 options with a median of 7.

The facets bite, and it was checked against Wayfair's own total

Sofas alone reported 278,015 listings with a first page spanning $157.99 to $1,000.00. Sofas with Genuine Leather and Seats 3 reported 1,173 with a first page spanning $620.00 to $5,199.99, and the two first pages shared 0 of 48 rows. Across 11 filters calls the endpoint returned 306 facets, 280 with selectable option ids and 11 numeric ranges reported as buckets. Page 50 of Sofas is a real page and answers with 48 rows.

Against us: you cannot sort, and you cannot ask for a price range

Wayfair's page offers Recommended, Customer Rating and Price Per Item both ways, but it applies the choice after the page loads. Six sort keys were tried and the server echoed Recommended for all six, with prices not monotonic under any of them, so no action takes a sort parameter and filters reports the sort ids with a note saying why. The Price Per Item facet is a numeric range with buckets and no option id, so four bucket shapes and two range parameters were tried and none narrowed anything: the buckets are reported and a price range is refused rather than silently ignored.

Against us: consecutive grid pages repeat a few listings

Wayfair's default grid order is recommendation-based and is not stable between requests, so pages 1 and 2 of Sofas were 48 rows each and shared 15. Measured at 12 to 15 of 48. Every listing response carries pagination_note saying so, and the fix is to de-duplicate on sku. Brand pages are clean: pages 1, 2 and 3 of one brand shared nothing.

Against us: five reviews, no barcode, no seller and no delivery date

A product page serves exactly five reviews and the rest are only built inside Wayfair's own page after it loads, so has_more_on_source says whether more exist instead of paging through them. There is no GTIN or UPC anywhere in the graph, no seller or supplier name because Wayfair sells as the retailer of record, and no arrival date, only the promise it prints. The manufacturer part number is real but mostly empty, published on 4 of 12 products in one sample and 0 of 13 in another, and the N Left in Stock line is a grid field that is absent from the product page on 12 of 12, where stock_status answers instead.

A wrong identifier is named, not guessed at

An unknown SKU answers NOT_FOUND, a malformed one answers INVALID_PARAM echoing the value and the accepted form, a missing one answers MISSING_PARAM, a retired brand id and a navigation-page category id each answer NOT_FOUND naming what they are, and a filter token without its option id answers INVALID_PARAM naming the required shape. No negative returns a 200 with an empty body. Not every Wayfair SKU starts with W, so W117645758, CTAF1037, BDUR2609 and JIAC1096 are all valid, and SKUs round-trip from a grid row to a product record unchanged, lower case included.

Price

filters costs 1 credit. search, category/products, brand/products, product/detail and product/reviews cost 2 each. product/options costs 4, because it reads one page per option. A 48-row grid and a single product record cost the same 2 credits, so ask for the grid.

What people build with Wayfair

The jobs this data is most often used for.

7

endpoints

1/2/4

credits per call

01

Track a Wayfair listing per colour and size, because the same sofa measured 89% dearer in one fabric than another.

02

Watch where your furniture or homeware products sit in Wayfair's category grids and what the competing listings charge.

03

Pull a category's whole facet tree to see how Wayfair classifies material, colour, size, style, seating capacity and assembly.

04

Enrich a product catalogue with the specification table, structured dimensions, weight, assembly and warranty without opening a browser.

What Wayfair data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 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 294 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/wayfair/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"sofa"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/wayfair/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "sofa"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Wayfair.

Get a free key →
Which Wayfair site does this cover?▾

wayfair.com, the United States site, priced in USD. The catalogue and the prices were identical on every reading, so there is no country parameter to set. Wayfair's other national domains are not covered by this engine.

Can I sort Wayfair results by price or rating?▾

No, and the reason was measured rather than assumed. Wayfair's page offers Recommended, Customer Rating and Price Per Item ascending and descending, but the sorted grid is built by the page after it loads, so the choice cannot be requested. Six different sort keys were tried and the server echoed Recommended for all six, with returned prices not monotonic under any of them. Rather than take a sort parameter and quietly ignore it, no action has one, and filters reports the sort ids Wayfair offers together with a note saying why they cannot be used. Filters are a different story: those apply, and they cut the result count hard.

How do I filter a Wayfair search or category?▾

Call filters with a keyword or a category id. You get back every facet Wayfair publishes with its ids, so a selection is a ready-made token such as 2470~7175 for Material: Genuine Leather. Pass those tokens to search or category/products in filters and several stack as AND. Across 11 measured calls the endpoint returned 306 facets, 280 of them with selectable option ids and 11 of them numeric ranges reported as buckets. Price is the exception: Wayfair publishes it as a range with buckets and no option id, so the buckets are reported and a price range is not accepted.

Why do Wayfair page 1 and page 2 share some listings?▾

Wayfair's default order on a search or category grid is recommendation-based and is not stable between requests, so consecutive pages repeat a dozen or so rows. Measured at 12 to 15 of 48. Every listing response says so in pagination_note. De-duplicate on sku. Brand pages do not have the problem: pages 1, 2 and 3 of one brand were 48 rows each and shared nothing.

Why is options[].price null on a search row?▾

Because Wayfair only carries an option's price on that option's own page. The row's price is the price of the selected colour or fabric, and the siblings come back with their id, name, image, URL and stock status but no price. Every listing response repeats this in option_price_note. product/options fetches the option pages and fills the prices, up to ten options per call with max_options, which is why it costs more than product/detail.

How many Wayfair reviews come back?▾

The five the product page serves, plus the star average, the total review count, Wayfair's own AI summary of the reviews and the sentiment by aspect. Over 60 reviews from 12 products, the review id, rating, body, date, author and incentive badge came back on 60 of 60, the reviewer's location on 46 and the option they bought on 4, because Wayfair leaves that field empty on most reviews. The summary and the aspects arrived on 11 of 12 products. Beyond the first five, the reviews are only reachable inside Wayfair's own page after it loads, so has_more_on_source tells you whether more exist rather than pretending to page through them.

What does Wayfair not publish?▾

A barcode: no GTIN and no UPC anywhere on any surface. A seller name, because Wayfair sells as the retailer of record. A delivery date, only the promise it prints such as FREE Delivery with Ground Delivery, and no postcode-specific estimate on the logged-out page. The manufacturer part number is a real field that most listings leave empty, published on 4 of 12 products in one sample and 0 of 13 in another, and it comes back null rather than being dropped. The N Left in Stock line is a grid field and is absent from the product page on 12 of 12, where stock_status is the answer instead.

What happens if I pass a top-level department id?▾

Wayfair serves a department such as Furniture as a merchandised landing page: a short featured selection with no prices and no result total. Those rows are returned with page_kind set to department_landing and a page_note pointing you at filters on the same id, which returns the child categories to browse for a priced grid. An id that is a navigation page rather than a grid is answered NOT_FOUND with the same guidance instead of an empty list.

What is the Wayfair API?▾

Wayfair API is a ReefAPI endpoint group for the largest us home-goods retailer: prices, the full spec table, reviews, and every colour and size option priced separately. It returns live JSON through POST requests under /wayfair/v1.

Is the Wayfair API free to try?▾

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

Do I need a Wayfair login or account?▾

No login to Wayfair 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 Wayfair 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 Wayfair API use?▾

Wayfair actions currently cost 1-4 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

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

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

122 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Wayfair, 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.

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 293 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-09-24.