Read Vinted listings from twenty country sites with one API
The Vinted API returns second-hand fashion listings, item and seller data as clean JSON.
14 active endpoints, on 0, 1 and 2 credit tiers.
- POST/vinted/v1/catalog_search
- POST/vinted/v1/item_detail
- POST/vinted/v1/seller
- POST/vinted/v1/seller_items
- POST/vinted/v1/seller_feedback
- POST/vinted/v1/brand_search
- POST/vinted/v1/autocomplete
- +7 more
What Vinted endpoints does ReefAPI ship?
14 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Vinted API
4 of 14 endpoints, ready to run
The listing feed: brand, size, condition, the item price and the buyer-protection total, photos and the seller.
// 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 Vinted API works
Vinted 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 185 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.
Resolve the brand, then filter the catalogue by its id
Free-text search works, but brand filtering is what makes a resale feed clean — and that needs an id, not a name. The reference calls that hand you those ids are free on this engine.
{"query": "nike", "tld": "co.uk"}Take brands[].id. Brand, category, colour, size and condition all have their own free lookup endpoints.
{"brand_ids": <id>, "tld": "co.uk", "per_page": 20}Filtering by id gives you the brand's listings rather than every listing that mentions the word in a title.
The catalogue calls cost two credits and item detail costs two; sellers, brands and autocomplete cost one; and the five reference lists — categories, colours, conditions, countries and sizes — cost nothing at all.
curl -X POST https://api.reefapi.com/vinted/v1/catalog_search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"nike","tld":"fr","per_page":20}'{
"ok": true,
"data": { … },
"meta": {
"api": "vinted",
"endpoint": "catalog_search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}Vinted's two prices, the condition ids and the 0-1 seller rating
Two numbers on a Vinted listing are easy to read wrong: the asking price is not what the buyer pays, and the seller rating is not a star score. Condition also arrives in two different vocabularies depending on which action you call. Measured on 2026-08-27 on vinted.fr and vinted.co.uk.
| Field or id | What it is | Measured value |
|---|---|---|
| price.amount | What the seller is asking | 40.00 EUR on item 9791322541 |
| service_fee.amount | Buyer Protection, added at checkout | 2.70 EUR on that same item |
| total_item_price.amount | price plus service_fee, what the buyer actually pays | 42.70 EUR |
| status_ids 6 / 1 | New with tags / New without tags | "Neuf avec étiquette" / "Neuf sans étiquette" on the fr site |
| status_ids 2 / 3 | Very good / Good | "Très bon état" / "Bon état" on fr, "Very good" / "Good" on co.uk |
| status_ids 4 / 7 | Satisfactory / Not fully functional | the last two ids returned by the conditions action |
| condition (catalog_search) | The localized label for the site you queried | "Très bon état" on fr, "Very good" on co.uk |
| condition (item_detail) | A schema.org value instead of the label | "UsedCondition", alongside availability "InStock" |
| seller.rating | A 0-1 reputation ratio rounded to two decimals, not a star score | 0.9 for a seller with 747 positive and 108 negative feedbacks |
| feedback[].rating | The actual 1-5 star score on one piece of feedback | 5 |
| item id | The digits in /items/<id>-slug, 10 digits today | 9791322541 |
| seller id | The digits in /member/<id>-login | 82436116 |
Both measured sites charged the same fee shape on the day: 0.70 plus 5 percent of the asking price. 40.00 EUR gave 2.70 and 13.50 EUR gave 1.38 on fr, and 7.42 GBP gave 1.07 on co.uk. That is Vinted's charge, not ours and not a constant we control, so read service_fee rather than recomputing it.
One id space, twenty currencies
Vinted is the exact opposite of the other classifieds in this batch, and getting it backwards is expensive. Measured by taking one item id and asking five different national sites for it.
Twenty, from France, Germany and the UK through Poland, Czechia, Sweden, Lithuania and the rest of Europe, plus the international site. One parameter switches between them.
Not per country. The same numeric id turned up in the Polish and the Swedish result sets, and another in the Polish and the Czech ones, in the same run. This is the reverse of OLX, where an id from one country is unknown in the next.
It decides which storefront answers, and that decides the currency you are quoted. The same item asked for on five sites came back in five different presentations of one price.
One item, one afternoon, two rounds: the Polish site quoted it in zloty, the Swedish site in krona, the British site in sterling — and the French and German sites handed back the seller's own Danish krone, unconverted. So the currency is not simply the site's own. Read the currency code on every row; never assume it from the site you asked.
Search rows carry the item price, the buyer-protection fee and the total the buyer actually pays, as three separate fields. Comparing one seller's item price against another's total will show a difference that does not exist.
The item detail response leaves out the buyer-protection total that the search row carries. If you need it, take it from the search row rather than re-fetching the item.
Paging is capped at a fixed window per query and the response reports both the cap and where it stopped. Speed also varies a lot between sites and between calls on the same site — in one run the British site answered in about a second while the French one took the better part of half a minute for the same query. Set generous timeouts.
What people build with Vinted
The jobs this data is most often used for.
endpoints
credits per call
Resale-price tools call catalog_search to track second-hand prices for a brand and size.
Reselling products use seller_items and seller_feedback to study a competitor's shop.
Fashion apps use brand_search and similar to surface comparable second-hand listings.
What Vinted data costs
The cheapest call here is 0 credits, 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 185 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/vinted/v1/catalog_search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"nike","tld":"fr","per_page":20}'import requests
r = requests.post(
"https://api.reefapi.com/vinted/v1/catalog_search",
headers={"x-api-key": REEF_KEY},
json={
"query": "nike",
"tld": "fr",
"per_page": 20
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Vinted.
Get a free key →Vinted shows two prices. Do both come through?▾
Yes, on catalog_search, seller_items and similar rows. price is what the seller asks, service_fee is the Buyer Protection charge and total_item_price is what the buyer pays. Item 9791322541 came back as 40.00, 2.70 and 42.70 EUR. All three are objects with their own currency field, so read amount and currency instead of assuming the site's currency.
Why does item_detail have no service fee?▾
Because the detail page and the catalog feed publish different things. item_detail returns a single price object with no service_fee and no total_item_price, and its url field also comes back null. If you need the fee or the buyer total for a specific item, take it from a catalog_search or seller_items row rather than from the detail call.
Why does condition say "UsedCondition" on one action and "Very good" on another?▾
They come from different parts of the page. catalog_search returns the label Vinted shows shoppers, localized to the site you queried. item_detail returns the schema.org vocabulary from the page markup, which collapses to values like "UsedCondition" with availability "InStock". The localized label is still available on item_detail, inside attributes[] under the key "status".
How do I filter by condition when the labels are translated?▾
Filter with status_ids, which are numeric and stable across sites: 6 New with tags, 1 New without tags, 2 Very good, 3 Good, 4 Satisfactory, 7 Not fully functional. Calling the conditions action on fr and on co.uk returned the same six ids in the same order, with French and English titles. Never match on the label text.
Is seller.rating a five-star score?▾
No, it is a 0-1 reputation ratio rounded to two decimals. Measured across five sellers: 268 positive with 1 negative gave 1.0, 595 positive with 8 negative gave 0.98, and 747 positive with 108 negative gave 0.9. The five-star numbers live on the individual feedback rows from seller_feedback, where rating is an integer 1 to 5. A seller.rating of 1.0 means near-perfect, not one star.
How deep can I page through Vinted search results?▾
About 960 items per filter combination. A search for 'nike hoodie' on fr reported total_entries 960 with meta.window_cap 960 and meta.stop_reason "cap_reached". per_page goes up to 96 and larger values are capped there. To go deeper, narrow with brand_ids, catalog_ids, size_ids or a price range rather than paging further.
Which country site am I actually reading?▾
Whichever tld you pass, and it defaults to fr rather than to an international site. tld picks both the listings and the currency: fr, de, es, it, nl, be, lt, lu, at, pt, sk and fi are EUR, co.uk is GBP, pl is PLN, cz CZK, se SEK, ro RON, hu HUF, dk DKK, and com is the international site in EUR. The same query on fr and on co.uk returns different items, not translations of the same items.
How do I tell when a listing was posted?▾
uploaded_ts on the item and on each photo is a Unix epoch in seconds, so 1787783412 on the item measured here was the moment the seller uploaded it. Combined with order="newest_first" that makes catalog_search usable as a live feed. Photos also carry dominant_color as a hex string, is_main, width, height and a separate full_size_url.
What is the Vinted API?▾
Vinted API is a ReefAPI endpoint group for second-hand fashion listings and prices. It returns live JSON through POST requests under /vinted/v1.
Is the Vinted API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Vinted calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Vinted login or account?▾
No login to Vinted 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 Vinted data?▾
The page example is captured from a live catalog_search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Vinted API use?▾
Vinted 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 Vinted from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call vinted actions with the same key, credit pool and JSON envelope used by normal REST requests.
37 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Vinted, you are one call away from the rest of the category — no second contract, no second integration.
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 184 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-08-27.