Vestiaire Collective API & Scraper
The Vestiaire Collective API turns vestiairecollective.com, the luxury resale marketplace, into clean JSON in four actions: search, product/detail, seller/listings and suggest.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
One validated country parameter picks the buyer country (the United States, the United Kingdom, France, Germany, Italy, Spain, the Netherlands, Belgium, Austria, Ireland, Portugal, Greece, Finland, Switzerland, Sweden, Denmark, Poland, Hong Kong, Singapore, Australia, Canada, Japan or South Korea), and every price comes back as that country pays it, in its currency (13 currencies). A language parameter returns names, categories, conditions and URLs in English, French, German, Italian, Spanish, Dutch, Swedish, Korean or Chinese, and keyword search follows it. search covers listings for sale and sold listings for price research, with the site's own sorts (relevance, newest, price) and filters (brand, model, category, department, condition, colour, material, Expert or Trusted seller, Direct Shipping, price range, listed after), up to 200 rows a page. Each row carries the product id, name, brand, model, category, condition, size, colours, price, the original price and price-drop percentage, sold flag, likes, listing date, seller id and badge, the country the item is in, and images. product/detail adds what a resale buyer checks: the price split into the seller's price and Vestiaire's buyer fee (with whether it includes authentication), the flat fees listed apart, the seller (private or professional, badges, items listed and sold, sales, shipping and cancellations over the last six months), shipping to that country, measurements and the seller's description. seller/listings returns one seller's items for sale or sold. suggest is the autocomplete with brand ids. A query with no genuine match returns empty instead of a page of unrelated padding, and the site's own spelling correction is reported. In a live check on 2026-09-16, 107 of 107 cases passed across all 23 countries, and on 6 of 6 listings the name, brand, price, currency, sold status and condition matched the listing page. No Vestiaire account, no browser, one ReefAPI key and the standard { ok, data, meta, error } envelope.
The same listing costs a different amount in every country, because the buyer fee depends on where it ships
A Vestiaire price is not one number. It includes a buyer-service fee that is lower when the item is already in the buyer's country and higher cross-border, and a flat fee is added on top at checkout. The API returns the price each country pays and splits it.
| Gucci polo shirt, never worn (item in the US) | price | seller price | buyer fee | flat fee listed apart |
|---|---|---|---|---|
| United States (USD) | 368 | 320 | 48 (15 %) | 15 |
| United Kingdom (GBP) | 312 | 243.72 | 68.28 (28 %) | 15 |
| France (EUR) | 365 | 284.38 | 80.62 (28 %) | 15 |
| Japan (JPY) | 64,900 | 50,661 | 14,239 (28 %) | 2,000 |
Values from 2026-09-16 for item 70532143. price = seller price + buyer fee on every measured listing; the flat fee is not inside price. original_price (978 USD here) is the price before the seller dropped it, and price_drop_percent (62) is the drop. Sold listings keep their last price and add sold_at; they carry no fee split.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/vestiaire/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"country": "us",
"query": "chanel bag"
}
}{
"ok": true,
"meta": {
"api": "vestiaire",
"endpoint": "search",
"mode": "live",
"latency_ms": 1535.9,
"record_count": 48,
"bytes": 70467,
"cache_hit": false,
"pagination": {
"page": 1,
"page_size": 48,
"total": 10000,
"has_more": true
}
},
"data": {
"results": [
{
"product_id": "71145764",
"url": "https://us.vestiairecollective.com/women-bags/handbags/chanel/black-leather-chanel-handbag-71145764.shtml",
"name": "Leather handbag",
"brand": "Chanel",
"brand_id": "50",
"model": null,
"model_id": null,
"gender": "women",
"base_category": "Bags",
"base_category_id": "5",
"category": "Handbags",
"category_id": "59",
"condition": "Good condition",
"condition_id": "4",
"size": null,
"color": "Black",
"colors": [
"Black"
],
"price": 1955,
"currency": "USD",
"original_price": null,
"price_drop_percent": null,
"sold": false,
"likes": 23,
"listed_at": "2026-09-16T00:32:04Z",
"seller_id": "8056923",
"seller_badge": "Expert",
"seller_is_official_store": false,
"item_country_code": "US",
"local_delivery": true,
"direct_shipping": false,
"duty_free": true,
"editor_picks": null,
"description": "Chanel thread around crossbody bag from the 2017 cuba resort collection. Gorgeous bag, but the straps have some wear (cracking, peeling).\n\nBody of the bag is in great condition. Comes with entrupy card.\n\n7\"h x 11\"w",
"image": "https://images.vestiairecollective.com/produit/71145764-1_2.jpg",
"images": [
"https://images.vestiairecollective.com/produit/71145764-1_2.jpg"
]
},
{
"product_id": "71100705",
"url": "https://us.vestiairecollective.com/women-bags/handbags/chanel/black-patent-leather-timeless-classique-chanel-handbag-71100705.shtml",
"name": "Timeless/Classique patent leather mini bag",
"brand": "Chanel",
"brand_id": "50",
"model": "Timeless/Classique",
"model_id": "7597",
"gender": "women",
"base_category": "Bags",
"base_category_id": "5",
"category": "Handbags",
"category_id": "59",
"condition": "Never worn",
"condition_id": "2",
"size": null,
"color": "Black",
"colors": [
"Black"
],
"price": 2473,
"currency": "USD",
"original_price": null,
"price_drop_percent": null,
"sold": false,
"likes": 23,
"listed_at": "2026-09-14T22:52:49Z",
"seller_id": "35419985",
"seller_badge": null,
"seller_is_official_store": false,
"item_country_code": "US",
"local_delivery": true,
"direct_shipping": false,
"duty_free": true,
"editor_picks": null,
"description": "ULTRA RARE COLLECTIBLE Chanel Double Mini Flap Waist Bag / Belt Bag - PINK AND BLACK\n\nHeight: 5.91 inches / 15 cm\nWidth: 39.76 inches / 101 cm (belt length)\nDepth: 1.18 inches / 3 cm",
"image": "https://images.vestiairecollective.com/produit/71100705-1.jpg",
"images": [
"https://images.vestiairecollective.com/produit/71100705-1.jpg"
]
},
{
"product_id": "71012006",
"url": "https://us.vestiairecollective.com/women-bags/handbags/chanel/black-leather-medaillon-chanel-handbag-71012006.shtml",
"name": "Médaillon leather tote",
"brand": "Chanel",
"brand_id": "50",
"model": "Médaillon",
"model_id": "826",
"gender": "women",
"base_category": "Bags",
"base_category_id": "5",
"category": "Handbags",
"category_id": "59",
"condition": "Very good condition",
"condition_id": "3",
"size": null,
"color": "Black",
"colors": [
"Black"
],
"price": 1609,
"currency": "USD",
"original_price": null,
"price_drop_percent": null,
"sold": false,
"likes": 15,
"listed_at": "2026-09-14T17:34:15Z",
"seller_id": "27807811",
"seller_badge": "Expert",
"seller_is_official_store": false,
"item_country_code": "US",
"local_delivery": true,
"direct_shipping": false,
"duty_free": true,
"editor_picks": [
"vintage"
],
"description": "Black Chanel caviar leather Medallion tote with silver hardware. Very good condition.\nMinor corner rubbings\nHandles still stand on their own\nWith hologram intact\nCOA and dust bag\n\nDimensions: 10 x 12 x 6.25 in",
"image": "https://images.vestiairecollective.com/produit/71012006-1_2.jpg",
"images": [
"https://images.vestiairecollective.com/produit/71012006-1_2.jpg"
]
}
],
"count": 48,
"total_results": 10000,
"total_is_capped": true,
"page": 1,
"page_size": 48,
"has_more": true,
"status": "available",
"sort": "relevance",
"query": "chanel bag",
"corrected_query": null,
"country": "us",
"currency": "USD",
"language": "en",
"keyword_matches_on_page": 48,
"fallback_results_dropped": 0
}
}What the Vestiaire Collective API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Vestiaire Collective listings by keyword and/or brand, model and category, for sale or sold, with the site's own sorts and filters (department, condition, colour, material, seller badge, Direct Shipping, price range, listed after). Each row: product id and url, name, brand, model, category, condition, size, colours, the price a buyer in that country pays with the original price and price-drop %, sold flag, likes, listing date, seller id and badge, the item's country, local-delivery and Direct Shipping flags, and images. A query with no genuine match returns empty (padding counted in fallback_results_dropped); the site's own spelling correction is reported. | Pricing teams call search to search Vestiaire Collective listings by keyword and/or brand, model and category, for sale or…. | country, currency, language, query, include_fallback_results, ... |
| product/detail | One Vestiaire Collective listing in full, by product id or URL, priced for a buyer country: name, brand, model, category path, condition, colour, material, size, measurements, the seller's description, price with seller price vs buyer fee (and whether the fee includes authentication), the flat fees listed apart, original price and price drop, negotiable, sold with sold date, reserved, Direct Shipping, likes, listing date, the seller (username, private or professional, country, badges, items listed and sold, last-6-months sales history) and shipping to that country (ships from, dispatch delay, buyable), plus every image. | Marketplace operators call product/detail to get one Vestiaire Collective listing in full, by product id or URL, priced for a buyer country. | country, currency, language, product_id, url |
| seller/listings | One seller's Vestiaire Collective listings (for sale, sold or both) with the same row fields, sorts and filters as search. Use status=sold for a seller's sales record. | Catalog enrichment teams call seller/listings to get one seller's Vestiaire Collective listings (for sale, sold or both) with the same row fields,…. | seller_id, country, currency, language, query, ... |
| suggest | Vestiaire Collective autocomplete for a partial keyword: matching brands with their brand_id and URL, and the phrase suggestions the search box shows. | Retail analysts call suggest to get vestiaire Collective autocomplete for a partial keyword. | query, country, language, limit |
Call search from your stack
curl -X POST https://api.reefapi.com/vestiaire/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"country":"us","query":"chanel bag"}'import requests
r = requests.post(
"https://api.reefapi.com/vestiaire/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"country": "us",
"query": "chanel bag"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/vestiaire/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"country": "us",
"query": "chanel bag"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.vestiaire.search with {"country":"us","query":"chanel bag"}.Who uses this API and why
- Resellers and luxury buyers price an item from sold listings of the same model, condition and country before buying or listing.
- Price-monitoring teams track what a bag or watch costs buyers in 23 countries, with the fee share separated from the seller's price.
- Consignment and authentication businesses watch new listings for a brand or model with listed_after and seller badges.
- Market researchers measure price drops, time on sale and sold volumes across brands and categories.
Questions developers ask before integrating
Which countries and currencies does it cover?
23 buyer countries: the United States, the United Kingdom, France, Germany, Italy, Spain, the Netherlands, Belgium, Austria, Ireland, Portugal, Greece, Finland, Switzerland, Sweden, Denmark, Poland, Hong Kong, Singapore, Australia, Canada, Japan and South Korea. The currency follows the country, and currency can be set to any of the 13 currencies Vestiaire prices in (EUR, USD, GBP, CHF, SEK, DKK, PLN, HKD, SGD, AUD, CAD, JPY, KRW). An unsupported country or currency returns INVALID_PARAM rather than unpriced rows.
Why does one listing have a different price per country?
Because the price includes Vestiaire's buyer fee, and the fee depends on the destination. For an item located in the US, a US buyer paid a 15 % fee (368 USD) and buyers in the UK, France and Japan paid 28 % (312 GBP, 365 EUR, 64,900 JPY) on 2026-09-16. product/detail returns price_breakdown with seller_price, buyer_fee, buyer_fee_percent and whether the fee includes authentication, plus flat_buyer_fees, which are listed separately and are not part of price.
Can I research sold prices?
Yes. search and seller/listings take status=sold (or all). Sold listings stay resolvable in product/detail with sold: true, sold_at and the last listed price. A live search for sold Hermès Birkin listings in France returned 784 results. Vestiaire does not publish the fee split for a sold listing, so price_breakdown is null there.
What is the difference between price, original_price and the seller price?
price is what a buyer in the chosen country pays, fee included. original_price is the buyer price before the seller dropped it, returned only when it is higher, with price_drop_percent. price_breakdown.seller_price is the part the seller set, and seller_original_price is the seller's own price before the drop. None of these is invented: when Vestiaire publishes no drop, original_price is null.
What does it tell me about the seller?
Search rows carry the seller id, the Expert or Trusted badge and whether the seller is an official store. product/detail adds the seller's public username, whether it is a private or professional seller, country, badges, items listed and sold, and the sales history Vestiaire shows for the last six months (sold, shipped within 7 days, cancelled). Seller first names are not returned. seller/listings lists one seller's items for sale or sold.
What happens on a query with no match or a typo?
Vestiaire fills a no-match search with unrelated listings. Those are dropped and counted in fallback_results_dropped, and include_fallback_results=true returns them separately. In a live check 42 of 42 real queries kept their results, including typos and searches in French, German, Italian, Spanish, Dutch, Swedish, Korean and Chinese, and 10 of 10 nonsense queries came back empty. When the site corrects a spelling itself ('hermmes' to 'hermes'), corrected_query says so.
Is every field filled for every listing?
No, and nulls mean the listing does not publish the field. Across 12 listings in bags, women's clothing, shoes and watches or jewellery, brand, condition, colour, material, price, the fee split, seller and shipping were filled on all of them. Size appears on clothing and shoes, measurements on bags, and model only where the item has a named model.
What is the Vestiaire Collective API?
Vestiaire Collective API is a ReefAPI endpoint group for second-hand luxury in 23 countries: for-sale and sold listings with the price each country pays, split into seller price and buyer fee, as json. It returns live JSON through POST requests under /vestiaire/v1.
Is the Vestiaire Collective API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Vestiaire Collective calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Vestiaire Collective login or account?
No login to Vestiaire Collective 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 Vestiaire Collective 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 Vestiaire Collective API use?
Vestiaire Collective actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Vestiaire Collective from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call vestiaire actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Vestiaire Collective API a Vestiaire Collective scraper?
It is the managed alternative to a DIY Vestiaire Collective scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same second-hand luxury in 23 countries: for-sale and sold listings with the price each country pays, split into seller price and buyer fee, as json back as clean JSON.