Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Vestiaire Collective API page →
E-commerce & Marketplaces

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.

4 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 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.

Reference

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)priceseller pricebuyer feeflat fee listed apart
United States (USD)36832048 (15 %)15
United Kingdom (GBP)312243.7268.28 (28 %)15
France (EUR)365284.3880.62 (28 %)15
Japan (JPY)64,90050,66114,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.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "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"
  }
}
Captured response
{
  "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
  }
}
Actions

What the Vestiaire Collective API does

ActionDescriptionConcrete use caseKey params
searchSearch 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/detailOne 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/listingsOne 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, ...
suggestVestiaire 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
Code samples

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"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.vestiaire.search with {"country":"us","query":"chanel bag"}.
Use cases

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.
FAQ

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.

docs / vestiaire

Vestiaire Collective

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.

base /vestiaire/v14 endpoints
post/vestiaire/v1/product/detail2 credits

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.

ParameterAllowed / rangeDescription
country = usoptionalus · gb · fr · de · it · es · nl · be · at · ie · pt · gr · fi · ch · se · dk · pl · hk · sg · au · ca · jp · krBuyer country (ISO-2; 'uk' accepted for gb). Prices include Vestiaire's buyer fee for delivery to this country, and the currency and language follow it. Default us.
currencyoptionalEUR · USD · GBP · HKD · SGD · AUD · CAD · PLN · CHF · SEK · DKK · JPY · KRWOverride the country's currency with one of the 13 currencies Vestiaire prices in.
languageoptionalen · fr · de · it · es · nl · sv · ko · zhLanguage of names, categories, conditions and URLs; the keyword search follows it. Default: the country's language.
product_idoptionalVestiaire product id (the number before .shtml in a product URL; rows return product_id).
urloptionalA vestiairecollective.com product URL instead of product_id.
Try in playground →
post/vestiaire/v1/seller/listings2 credits

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.

ParameterAllowed / rangeDescription
seller_idrequiredVestiaire seller id (search rows and product/detail return it).
country = usoptionalus · gb · fr · de · it · es · nl · be · at · ie · pt · gr · fi · ch · se · dk · pl · hk · sg · au · ca · jp · krBuyer country (ISO-2; 'uk' accepted for gb). Prices include Vestiaire's buyer fee for delivery to this country, and the currency and language follow it. Default us.
currencyoptionalEUR · USD · GBP · HKD · SGD · AUD · CAD · PLN · CHF · SEK · DKK · JPY · KRWOverride the country's currency with one of the 13 currencies Vestiaire prices in.
languageoptionalen · fr · de · it · es · nl · sv · ko · zhLanguage of names, categories, conditions and URLs; the keyword search follows it. Default: the country's language.
queryoptionalKeyword (brand, model, item). Optional when a brand, model, category or seller filter is given.
status = availableoptionalavailable · sold · allFor-sale listings, sold listings (price research) or both.
sort = relevanceoptionalrelevance · newest · price_asc · price_descResult order.
gender = alloptionalall · women · men · kidsDepartment.
conditionoptionalnever_worn_with_tag · never_worn · very_good · good · fairItem condition.
brand_idoptionalVestiaire brand id (rows and suggest return brand_id; 50 = Chanel).
model_idoptionalVestiaire model id (rows return model_id; 7597 = Chanel Timeless/Classique).
category_idoptionalTop category id, per department: women 2 clothing, 3 shoes, 5 bags, 6 accessories, 63 jewellery; men's ids differ (12 clothing, 13 shoes …). Rows return base_category_id; include_facets lists them with their department.
color_idoptionalColour id (14 black, 1 white …; include_facets lists them).
material_idoptionalMaterial id (3 leather, 2 cotton …; include_facets lists them).
seller_badgeoptionalexpert · trustedOnly listings from sellers with this Vestiaire badge.
direct_shipping = falseoptionalOnly listings eligible for Direct Shipping (sent by the seller straight to the buyer).
price_minoptionalMinimum price in the response currency.
price_maxoptionalMaximum price in the response currency.
listed_afteroptionalOnly listings created on or after this date (YYYY-MM-DD, UTC).
page = 1optional1–2011-based page. Vestiaire serves results up to offset 1000.
page_size = 48optional1–200Rows per page (up to 200).
include_facets = falseoptionalAlso return facet counts (brands, categories, colours, conditions, item countries, seller badges, materials, price ranges, sold) with their ids.
Try in playground →
post/vestiaire/v1/suggest1 credit

Vestiaire Collective autocomplete for a partial keyword: matching brands with their brand_id and URL, and the phrase suggestions the search box shows.

ParameterAllowed / rangeDescription
queryrequiredPartial keyword.
country = usoptionalus · gb · fr · de · it · es · nl · be · at · ie · pt · gr · fi · ch · se · dk · pl · hk · sg · au · ca · jp · krBuyer country (ISO-2; 'uk' accepted for gb). Prices include Vestiaire's buyer fee for delivery to this country, and the currency and language follow it. Default us.
languageoptionalen · fr · de · it · es · nl · sv · ko · zhLanguage of names, categories, conditions and URLs; the keyword search follows it. Default: the country's language.
limit = 10optional1–20Maximum brands and maximum phrase suggestions.
Try in playground →