# Vinterior — vintage, antique & design furniture marketplace (UK)

> Search Vinterior's 438,968 live vintage, antique and design pieces — furniture, lighting, art, decor, textiles and garden — sold by vetted dealers in the UK and 36 other countries. Filters are the source's own: free text, the category tree, period, decade, style, material, colour, designer, maker, condition group, the country the piece ships from, furniture features, seller, GBP price, sale and free-UK-delivery flags, and width / height / depth in centimetres. Every row carries its own price in GBP (list and sale), measured dimensions, period and decade, maker and designer, where it ships from and who sells it. `total` is the source's exact count and every row of it is reachable by paging.
> ReefAPI engine `vinterior` · 7 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/vinterior/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/vinterior/v1/search — 2 credits
Search Vinterior's 438,968 live vintage, antique and design pieces — furniture, lighting, art, decor, textiles and garden — sold by vetted dealers in the UK and 36 other countries. Filters are the source's own: free text, the category tree, period, decade, style, material, colour, designer, maker, condition group, the country the piece ships from, furniture features, seller, GBP price, sale and free-UK-delivery flags, and width / height / depth in centimetres. Every row carries its own price in GBP (list and sale), measured dimensions, period and decade, maker and designer, where it ships from and who sells it. `total` is the source's exact count and every row of it is reachable by paging.

