Vinted API

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.

V
/vinted/v1

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.

14 endpoints

catalog_search

2 cr

keyword + filter search (brand/size/condition/category/color/material/price).

required
optional
query, search_text, filters, brand_ids, size_ids, status_ids, catalog_ids, color_ids, material_ids, price_from, price_to, currency, order, per_page, page, tld

item_detail

2 cr

Full Vinted item detail.

required
optional
id, item_id, url, path, tld

seller

1 cr

seller profile (login/rating/item_count/feedback breakdown).

required
id
optional
user_id, seller_id, tld

seller_items

1 cr

a seller's wardrobe items.

required
id
optional
user_id, seller_id, page, per_page, tld

seller_feedback

1 cr

feedback left for a seller (text/rating/reviewer).

required
id
optional
user_id, seller_id, page, per_page, tld

brand_search

1 cr

resolve a brand name -> brand_id (+ item/favourite counts).

required
optional
query, search_text, page, per_page, tld

autocomplete

1 cr

search typeahead.

required
query
optional
search_text, q, tld

similar

1 cr

items similar to a given item (items/{id}/more).

required
id
optional
item_id, content_source, tld

catalog_filters

1 cr

dynamic facets (size/brand/status/color/price/material + option ids) for a query/category.

required
optional
query, search_text, catalog_ids, tld

categories

0 cr

Full Vinted category tree.

required
optional
tld

colors

0 cr

color enum (id/title/hex/code).

required
optional
tld

conditions

0 cr

item-condition enum (status id/title).

required
optional
tld

countries

0 cr

country enum (id/iso/currency).

required
optional
tld

sizes

0 cr

size groups + size ids.

required
optional
tld

Every parameter, every allowed value →

Vinted API

4 of 14 endpoints, ready to run

View docs ↗

The listing feed: brand, size, condition, the item price and the buyer-protection total, photos and the seller.

2 credits0 required · 4 optional
POST/vinted/v1/catalog_search
idle
// 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.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /vinted/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
0 or 1 or 2 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

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.

01brand_search
POST/vinted/v1/brand_search
{"query": "nike", "tld": "co.uk"}

Take brands[].id. Brand, category, colour, size and condition all have their own free lookup endpoints.

02catalog_search
POST/vinted/v1/catalog_search
{"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.

request
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}'
response envelope
{
  "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 idWhat it isMeasured value
price.amountWhat the seller is asking40.00 EUR on item 9791322541
service_fee.amountBuyer Protection, added at checkout2.70 EUR on that same item
total_item_price.amountprice plus service_fee, what the buyer actually pays42.70 EUR
status_ids 6 / 1New with tags / New without tags"Neuf avec étiquette" / "Neuf sans étiquette" on the fr site
status_ids 2 / 3Very good / Good"Très bon état" / "Bon état" on fr, "Very good" / "Good" on co.uk
status_ids 4 / 7Satisfactory / Not fully functionalthe 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.ratingA 0-1 reputation ratio rounded to two decimals, not a star score0.9 for a seller with 747 positive and 108 negative feedbacks
feedback[].ratingThe actual 1-5 star score on one piece of feedback5
item idThe digits in /items/<id>-slug, 10 digits today9791322541
seller idThe digits in /member/<id>-login82436116

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.

Sites

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.

Item ids are global

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.

What the site parameter does

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.

Against us — the price is converted, and not consistently

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.

Two prices per row, and they are not the same

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.

Against us — detail returns less than search

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.

Against us — a search window, and uneven speed

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.

14

endpoints

0/1/2

credits per call

01

Resale-price tools call catalog_search to track second-hand prices for a brand and size.

02

Reselling products use seller_items and seller_feedback to study a competitor's shop.

03

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 →
$0.67–$1.50 / 1,000 credits
  • 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
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}'
python
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"])
FAQ

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.