The UK's antiques and vintage market, as filterable data
Vinterior is the UK's curated marketplace for vintage, antique and design furniture, lighting, art and decor, and this API reads it as JSON with no account and no key.
7 active endpoints, on 1, 2 and 3 credit tiers.
- POST/vinterior/v1/search
- POST/vinterior/v1/detail
- POST/vinterior/v1/delivery
- POST/vinterior/v1/facets
- POST/vinterior/v1/categories
- POST/vinterior/v1/suggest
- POST/vinterior/v1/seller
What Vinterior endpoints does ReefAPI ship?
7 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Vinterior API
7 of 7 endpoints, ready to run
Find vintage and antique pieces by period, maker, material, size and GBP price
// 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 Vinterior API works
Vinterior 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 491 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.
Price a vintage piece against the live UK market
Vinterior keeps only live listings, so there are no sold prices to read. What you can read is the live market around a piece, delivered to where the buyer is - in three calls.
The minimum, maximum and average GBP price in that exact category, and which periods, materials and makers actually occur in it. Use the values exactly as returned; an unknown value is rejected with the closest ones.
The comparable pieces themselves, cheapest first, each with its centimetre dimensions, decade, maker, the country it ships from and its dealer. total is exact.
What it costs to get one of them to the buyer's destination, and whether that is the destination's own quote, the fixed UK price or a quote on request. One call per destination.
A price band you can defend: what comparable pieces are asking today in GBP, how many there are, where they ship from and what delivery adds - with the exact total and no converted currency.
curl -X POST https://api.reefapi.com/vinterior/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"sideboard","period":["Mid 20th Century"],"ships_from":["United Kingdom"],"max_price":3000,"page_size":24}'{
"ok": true,
"data": { … },
"meta": {
"api": "vinterior",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}What a Vinterior field actually contains
Fields that read differently from how they look, and the limits worth knowing before you build on them. Every row was measured against live Vinterior pages on 2026-10-14, including the ones that went against us.
| Field | What it holds |
|---|---|
| price_gbp and currency | GBP is Vinterior's only native currency, on every market. The site's euro and dollar prices are a display conversion of the GBP figure at one site-wide rate: on 6 listings read in all three currencies in the same minute, every euro figure was GBP x 1.2077 and every dollar figure GBP x 1.3511, for the item and the delivery alike, and the French and Dutch storefronts print the same converted euro number. So this API returns GBP and never a converted price. |
| price_gbp vs price_shown | Two different numbers on discounted pieces, and both are returned. price_gbp is the price the source stores and the basket uses, to the penny: a 15% cut on a 935 GBP sideboard is 794.75. price_shown is what the page prints, rounded to the whole pound: 795. The page's own structured data also says 795. On 14 listings across seven categories, price_gbp matched the stored price 14 of 14 and price_shown matched the page 14 of 14. |
| list_price_gbp, sale_price_gbp, discount_pct | list_price_gbp is the asking price before any cut; sale_price_gbp and discount_pct are filled only when the piece is on sale (64,664 of 438,968 on 2026-10-14). The discount is the source's own figure. |
| dimensions_cm | Width, height and depth in centimetres as three separate numbers, the source's own units. A dimension the dealer left blank is null, never 0 - and a maximum-size filter never admits a blank one. Depth is the field most often missing: filled on 29 to 49 of 50 newest listings depending on the department. |
| period, decade, designer, brand | As the dealer catalogued them. The source stores 'Unknown' as a value for each - designer on 115,972 listings, brand on 120,538, decade on 73,293, period on 53,436 - and this API returns those as null rather than as a word. Designer and brand are naturally sparse: 0 to 8 of 50 newest listings per department name a designer. |
| condition and wear_condition | condition is the source's group: Used 388,046, Refurbished 38,761, New 11,428. wear_condition is the finer grade on the piece's own page (Good, Excellent ...) and comes back from detail, together with the dealer's free-text condition report where they wrote one. |
| delivery destinations | The 23 destinations the listing page itself offers: the 12 UK regions, Belgium, France, Germany, Hungary, the Republic of Ireland, Italy, the Netherlands, Spain, the United States, the rest of continental Europe and the rest of the world. One call prices one destination, and the answer says where its price came from: the destination's own quote, the piece's fixed UK delivery price (which the page applies to every mainland UK region without its own quote), or 'Request a quote', which is common outside the UK. Nothing depends on where the call is made from: the same piece requested from five different countries returned an identical price and an identical delivery quote. |
| price_includes_import_taxes | True when the page states that the price includes import taxes, which it does for pieces shipping from EU-based dealers. Whether a buyer outside the UK pays a different amount is not published on the listing. |
| seller | The dealer's trading name, slug, whether they are a professional dealer, and on detail their rating, review count with the five-to-one star breakdown, sales count and the year they joined. For the 9,881 listings from private sellers the name is the one Vinterior's own search data carries, while the listing page itself prints 'Private Seller' - detail returns that label separately in seller.kind_label. |
| total and paging | total is the source's exact count for the query, and every row of it is reachable: 438,968 rows at 48 per page end on page 9,146, and a page past the end comes back empty rather than repeating the last one. has_more says when to stop. |
Measured 2026-10-14 on live Vinterior responses. Sold pieces are not available: the source keeps only live listings, and a sold or withdrawn piece answers not found.
Markets, currency, delivery and ids - measured
The questions a marketplace API has to answer, each checked against live Vinterior pages on 2026-10-14.
438,968 live listings: Furniture 134,340, Art 106,824, Home Decor 106,339, Lighting 64,412, Textiles 16,893, Home Fixtures 7,211, Garden Decor 1,938, Garden Furniture 937, Garden Lighting 75 - 266 category paths in all.
37 countries: United Kingdom 196,790, France 43,223, Italy 42,986, Netherlands 24,758, Germany 23,457, Belgium 20,408, Denmark 11,851, Czechia 11,813, Poland 11,685, Spain 10,133 and 27 more. ships_from filters on where the piece is, not on a delivery destination.
Yes - GBP. The site's euro and dollar prices are the GBP price at one site-wide rate (1.2077 and 1.3511 on 2026-10-14), and its French and Dutch storefronts show the same converted figure. This API never returns a converted number.
No, and it was measured. The same piece requested from five different countries returned the same price, the same currency, the same default destination and an identical delivery quote. Each delivery row is stamped with the destination it prices.
On 14 listings across seven categories, the stored price, list price, printed price, the page's structured-data price, all three dimensions, the period, the dealer and the id matched the piece's own page on 196 of 196 checks.
Yes, and every row is reachable by paging; a page past the end is empty, never a repeat.
No. The source keeps only live listings, so a sold or withdrawn piece answers not found.
What people build with Vinterior
The jobs this data is most often used for.
endpoints
credits per call
Source stock for an interior project with real constraints: a Mid Century Modern sideboard under 220 cm wide, in teak, under 3,000 GBP, shipping from the UK, with the delivery price to the client's region.
Price a piece before buying or listing it: facets for the minimum, maximum and average GBP price inside the same category, period and material, then search for the closest live comparables.
Track a maker or designer across the market - every live Ercol, G Plan or Hans J Wegner piece with its price, condition, decade and dealer.
Monitor dealers: a dealer's full live stock, its split by department and period, and its price range, refreshed as often as you need.
What Vinterior 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 →- 1,000 free credits on signup, no card
- One key, all 491 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/vinterior/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"sideboard","period":["Mid 20th Century"],"ships_from":["United Kingdom"],"max_price":3000,"page_size":24}'import requests
r = requests.post(
"https://api.reefapi.com/vinterior/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "sideboard",
"period": [
"Mid 20th Century"
],
"ships_from": [
"United Kingdom"
],
"max_price": 3000,
"page_size": 24
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Vinterior.
Get a free key →Do I need a Vinterior account or key?▾
No. Everything this API returns is on Vinterior's public pages: listings, the category tree, filter values, dealer storefront stock, search suggestions and the delivery prices the listing page shows. Nothing behind a login is read.
Can I filter by period, decade, maker and material instead of by keyword?▾
Yes. search takes the source's own values for period (6), decade, style (34), material (106), colour (34), designer (3,742) and maker (454), plus condition, features, country shipped from, GBP price, sale, free UK delivery and width, height and depth in centimetres. An unknown value is rejected with the closest values the source does use, instead of silently returning nothing.
Which currency are prices in?▾
GBP, always. Vinterior's euro and dollar prices are the GBP price converted at one site-wide rate (measured 1.2077 and 1.3511 on 2026-10-14), so GBP is the only figure the source itself sets.
Why do price_gbp and price_shown differ by a few pence?▾
On discounted pieces the source stores the exact discounted price (794.75) and the page prints it rounded to the pound (795). Both are returned so you can use whichever you need; neither is presented as the other.
How do I get the delivery cost?▾
detail returns the piece's fixed UK delivery price and the Greater London quote. delivery returns the price to one destination per call - any of the 23 the page offers - and says whether it is the destination's own quote, the fixed UK price or 'Request a quote'. For several destinations, make one call each.
Can I get sold prices?▾
No. Vinterior keeps only live listings in its catalogue, so there are no sold comparables to read; a sold or withdrawn piece answers not found. For a live price band use facets, which returns the minimum, maximum and average GBP price for any scope search accepts.
How many results can I page through?▾
All of them. total is exact, every row is reachable, and a page past the end comes back empty with has_more false - it never repeats the last page.
Who are the sellers?▾
Mostly professional dealers: 429,087 of 438,968 listings on 2026-10-14. Rows carry the dealer's trading name and slug; seller returns a dealer's whole live stock with its split by department and period, and detail adds the rating, star breakdown, sales count and joining year.
What is the Vinterior API?▾
Vinterior API is a ReefAPI endpoint group for the uk's vintage, antique and design marketplace: 438,968 live pieces from dealers in 37 countries, with period, decade, style, maker, designer, material and centimetre dimensions as their own fields, prices in gbp and delivery per destination. It returns live JSON through POST requests under /vinterior/v1.
Is the Vinterior API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Vinterior calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Vinterior login or account?▾
No login to Vinterior 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 Vinterior 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 Vinterior API use?▾
Vinterior actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Vinterior from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call vinterior actions with the same key, credit pool and JSON envelope used by normal REST requests.
231 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Vinterior, 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 490 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-14.