**Parameters:**
- `query` (string, optional) — Free text. Matched the way the site's own search matches it: category names first, then product type, title, designer, brand, material, colour, style, decade and SKU, with typo tolerance.
- `category` (array, optional) — Category, as the source's own label path ('Furniture > Storage > Sideboards'), any single level of it that is unique ('Sideboards', 'Lighting'), or the lower-case slug form the categories action returns ('furniture/storage/sideboards'). 266 paths across 9 roots (Furniture 134,340 · Art 106,824 · Home Decor 106,339 · Lighting 64,412 · Textiles · Home Fixtures · Garden Decor · Garden Furniture · Garden Lighting). Several are OR-ed. A parent includes its children.
- `period` (array, optional) — Period, the source's own 6 values: Mid 20th Century 132,164 · Late 20th Century 87,819 · 19th Century 65,150 · Early 20th Century 64,873 · 21st Century 20,830 · 18th Century and Earlier 14,697. [one of: 18th Century and Earlier, 19th Century, Early 20th Century, Mid 20th Century, Late 20th Century, 21st Century]
- `decade` (array, optional) — Decade of manufacture as the source writes it: '1960s' 62,737, '1800s' 61,184, '1970s' 55,234, '1950s' 38,474 … down to '1500s'. Note the source groups the whole 19th century as '1800s'.
- `style` (array, optional) — Style, the source's own 34 values (Mid Century Modern 42,118, Scandinavian Modern 23,449, Art Deco 11,960, Victorian 14,409, French Antiques 16,210 …). A listing can carry several. [one of: Vintage, Antique, Mid Century Modern, Contemporary, Traditional, Scandinavian Modern, Oriental, Modernist, French Antiques, Victorian, Boho, Art Deco, Minimalist, Upcycled, Retro, Art Nouveau, Italian Antiques, African, Georgian, British Antiques, Edwardian, Rustic, Industrial, Postmodern, Gothic, Chinese Antiques, Shabby Chic, Bauhaus, Dutch Antiques, Danish Antiques, Neoclassical, Swedish Antiques, Campaign, Hollywood Regency]
- `material` (array, optional) — Main material, one of the source's 106 values (Teak 9,598, Oak 15,669, Walnut 9,530, Rosewood, Murano Glass 8,119, Brass 25,598, Marble, Leather 8,358 …). Case-insensitive; call facets with facet=material for the full list with counts.
- `color` (array, optional) — Colour, the source's own 34 values. [one of: Multicolor, Brown, Mahogany, Black, White, Gold, Walnut, Blue, Brass, Silver, Beige, Oak, Grey, Transparent, Green, Red, Bronze, Yellow, Cream, Pink, Orange, Chrome, Tan, Ivory, Copper, Purple, Stone, Turquoise, Teal, Coral, Olive, Indigo, Salmon, Lime]
- `designer` (array, optional) — Designer exactly as the source names them ('Hans J Wegner', 'Arne Jacobsen', 'Poul Henningsen', 'Marcel Breuer', 'Slim Aarons' …), 3,742 names. Case-insensitive. An unknown name is INVALID_PARAM, with the closest names the source does carry.
- `brand` (array, optional) — Maker / brand as the source names it ('Ercol', 'G Plan', 'Thonet', 'Fritz Hansen', 'Louis Poulsen', 'Venini' …), 454 names.
- `condition` (array, optional) — The source's age/condition group. The finer WEAR condition (Good, Excellent …) is on the listing page only — see detail. [one of: Used, Refurbished, New]
- `ships_from` (array, optional) — Country the piece ships FROM, as the source names it: United Kingdom 196,790 · France 43,223 · Italy 42,986 · Netherlands 24,758 · Germany 23,457 · Belgium 20,408 · Denmark 11,851 and 30 more. This is where the piece is, not a delivery destination.
- `feature` (array, optional) — Furniture features, the source's own 13 values. [one of: Nesting, Extendable, Drop Leaf, Swivel, With Footstool, Game & Card Table, Folding, Stackable, Modular, Reclining, Tilt Top, Mirror Included, Sofa Bed]
- `seller` (string, optional) — Only this seller's listings, by the seller slug a row carries in seller.slug (e.g. 'ibonstudija').
- `min_price` (number, optional) — Lowest price in GBP — the price a buyer pays today (the sale price when there is one). GBP is the source's only native currency.
- `max_price` (number, optional) — Highest price in GBP.
- `on_sale` (boolean, optional) — true = only discounted pieces (64,664 of 438,968).
- `free_uk_delivery` (boolean, optional) — true = only pieces with free UK delivery (44,564).
- `professional_seller` (boolean, optional) — true = professional dealers only (429,087); false = the private sellers (9,881).
- `min_width` (number, optional) — Minimum width in CENTIMETRES.
- `max_width` (number, optional) — Maximum width in CENTIMETRES.
- `min_height` (number, optional) — Minimum height in CENTIMETRES.
- `max_height` (number, optional) — Maximum height in CENTIMETRES.
- `min_depth` (number, optional) — Minimum depth in CENTIMETRES.
- `max_depth` (number, optional) — Maximum depth in CENTIMETRES.
- `sort` (enum, optional, default "relevance") — Order of results. Prices sort on the price a buyer pays today, in GBP. [one of: relevance, newest, price_asc, price_desc]
- `page` (integer, optional, default 1) — 1-based page. Paging is unwindowed: every row of the result is reachable, and a page past the end comes back EMPTY rather than repeating the last one (measured: 438,968 rows at 48 per page end on page 9,146; pages 9,147 and 20,000 are empty). `has_more` says when to stop.
- `page_size` (integer, optional, default 24) — Rows per page, 1-100.

**Returns:** {total, page, page_size, pages, has_more, sort, query, listings[{id, sku, url, title, currency, price_gbp, list_price_gbp, sale_price_gbp, on_sale, discount_pct, category{path, slug, level1..level4}, product_type, condition, period, decade, styles[], designer, brand, material, color, country_of_origin, dimensions_cm{width, height, depth}, features[], shape, set_of, number_of_seats/drawers/doors/shelves, art{movements, subjects, signed_by_artist}, certificate_of_authenticity, professionally_refurbished/reupholstered/cleaned, image, published_at, can_be_added_to_basket, free_uk_delivery, free_london_delivery, ships_from{city, country}, seller{name, slug, url, is_professional}}]}

**Example request body:**
```json
{
  "query": "sideboard",
  "period": [
    "Mid 20th Century"
  ],
  "ships_from": [
    "United Kingdom"
  ],
  "max_price": 3000,
  "page_size": 24
}
```

### POST https://api.reefapi.com/vinterior/v1/detail — 3 credits
One live listing in full, from its own page: the full description, the seller's condition report and extra measurements, the wear condition, the price stored and the price printed (GBP), whether the price includes UK import taxes, period, decade, origin, maker, designer, material, dimensions, every photo, the fixed UK delivery price and the Greater London quote, the seller's estimated delivery time and collection option, and the seller card (name, professional or private, rating, review count and star breakdown, sales count, selling since, location) with the latest reviews.

**Parameters:**
- `id` (string, required) — The listing, as the `id` a search row carries (7 digits, e.g. 1043739), its 8-digit SKU (75625378), or the full vinterior.co listing URL. Only LIVE listings resolve: a sold or withdrawn piece answers NOT_FOUND.

**Returns:** {listing{…every search field…, description, condition_report, additional_dimensions, price_shown, price_shown_gbp, list_price_shown, ld_json_price, price_includes_import_taxes, wear_condition, manufactured, size_class, images[], image_count, has_video, listed_at, available, sold, breadcrumbs[], location{text, country_code, in_london}, delivery{uk_fixed_price_label, uk_fixed_price_gbp, greater_london{…}, delivered_by, free_uk_delivery, local_pickup, estimated_delivery_time, free_collection_available}, seller{name, slug, url, storefront_url, kind, seller_type, rating, reviews_count, rating_breakdown, sales_count, selling_since, located_in, ships_from, in_uk, on_holiday}, seller_reviews[{rating, date, item_reviewed, text, buyer_first_name}]}}

**Example request body:**
```json
{
  "id": "1043739"
}
```

### POST https://api.reefapi.com/vinterior/v1/delivery — 3 credits
The delivery price of one live listing to ONE destination — any of the 23 the listing page offers: the 12 UK regions, eight European countries, the United States, rest of Europe and rest of the world — in GBP, exactly as the page itself resolves it: the destination's own quote, else the listing's fixed UK price for UK mainland regions, else 'Request a quote'. The answer says which.

**Parameters:**
- `id` (string, required) — The listing, as the `id` a search row carries (7 digits, e.g. 1043739), its 8-digit SKU (75625378), or the full vinterior.co listing URL. Only LIVE listings resolve: a sold or withdrawn piece answers NOT_FOUND.
- `destination` (enum, required) — Where the piece would be delivered — ONE of the 23 destinations the listing page's own selector offers (the 12 UK regions, Belgium, France, Germany, Hungary, Republic of Ireland, Italy, Netherlands, Spain, United States, Rest of Continental Europe, Rest of the world). One call prices one destination; for several, make one call each. The answer is stamped with its destination and never depends on where the API call is made from. [one of: United Kingdom - Greater London, United Kingdom - Northern Ireland, United Kingdom - Scotland, United Kingdom - Wales, United Kingdom - North East, United Kingdom - North West, United Kingdom - Yorkshire and the Humber, United Kingdom - West Midlands, United Kingdom - East Midlands, United Kingdom - South West, United Kingdom - South East, United Kingdom - East of England, Belgium, France, Germany, Hungary, Republic of Ireland, Italy, Netherlands, Spain, United States, Rest of Continental Europe, Rest of the world]

**Returns:** {listing{id, sku, url, title, price_gbp, ships_from}, currency, destination, destination_label, price_gbp, price_label, is_free, quote_on_request, source, delivery_on_day_of_choice, uk_fixed_price_read}

**Example request body:**
```json
{
  "id": "1043739",
  "destination": "United Kingdom - Greater London"
}
```

### POST https://api.reefapi.com/vinterior/v1/facets — 1 credit
Counts per value for any of the source's facets — category, period, decade, style, designer, brand, material, colour, condition, ships-from country, seller city, features, shape, set size, seats — over the whole catalogue or under the same filters search takes, plus GBP price and dimension statistics.

**Parameters:**
- `facet` (array, required) — Which facet counts to return. Several at once cost one call. [one of: category, category_level1, category_level2, category_level3, period, decade, style, designer, brand, material, color, condition, ships_from, city, feature, shape, seating_shape, set_of, number_of_seats]
- `max_values` (integer, optional, default 50) — Values per facet, most frequent first (1-250).
- `query` (string, optional) — Free text. Matched the way the site's own search matches it: category names first, then product type, title, designer, brand, material, colour, style, decade and SKU, with typo tolerance.
- `category` (array, optional) — Category, as the source's own label path ('Furniture > Storage > Sideboards'), any single level of it that is unique ('Sideboards', 'Lighting'), or the lower-case slug form the categories action returns ('furniture/storage/sideboards'). 266 paths across 9 roots (Furniture 134,340 · Art 106,824 · Home Decor 106,339 · Lighting 64,412 · Textiles · Home Fixtures · Garden Decor · Garden Furniture · Garden Lighting). Several are OR-ed. A parent includes its children.
- `period` (array, optional) — Period, the source's own 6 values: Mid 20th Century 132,164 · Late 20th Century 87,819 · 19th Century 65,150 · Early 20th Century 64,873 · 21st Century 20,830 · 18th Century and Earlier 14,697. [one of: 18th Century and Earlier, 19th Century, Early 20th Century, Mid 20th Century, Late 20th Century, 21st Century]
- `decade` (array, optional) — Decade of manufacture as the source writes it: '1960s' 62,737, '1800s' 61,184, '1970s' 55,234, '1950s' 38,474 … down to '1500s'. Note the source groups the whole 19th century as '1800s'.
- `style` (array, optional) — Style, the source's own 34 values (Mid Century Modern 42,118, Scandinavian Modern 23,449, Art Deco 11,960, Victorian 14,409, French Antiques 16,210 …). A listing can carry several. [one of: Vintage, Antique, Mid Century Modern, Contemporary, Traditional, Scandinavian Modern, Oriental, Modernist, French Antiques, Victorian, Boho, Art Deco, Minimalist, Upcycled, Retro, Art Nouveau, Italian Antiques, African, Georgian, British Antiques, Edwardian, Rustic, Industrial, Postmodern, Gothic, Chinese Antiques, Shabby Chic, Bauhaus, Dutch Antiques, Danish Antiques, Neoclassical, Swedish Antiques, Campaign, Hollywood Regency]
- `material` (array, optional) — Main material, one of the source's 106 values (Teak 9,598, Oak 15,669, Walnut 9,530, Rosewood, Murano Glass 8,119, Brass 25,598, Marble, Leather 8,358 …). Case-insensitive; call facets with facet=material for the full list with counts.
- `color` (array, optional) — Colour, the source's own 34 values. [one of: Multicolor, Brown, Mahogany, Black, White, Gold, Walnut, Blue, Brass, Silver, Beige, Oak, Grey, Transparent, Green, Red, Bronze, Yellow, Cream, Pink, Orange, Chrome, Tan, Ivory, Copper, Purple, Stone, Turquoise, Teal, Coral, Olive, Indigo, Salmon, Lime]
- `designer` (array, optional) — Designer exactly as the source names them ('Hans J Wegner', 'Arne Jacobsen', 'Poul Henningsen', 'Marcel Breuer', 'Slim Aarons' …), 3,742 names. Case-insensitive. An unknown name is INVALID_PARAM, with the closest names the source does carry.
- `brand` (array, optional) — Maker / brand as the source names it ('Ercol', 'G Plan', 'Thonet', 'Fritz Hansen', 'Louis Poulsen', 'Venini' …), 454 names.
- `condition` (array, optional) — The source's age/condition group. The finer WEAR condition (Good, Excellent …) is on the listing page only — see detail. [one of: Used, Refurbished, New]
- `ships_from` (array, optional) — Country the piece ships FROM, as the source names it: United Kingdom 196,790 · France 43,223 · Italy 42,986 · Netherlands 24,758 · Germany 23,457 · Belgium 20,408 · Denmark 11,851 and 30 more. This is where the piece is, not a delivery destination.
- `feature` (array, optional) — Furniture features, the source's own 13 values. [one of: Nesting, Extendable, Drop Leaf, Swivel, With Footstool, Game & Card Table, Folding, Stackable, Modular, Reclining, Tilt Top, Mirror Included, Sofa Bed]
- `seller` (string, optional) — Only this seller's listings, by the seller slug a row carries in seller.slug (e.g. 'ibonstudija').
- `min_price` (number, optional) — Lowest price in GBP — the price a buyer pays today (the sale price when there is one). GBP is the source's only native currency.
- `max_price` (number, optional) — Highest price in GBP.
- `on_sale` (boolean, optional) — true = only discounted pieces (64,664 of 438,968).
- `free_uk_delivery` (boolean, optional) — true = only pieces with free UK delivery (44,564).
- `professional_seller` (boolean, optional) — true = professional dealers only (429,087); false = the private sellers (9,881).
- `min_width` (number, optional) — Minimum width in CENTIMETRES.
- `max_width` (number, optional) — Maximum width in CENTIMETRES.
- `min_height` (number, optional) — Minimum height in CENTIMETRES.
- `max_height` (number, optional) — Maximum height in CENTIMETRES.
- `min_depth` (number, optional) — Minimum depth in CENTIMETRES.
- `max_depth` (number, optional) — Maximum depth in CENTIMETRES.

**Returns:** {total, facets{<name>[{value, count}]}, distinct{<name>: n}, statistics{price_gbp{min, max, avg}, width_cm{…}, height_cm{…}}}

**Example request body:**
```json
{
  "facet": [
    "period",
    "designer",
    "material"
  ],
  "category": [
    "Furniture > Seating"
  ]
}
```

### POST https://api.reefapi.com/vinterior/v1/categories — 1 credit
The source's own category tree (9 roots, 266 paths) with the live number of listings in each, the label path that search's `category` accepts and a slug.

**Parameters:**
- `root` (string, optional) — Only this root's subtree, by label or slug ('Lighting', 'home-decor').

**Returns:** {total_paths, categories[{name, path, slug, level, count, children[…]}]}

**Example request body:**
```json
{
  "root": "Lighting"
}
```

### POST https://api.reefapi.com/vinterior/v1/suggest — 1 credit
Search suggestions from the site's own suggestion index (14,869 phrases), with how popular each phrase is, how many listings it finds and its main category.

**Parameters:**
- `query` (string, required) — What the user has typed so far.
- `page_size` (integer, optional, default 10) — Suggestions to return, 1-50.

**Returns:** {query, total, suggestions[{query, popularity, listings, top_category, categories[]}]}

**Example request body:**
```json
{
  "query": "sideb",
  "page_size": 10
}
```

### POST https://api.reefapi.com/vinterior/v1/seller — 2 credits
One seller's live inventory: how many pieces they list, where they ship from, whether they are a professional dealer, the split of their stock by category and period, and a page of their listings (newest first by default).

**Parameters:**
- `id` (string, required) — The seller slug a listing row carries in seller.slug ('ibonstudija'), or the vinterior.co/sellers/… URL.
- `sort` (enum, optional, default "newest") — Order of the listings. [one of: relevance, newest, price_asc, price_desc]
- `page` (integer, optional, default 1) — 1-based page. Paging is unwindowed: every row of the result is reachable, and a page past the end comes back EMPTY rather than repeating the last one (measured: 438,968 rows at 48 per page end on page 9,146; pages 9,147 and 20,000 are empty). `has_more` says when to stop.
- `page_size` (integer, optional, default 24) — Rows per page, 1-100.

**Returns:** {seller{name, slug, url, is_professional, ships_from{city, country}, live_listings, categories[{value, count}], periods[{value, count}], price_gbp{min, max, avg}}, page, page_size, pages, has_more, listings[…]}

**Example request body:**
```json
{
  "id": "ibonstudija",
  "page_size": 20
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=vinterior
- Human docs page: https://reefapi.com/docs/vinterior
- Overview page: https://reefapi.com/vinterior-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
